source: internals/2016/aptoideimagesdetector/trunk/Source Code/API to download database/get_store_info.py @ 16359

Last change on this file since 16359 was 16358, checked in by dferreira, 4 years ago

Database started running

File size: 6.7 KB
Line 
1# Diogo Ferreira
2# Aptoide, 2016
3# This script receives an argument the maximum number of id's to search.
4# It connects to the database and saves information on the id's that were not processed yet.
5# Example: python get_store_info.py 20
6
7from bs4 import BeautifulSoup
8import urllib
9import urllib2
10import json
11import sys, traceback
12import sqlite3
13import os
14
15# In the future, change to a more robust database system (MySQL, ...)
16
17# Database has two tables:
18
19# App_data:
20# Id|Title|Age|Description|wurl|category|repo
21
22# Crawl_list
23# id|is_processed|date|search_tags
24
25# Rarely, some applications are not parsed due to errors on Beautiful Soup parser.
26
27
28def get_store_info(db, **keyword_parameters):
29        url = "http://webservices.aptoide.com/webservices/3/getApkInfo/id:"
30
31        c = db.cursor()
32        c.execute(''' SELECT id FROM crawl_list ''')
33
34        i = 0
35
36        # Check if exists a maximum value for the list to be crawled
37        if 'max_value' in keyword_parameters and keyword_parameters['max_value']>0:
38                i = keyword_parameters['max_value']
39       
40        text=""
41
42        # For all id's fetched
43        for sid in c.fetchall():
44                print sid[0]
45                c.execute(''' SELECT is_processed FROM crawl_list WHERE id=? ''', (sid[0],))
46                if c.fetchone()[0]==1:
47                        print str(sid[0])+" was already crawled"
48                       
49                else:
50                        c.execute(''' UPDATE crawl_list SET is_processed=1 WHERE id=? ''',(sid[0],))
51                        if 'max_value' in keyword_parameters and keyword_parameters['max_value']>0:
52                                i-=1
53                        try:
54                                webpage = urllib2.urlopen(url+str(sid[0])+"/json")
55                                soup = BeautifulSoup(webpage, "lxml")
56                       
57                                text = soup.get_text()
58
59                                page = json.loads(text)
60                                if page['status']!='FAIL':
61
62                                        repo = page['apk']['repo']
63
64                                        name = page['meta']['title']                   
65                                        print name
66
67                                        description = page['meta']['description']
68
69                                        wurl = page['meta']['wurl']
70                                        categories = []
71
72                                        for cat in page['meta']['categories']['standard']:
73                                                categories.append(cat['name'])
74
75                                        for cat in page['meta']['categories']['custom']:
76                                                categories.append(cat['name'])
77
78                                        scr = []
79                                        scr_hd = []
80
81                                        if 'sshots' in page['media']:
82                                                for s in page['media']['sshots']:
83                                                        scr.append(s)
84
85                                        if 'sshots_hd' in page['media']:
86                                                for s in page['media']['sshots_hd']:
87                                                        scr_hd.append(s['path'])
88
89                                        maj = page['meta']['min_age']
90
91                                        exp = False
92
93                                        if maj>=18:
94                                                exp=True
95
96                                        icon = page['apk']['icon']
97
98                                        icon_hd = []
99                                        if 'icon_hd' in page['apk']:
100                                                icon_hd = page['apk']['icon_hd']
101
102                                        filename, file_extension = os.path.splitext(icon)
103                                                       
104                                        path = os.path.join(os.getcwd(),"images/icon/"+str(sid[0])+file_extension)
105
106                                        resource = urllib.urlopen(icon)
107                                        output = open(path,"w+")
108                                        output.write(resource.read())
109                                        output.close()
110
111                                        if exp==True:
112                                                path = os.path.join(os.getcwd(),"images/icons_explicit/"+str(sid[0])+file_extension)
113
114                                                resource = urllib.urlopen(icon)
115                                                output = open(path,"w+")
116                                                output.write(resource.read())
117                                                output.close()
118                                        else:
119                                                path = os.path.join(os.getcwd(),"images/icons_non-explicit/"+str(sid[0])+file_extension)
120
121                                                resource = urllib.urlopen(icon)
122                                                output = open(path,"w+")
123                                                output.write(resource.read())
124                                                output.close()
125
126                                        if icon_hd:
127                                                filename, file_extension = os.path.splitext(icon_hd)
128
129                                                path = os.path.join(os.getcwd(),"images/icon/"+str(sid[0])+"_hd"+file_extension)
130
131                                                resource = urllib.urlopen(icon_hd)
132                                                output = open(path,"w+")
133                                                output.write(resource.read())
134                                                output.close()
135
136                                                if exp==True:
137                                                        path = os.path.join(os.getcwd(),"images/icons_explicit/"+str(sid[0])+"_hd"+file_extension)
138
139                                                        resource = urllib.urlopen(icon_hd)
140                                                        output = open(path,"w+")
141                                                        output.write(resource.read())
142                                                        output.close()
143                                                else:
144                                                        path = os.path.join(os.getcwd(),"images/icons_non-explicit/"+str(sid[0])+"_hd"+file_extension)
145
146                                                        resource = urllib.urlopen(icon_hd)
147                                                        output = open(path,"w+")
148                                                        output.write(resource.read())
149                                                        output.close()
150
151                                        n=0
152                                        for screenshot in scr:
153                                                filename, file_extension = os.path.splitext(screenshot)
154
155                                                path = os.path.join(os.getcwd(),"images/screenshots/"+str(sid[0])+"_"+str(n)+file_extension)
156
157                                                resource = urllib.urlopen(screenshot)
158                                                output = open(path,"w+")
159                                                output.write(resource.read())
160                                                output.close()
161
162                                                if exp==True:
163                                                        path = os.path.join(os.getcwd(),"images/screenshot_explicit/"+str(sid[0])+"_"+str(n)+file_extension)
164
165                                                        resource = urllib.urlopen(screenshot)
166                                                        output = open(path,"w+")
167                                                        output.write(resource.read())
168                                                        output.close()
169                                                else:
170                                                        path = os.path.join(os.getcwd(),"images/screenshot_non-explicit/"+str(sid[0])+"_"+str(n)+file_extension)
171
172                                                        resource = urllib.urlopen(screenshot)
173                                                        output = open(path,"w+")
174                                                        output.write(resource.read())
175                                                        output.close()
176                                                n+=1
177
178                                        n=0
179                                        for screenshot in scr_hd:
180                                                filename, file_extension = os.path.splitext(screenshot)
181
182                                                path = os.path.join(os.getcwd(),"images/screenshots/"+str(sid[0])+"_"+str(n)+"_hd"+file_extension)
183
184                                                resource = urllib.urlopen(screenshot)
185                                                output = open(path,"w+")
186                                                output.write(resource.read())
187                                                output.close()
188
189                                                if exp==True:
190                                                        path = os.path.join(os.getcwd(),"images/screenshot_explicit/"+str(sid[0])+"_"+str(n)+"_hd"+file_extension)
191
192                                                        resource = urllib.urlopen(screenshot)
193                                                        output = open(path,"w+")
194                                                        output.write(resource.read())
195                                                        output.close()
196                                                else:
197                                                        path = os.path.join(os.getcwd(),"images/screenshot_non-explicit/"+str(sid[0])+"_"+str(n)+"_hd"+file_extension)
198
199                                                        resource = urllib.urlopen(screenshot)
200                                                        output = open(path,"w+")
201                                                        output.write(resource.read())
202                                                        output.close()
203
204                                                n+=1
205
206                                        c.execute(''' INSERT INTO app_data VALUES(?,?,?,?,?,?,?) ''', (sid[0],name,maj,description,wurl,''.join(categories),repo,))
207                                        db.commit()
208                        except:
209                                print "Error during parsing"
210                                traceback.print_exc(file=sys.stdout)
211                                #print text
212
213                if 'max_value' in keyword_parameters and keyword_parameters['max_value']>0:
214                        if i==0:
215                                break
216                       
217                       
218
219def reset_database(db):
220        c = db.cursor()
221        c.execute(''' UPDATE crawl_list SET is_processed=0 ''')
222        c.execute(''' DROP TABLE app_data ''')
223        c.execute('''create table app_data(id BIGINT, title text , age TINYINT, description text,wurl text, category text, repo text)''')
224        db.commit()
225
226if __name__=="__main__":
227
228        db = sqlite3.connect('app_info.db')
229
230        if len(sys.argv)>1:
231                try:
232                        get_store_info(db, max_value=int(sys.argv[1]))
233                except:
234                        if(sys.argv[1]=='-r'):
235                                reset_database(db)
236                                db.close()
237                                exit()
238                        get_store_info(db)
239        else:
240                get_store_info(db)
241        c = db.cursor()
242        c.execute(''' SELECT id FROM app_data ''')
243        print len(c.fetchall())
244        #print c.fetchall()
245        #c.execute(''' SELECT * FROM crawl_list ''')
246        #print c.fetchall()
247        db.close()
Note: See TracBrowser for help on using the repository browser.