source: internals/2016/aptoideimagesdetector/trunk/aptoide_mature_app_detector/aptoide_mature_app_detector/explicit_content_detector/API/views.py @ 16508

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

Config file an analyse app changed

File size: 4.6 KB
Line 
1# Diogo Daniel Soares Ferreira
2# diogodanielsoaresferreira@ua.pt
3# Aptoide, 2016
4
5# API in Django to deploy the analysis of an app, given its MD5 or ID.
6# Just start the server and write the following url:
7# http://127.0.0.1:8000/detect_mature/md5sum=md5_of_app
8# or
9# http://127.0.0.1:8000/detect_mature/id=md5_of_app
10
11import os
12from django.http import HttpResponse
13from django.shortcuts import redirect
14from django.db.models.base import ModelBase
15from bs4 import BeautifulSoup
16from datetime import datetime, time
17from Explicit_detector import analyse_app
18import threading
19import urllib2
20import json
21
22# Save the Illustration2Vec model on memory
23# Not needed to load everytime that exists a request
24class Model(ModelBase):
25        _model = analyse_app.get_model()
26        _time = datetime.now()
27
28# Function that analyses the information of an app and returns if it is explicit or not
29def get_data(page):
30        illust2vec = Model._model
31        exp = False
32
33        p = os.path.abspath(os.path.join("../", os.pardir))
34
35        with open(p+"/config.json") as json_data:
36                config = json.load(json_data)
37
38
39        print "Fetching data..."
40        title = page['meta']['title']
41
42        description = page['meta']['description']
43
44        categories = []
45
46        for cat in page['meta']['categories']['standard']:
47                categories.append(cat['name'])
48
49        for cat in page['meta']['categories']['custom']:
50                categories.append(cat['name'])
51
52        scr = []
53        scr_hd = []
54
55        if 'sshots' in page['media']:
56                for s in page['media']['sshots']:
57                        try:
58                                temp = s['path'].split('http://',1)
59                        except:
60                                temp = s.split('http://',1)
61                        scr.append(config['directories']['local_image_path_prefix']+temp[1])
62
63        if 'sshots_hd' in page['media']:
64                for s in page['media']['sshots_hd']:
65                        try:
66                                temp = s['path'].split('http://',1)
67                        except:
68                                temp = s.split('http://',1)
69                        scr_hd.append(config['directories']['local_image_path_prefix']+temp[1])
70
71        min_age = page['meta']['min_age']
72
73        icon = page['apk']['icon']
74        temp = icon.split('http://',1)
75
76        icon = config['directories']['local_image_path_prefix']+temp[1]
77
78        icon_hd = []
79        if 'icon_hd' in page['apk']:
80                icon_hd = page['apk']['icon_hd']
81                temp = icon_hd.split('http://',1)
82
83                icon_hd = config['directories']['local_image_path_prefix']+temp[1]
84
85        icons = []
86        icons.append(icon)
87        if icon_hd:
88                icons.append(icon_hd)
89
90        screenshots = scr+scr_hd
91        size = len(description)
92        print "Analysing app..."
93        # Gets the percentage for safe and explicit content
94        dist = analyse_app.analyse_app(page['apk']['id'], page['apk']['md5sum'], illust2vec, icons, screenshots, description,''.join(categories), min_age, size, title)
95        try:
96                if dist.prob('exp')>0.5:
97                        exp = True
98        except:
99                if dist>0.5:
100                        exp = True
101        print "Done"
102        return exp
103
104# View for get by id
105def getbyId(request, app_id):
106        now = datetime.now()
107        url = "http://webservices.aptoide.com/webservices/3/getApkInfo/id:"
108
109        Model._time = now
110        exp = False
111        try:
112                # Fetching the JSON content
113                webpage = urllib2.urlopen(url+str(app_id)+"/json")
114                soup = BeautifulSoup(webpage, "lxml")
115                               
116                text = soup.get_text()
117                page = json.loads(text)
118                if page['status']!='FAIL':
119
120                        exp = get_data(page)
121
122                else:
123                        status = 'Failed'
124                        print "App does not exist"
125                        return redirect('error')
126        except:
127                status = 'Failed'
128                print "Error during parsing"
129                return redirect('error')
130
131        # If it's explicit content, redirects to true page. Otherwise, redirects to false page.
132        if exp:
133                return redirect('true', app_id=app_id)
134        return redirect('false', app_id=app_id)
135
136# View for get by md5
137def getbyMD5(request, app_md5):
138        now = datetime.now()
139        url = "http://webservices.aptoide.com/webservices/3/getApkInfo/md5sum:"
140        app_id = 0
141        Model._time = now
142        exp = False
143        try:
144                # Fetching the JSON content
145                webpage = urllib2.urlopen(url+str(app_md5)+"/json")
146                soup = BeautifulSoup(webpage, "lxml")
147                               
148                text = soup.get_text()
149                page = json.loads(text)
150                if page['status']!='FAIL':
151
152                        app_id = page['apk']['id']
153                        exp = get_data(page)
154
155                else:
156                        status = 'Failed'
157                        print "App does not exist"
158                        return redirect('error')
159        except:
160                status = 'Failed'
161                print "Error during parsing"
162                return redirect('error')
163
164        # If it's explicit content, redirects to true page. Otherwise, redirects to false page.
165        if exp:
166                return redirect('true', app_id=app_id)
167        return redirect('false', app_id=app_id)
168
169def true(request, app_id):
170        return HttpResponse(json.dumps({'app_id': app_id, 'status': 'OK','mature_content': 'yes', 'time':str(datetime.now()-Model._time)}, sort_keys=True))
171
172def false(request, app_id):
173        return HttpResponse(json.dumps({'app_id': app_id, 'status': 'OK','mature_content': 'no', 'time':str(datetime.now()-Model._time)}, sort_keys=True))
174
175def error(request):
176        return HttpResponse(json.dumps({'status': 'Failed', 'time':str(datetime.now()-Model._time)}, sort_keys=True))
Note: See TracBrowser for help on using the repository browser.