Changeset 16352


Ignore:
Timestamp:
Jul 20, 2016, 10:28:03 AM (4 years ago)
Author:
dferreira
Message:

Scripts already use the database and make download as expected.Still with bugs on get_store_info script.

Location:
internals/2016/aptoideimagesdetector/trunk/Source Code/Linguage Extractor/Initial language extractor
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • internals/2016/aptoideimagesdetector/trunk/Source Code/Linguage Extractor/Initial language extractor/get_store_info.py

    r16349 r16352  
    1 #
    2 #
    3 #
     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.
    45
    56from bs4 import BeautifulSoup
     
    1112import os
    1213
    13 # Bug if description has double quotes
    1414# In the future, change to a more robust database system (MySQL, ...)
    15 
    16 # Maximum id's as input
    17 # Use only second api
    18 # Add category, wurl, repo, icon hd, screenshots hd
    1915
    2016# Database has two tables:
     
    2622# id|is_processed|date|search_tags
    2723
    28 def get_store_info(id_list, db):
    29         url = "http://ws2.aptoide.com/api/7/getAppMeta/app_id="
    30         url2 = "http://webservices.aptoide.com/webservices/3/getApkInfo/id:"
    3124
    32         for sid in id_list:
    33                 print sid
    34                 try:
    35                         webpage = urllib2.urlopen(url+str(sid))
     25# If there are double quotes on description, removes them
     26def replaceChar(jstr):
     27    newStr = ''
     28    while len(jstr.split('"description":"')) != 1:
     29        [sl, sr] = jstr.split('"description":"', 1)
     30        newStr += sl
     31        [sinner, jstr] = sr.split('","news":', 1)
     32        sinner = sinner.replace('"', ' ')
     33        newStr += '"description":"'
     34        newStr += sinner
     35        newStr += '","news":'
     36    else:
     37        newStr += jstr
     38    return newStr
     39
     40def get_store_info(db, **keyword_parameters):
     41        #url = "http://ws2.aptoide.com/api/7/getAppMeta/app_id="
     42        url = "http://webservices.aptoide.com/webservices/3/getApkInfo/id:"
     43
     44        c = db.cursor()
     45        c.execute(''' SELECT id FROM crawl_list ''')
     46
     47        i = 0
     48
     49        # Check if exists a maximum value for the list to be crawled
     50        if 'max_value' in keyword_parameters and keyword_parameters['max_value']>0:
     51                i = keyword_parameters['max_value']
     52        j=0
     53        for sid in c.fetchall():
     54                print sid[0]
     55                c.execute(''' SELECT is_processed FROM crawl_list WHERE id=? ''', (sid[0],))
     56                if c.fetchone()[0]==1:
     57                        print str(sid[0])+" was already crawled"
     58                        # REMOVE AFTER DUBUGGING
     59                        j+=1
     60                        if j==5:
     61                                break;
     62                else:
     63                        c.execute(''' UPDATE crawl_list SET is_processed=1 WHERE id=? ''',(sid[0],))
     64                        if 'max_value' in keyword_parameters and keyword_parameters['max_value']>0:
     65                                i-=1
     66                        #try:
     67                        webpage = urllib2.urlopen(url+str(sid[0])+"/json")
    3668                        soup = BeautifulSoup(webpage, "lxml")
    37                         page = json.loads(soup.get_text())
    38                         data = page['data']
    39                         name = data['name']
     69                               
     70                        #print soup.get_text()
     71                        #text = replaceChar(soup.get_text())
     72                        text = soup.get_text()
     73                        #print text
     74                        page = json.loads(text)
     75
     76                        repo = page['apk']['repo']
     77                        print repo
     78
     79                        name = page['meta']['title']                   
    4080                        print name
    41                         icon = data['icon']
     81
     82                        description = page['meta']['description']
     83                        print description
     84
     85                        wurl = page['meta']['wurl']
     86                        print wurl
     87
     88                        categories = []
     89
     90                        for cat in page['meta']['categories']['standard']:
     91                                categories.append(cat['name'])
     92
     93                        for cat in page['meta']['categories']['custom']:
     94                                categories.append(cat['name'])
     95
     96                        scr = []
     97                        scr_hd = []
     98
     99                        if 'sshots' in page['media']:
     100                                for s in page['media']['sshots']:
     101                                        scr.append(s['path'])
     102
     103                        if 'sshots_hd' in page['media']:
     104                                for s in page['media']['sshots_hd']:
     105                                        scr_hd.append(s['path'])
     106
     107                        print categories
     108                        print scr
     109                        print scr_hd
     110
     111                        maj = page['meta']['min_age']
     112                        print maj
     113
     114                        icon = page['apk']['icon']
    42115                        print icon
     116
     117                        icon_hd = page['apk']['icon_hd']
     118                        print icon_hd
     119
    43120                        filename, file_extension = os.path.splitext(icon)
    44121                        print file_extension
    45                         path = os.path.join(os.getcwd(),"images/icon/"+str(sid)+file_extension)
     122                               
     123                        path = os.path.join(os.getcwd(),"images/icon/"+str(sid[0])+file_extension)
    46124                        print path
     125
    47126                        resource = urllib.urlopen(icon)
    48127                        output = open(path,"w+")
    49128                        output.write(resource.read())
    50129                        output.close()
    51                         description = data['media']['description']
    52                         print description
    53                         screenshots = []
    54130
    55                         i=0
    56                         for scr in data['media']['screenshots']:
    57                                 screenshots.append(scr['url'])
    58                                 print scr['url']
    59                                 filename, file_extension = os.path.splitext(scr['url'])
     131                        filename, file_extension = os.path.splitext(icon_hd)
     132                        print file_extension
     133
     134                        path = os.path.join(os.getcwd(),"images/icon/"+str(sid[0])+"_hd"+file_extension)
     135                        print path
     136
     137                        resource = urllib.urlopen(icon_hd)
     138                        output = open(path,"w+")
     139                        output.write(resource.read())
     140                        output.close()
     141
     142                        n=0
     143                        for screenshot in scr:
     144                                filename, file_extension = os.path.splitext(screenshot)
    60145                                print file_extension
    61                                 path = os.path.join(os.getcwd(),"images/screenshot/"+str(sid)+"_"+str(i)+file_extension)
     146
     147                                path = os.path.join(os.getcwd(),"images/screenshot/"+str(sid[0])+"_"+str(n)+file_extension)
    62148                                print path
    63                                 resource = urllib.urlopen(scr['url'])
     149
     150                                resource = urllib.urlopen(screenshot)
    64151                                output = open(path,"w+")
    65152                                output.write(resource.read())
    66153                                output.close()
    67                                 i+=1
     154                                n+=1
    68155
    69                         webpage = urllib2.urlopen(url2+str(sid)+"/json")
    70                         soup = BeautifulSoup(webpage, "lxml")
    71                         page = json.loads(soup.get_text())
    72                         maj = page['meta']['min_age']
    73                         print maj
    74                         c.execute(''' SELECT id FROM app_info WHERE id=? ''', (sid,))
    75                         if c.fetchone():
    76                                 print "Already exists in database"
    77                         else:
    78                                 c.execute(''' INSERT INTO app_info VALUES (?,?,?,?) ''', (sid,maj,name,description,))
    79                 except urllib2.HTTPError:
    80                         print "Error while fetching from database."
     156                        n=0
     157                        for screenshot in scr_hd:
     158                                filename, file_extension = os.path.splitext(screenshot)
     159                                print file_extension
     160
     161                                path = os.path.join(os.getcwd(),"images/screenshot/"+str(sid[0])+"-"+str(n)+"_hd"+file_extension)
     162                                print path
     163
     164                                resource = urllib.urlopen(screenshot)
     165                                output = open(path,"w+")
     166                                output.write(resource.read())
     167                                output.close()
     168                                n+=1
     169
     170                        c.execute(''' INSERT INTO app_data VALUES(?,?,?,?,?,?,?) ''', (sid[0],name,maj,description,wurl,''.join(categories),repo,))
     171                        db.commit()
     172
     173                        if 'max_value' in keyword_parameters and keyword_parameters['max_value']>0:
     174                                if i==0:
     175                                        break
     176                       
     177                #except:
     178                #       print "Error while fetching from database."
    81179
    82180
     
    86184        #try:
    87185        db = sqlite3.connect('app_info.db')
     186
     187        get_store_info(db, max_value=6)
    88188        c = db.cursor()
    89 
    90         all_ids = []
    91         all_ids.append(4722131)
    92         get_store_info(all_ids, c)
    93         db.commit()
     189        c.execute(''' SELECT * FROM app_data ''')
     190        print c.fetchall()
     191        c.execute(''' SELECT * FROM crawl_list ''')
     192        print c.fetchall()
    94193        db.close()
    95194        #except:
Note: See TracChangeset for help on using the changeset viewer.