source: internals/2016/aptoideimagesdetector/trunk/explicit_content_detector/API/Explicit_detector/API to download database/get_list_id.py @ 16448

Last change on this file since 16448 was 16448, checked in by dferreira, 3 years ago

File organization totally changed

File size: 3.3 KB
Line 
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.
5# Example: python get_list_id.py games 20
6
7from bs4 import BeautifulSoup
8import urllib2
9import json
10import sys
11import re
12import time
13import sqlite3
14
15
16# Database has two tables:
17
18# app_data:
19# Id|Title|Age|Description|wurl|category|repo
20
21# crawl_list
22# id|is_processed|date|search_tags
23
24# If there are double quotes on description, removes them
25def replaceChar(jstr):
26    newStr = ''
27    while len(jstr.split('"description":"')) != 1:
28        [sl, sr] = jstr.split('"description":"', 1)
29        newStr += sl
30        [sinner, jstr] = sr.split('"},"stats":', 1)
31        sinner = sinner.replace('"', ' ')
32        newStr += '"description":"'
33        newStr += sinner
34        newStr += '"},"stats":'
35    else:
36        newStr += jstr
37    return newStr
38
39
40def get_list_id(db, query, **keyword_parameters):
41
42        url = "http://ws2.aptoide.com/api/7/listSearchApps/query="
43        i=0
44        offset=0
45        total=1
46        c = db.cursor()
47
48        # Check if exists a maximum value for the id's list
49        if 'max_list' in keyword_parameters and keyword_parameters['max_list']>0:
50                i = keyword_parameters['max_list']
51
52        try:
53                while offset < total:
54                        webpage = urllib2.urlopen(url+query+"/offset="+str(offset))
55                        soup = BeautifulSoup(webpage, "lxml")
56                        try:
57                                # Remove double quotes in description
58                                text = replaceChar(soup.get_text())
59
60                                page = json.loads(text)
61                                data = page['datalist']['list']
62                               
63                                # Adding app id's
64                                for app in data:
65                                        if 'max_list' in keyword_parameters and keyword_parameters['max_list']>0:
66                                                if i==0:
67                                                        break
68                                                i -= 1
69
70                                        # Saves on the database
71                                        c.execute(''' SELECT id FROM crawl_list WHERE id=? ''', (app['id'],))
72                                        try:
73                                                if c.fetchone():
74                                                        print str(app['id'])+" already exists in the database"
75                                                       
76                                                else:
77                                                        c.execute(''' INSERT INTO crawl_list VALUES (?,?,?,?) ''', (app['id'],0,time.time(),query,))
78                                                        db.commit()
79                                        except:
80                                                print "Could not save in the database"
81                                                exit(1)
82
83                                # Updates next page content
84                                offset = int(page['datalist']['next'])
85                                total = int(page['datalist']['total'])
86
87                                if 'max_list' in keyword_parameters and keyword_parameters['max_list']>0:
88                                        if i==0:
89                                                break
90                        except:
91                                print "Error while parsing json document"
92                                print "Webpage ignored"
93                                offset += 25
94
95        except urllib2.HTTPError:
96                print "Error while fetching from database."
97
98def reset_database(db):
99        c = db.cursor()
100        c.execute(''' DROP TABLE crawl_list''')
101        c.execute('''create table crawl_list(id BIGINT, is_processed TINYINT, date BIGINT, search_tags text)''')
102        db.commit()
103
104if __name__=="__main__":
105        query = ""
106        maxvalue = 0
107        i=1
108        db = []
109
110        db = sqlite3.connect('app_info.db')
111
112                # Parsing command-line arguments
113        if len(sys.argv)>=2:
114                if sys.argv[1]=='-r':
115                        reset_database(db)
116                        exit(0)
117                while i<len(sys.argv):
118                        if i!=1 and i==len(sys.argv)-1:
119                                try:
120                                        maxvalue = int(sys.argv[i])
121                                except ValueError:
122                                        query += sys.argv[i]
123                        else:
124                                query += sys.argv[i]
125                        i+=1
126
127                get_list_id(db, query, max_list = maxvalue)
128                       
129        c = db.cursor()
130        c.execute(''' SELECT id FROM crawl_list ''')
131        print (len(c.fetchall()))
132        #print c.fetchall()
133
134        db.close()
135
136
Note: See TracBrowser for help on using the repository browser.