Changeset 16349


Ignore:
Timestamp:
Jul 20, 2016, 9:03:14 AM (3 years ago)
Author:
dferreira
Message:

get_list_id already works with database. Bug of double quotes in description removed.

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

Legend:

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

    r16347 r16349  
    1 #
    2 #
    3 #
     1# Diogo Ferreira
     2# Aptoide, 2016
     3# This script receives as argument the words on query and (optional) the maximum value
     4# for apps searched. Then, saves the id to a database and mark the as no processed.
    45
    56from bs4 import BeautifulSoup
     
    89import sys
    910import re
     11import time
     12import sqlite3
    1013
    11 # Still with bug in descriptions with double quotes
    1214
    13 # New table to crawl apps
    14 # id, isProcessed, date, search tags
     15# Database has two tables:
    1516
    16 def get_list_id(query, **keyword_parameters):
     17# app_data:
     18# Id|Title|Age|Description|wurl|category|repo
     19
     20# crawl_list
     21# id|is_processed|date|search_tags
     22
     23# If there are double quotes on description, removes them
     24def replaceChar(jstr):
     25    newStr = ''
     26    while len(jstr.split('"description":"')) != 1:
     27        [sl, sr] = jstr.split('"description":"', 1)
     28        newStr += sl
     29        [sinner, jstr] = sr.split('"},"stats":', 1)
     30        sinner = sinner.replace('"', ' ')
     31        newStr += '"description":"'
     32        newStr += sinner
     33        newStr += '"},"stats":'
     34    else:
     35        newStr += jstr
     36    return newStr
     37
     38
     39def get_list_id(db, query, **keyword_parameters):
    1740
    1841        url = "http://ws2.aptoide.com/api/7/listSearchApps/query="
     
    2043        offset=0
    2144        total=1
    22         all_ids = []
     45        c = db.cursor()
    2346
    2447        # Check if exists a maximum value for the id's list
     
    2750
    2851        try:
    29                 while offset != total:
    30                         #webpage = urllib2.urlopen(url+query+"/offset="+str(offset))
    31                         webpage = urllib2.urlopen('http://ws2.aptoide.com/api/7/listSearchApps/query=music/offset=198')
     52                while offset < total:
     53                        webpage = urllib2.urlopen(url+query+"/offset="+str(offset))
    3254                        soup = BeautifulSoup(webpage, "lxml")
    33                         print soup
    34                         print "\n"
    35                         prog = re.compile('.*"description":".*"},"stats":{".*')
    36                         text = soup.get_text()
    37                         match = re.match(prog, text)
    38                         print match
    39                         if match:
    40                                 print "HERE!"
    41                                 text = re.sub('"description":".*"},"stats":{"',' ', text)
    42                         print text
    43                         page = json.loads(text)
    44                         data = page['datalist']['list']
    45                        
    46                         # Adding app id's
    47                         for app in data:
     55                        try:
     56                                # Remove double quotes in description
     57                                text = replaceChar(soup.get_text())
     58
     59                                page = json.loads(text)
     60                                data = page['datalist']['list']
     61                               
     62                                # Adding app id's
     63                                for app in data:
     64                                        if 'max_list' in keyword_parameters and keyword_parameters['max_list']>0:
     65                                                if i==0:
     66                                                        break
     67                                                i -= 1
     68
     69                                        # Saves on the database
     70                                        c.execute(''' SELECT id FROM crawl_list WHERE id=? ''', (app['id'],))
     71                                        try:
     72                                                if c.fetchone():
     73                                                        print str(app['id'])+" already exists in the database"
     74                                                       
     75                                                else:
     76                                                        c.execute(''' INSERT INTO crawl_list VALUES (?,?,?,?) ''', (app['id'],0,time.time(),query,))
     77                                                        db.commit()
     78                                        except:
     79                                                print "Could not save in the database"
     80                                                exit(1)
     81
     82                                # Updates next page content
     83                                offset = int(page['datalist']['next'])
     84                                total = int(page['datalist']['total'])
     85
    4886                                if 'max_list' in keyword_parameters and keyword_parameters['max_list']>0:
    4987                                        if i==0:
    5088                                                break
    51                                         i -= 1
    52                                 all_ids.append(app['id'])
    53                                 print app['id']
    54 
    55                         # Updates next page content
    56                         offset = int(page['datalist']['next'])
    57                         total = int(page['datalist']['total'])
    58 
     89                        except:
     90                                print "Error while parsing json document"
     91                                print "Webpage ignored"
     92                                offset += 25
    5993
    6094        except urllib2.HTTPError:
    6195                print "Error while fetching from database."
    6296
    63         return all_ids
     97
    6498
    6599if __name__=="__main__":
    66         all_ids = []
    67100        query = ""
    68101        maxvalue = 0
    69102        i=1
     103        db = []
    70104
    71         # Parsing command-line arguments
    72         if len(sys.argv)>=2:
    73                 while i<len(sys.argv):
    74                         if i!=1 and i==len(sys.argv)-1:
    75                                 try:
    76                                         maxvalue = int(sys.argv[i])
    77                                 except ValueError:
     105        try:
     106                db = sqlite3.connect('app_info.db')
     107
     108                # Parsing command-line arguments
     109                if len(sys.argv)>=2:
     110                        while i<len(sys.argv):
     111                                if i!=1 and i==len(sys.argv)-1:
     112                                        try:
     113                                                maxvalue = int(sys.argv[i])
     114                                        except ValueError:
     115                                                query += sys.argv[i]
     116                                else:
    78117                                        query += sys.argv[i]
    79                         else:
    80                                 query += sys.argv[i]
    81                         i+=1
     118                                i+=1
    82119
    83                 all_ids = get_list_id(query, max_list = maxvalue)
     120                        get_list_id(db, query, max_list = maxvalue)
     121                       
     122                c = db.cursor()
     123                c.execute(''' SELECT * FROM crawl_list ''')
     124                print c.fetchall()
    84125
    85         print len(all_ids)
     126                db.close()
     127        except:
     128                print "Could not connect to database"
     129                exit(1)
    86130
     131
  • internals/2016/aptoideimagesdetector/trunk/Source Code/Linguage Extractor/Initial language extractor/get_store_info.py

    r16347 r16349  
    1111import os
    1212
    13 # Has a bug
     13# Bug if description has double quotes
    1414# In the future, change to a more robust database system (MySQL, ...)
    1515
     
    1717# Use only second api
    1818# Add category, wurl, repo, icon hd, screenshots hd
     19
     20# Database has two tables:
     21
     22# App_data:
     23# Id|Title|Age|Description|wurl|category|repo
     24
     25# Crawl_list
     26# id|is_processed|date|search_tags
    1927
    2028def get_store_info(id_list, db):
Note: See TracChangeset for help on using the changeset viewer.