Changeset 16525


Ignore:
Timestamp:
Aug 11, 2016, 2:53:35 PM (3 years ago)
Author:
dferreira
Message:

Added option of force reload the cache

Location:
internals/2016/aptoideimagesdetector/trunk/aptoide_mature_app_detector/aptoide_mature_app_detector/explicit_content_detector/API
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • internals/2016/aptoideimagesdetector/trunk/aptoide_mature_app_detector/aptoide_mature_app_detector/explicit_content_detector/API/Explicit_detector/analyse_app.py

    r16524 r16525  
    3737        return illust2vec
    3838
    39 def analyse_app(app_id, app_md5, illust2vec, icons, screenshots, description, category, age, size, title):
     39def analyse_app(app_id, app_md5, illust2vec, icons, screenshots, description, category, age, size, title, cache_reload):
    4040
    4141        p = os.path.abspath(os.path.join("../", os.pardir))
     
    4949
    5050        # If id exists, app has already been processed.
    51         # If exists, just return the value.
    52         # Otherwise, create a new record in the table
    53 
    5451        c.execute(''' SELECT ID FROM app WHERE app_md5=? ''',(app_md5,))
    5552        res = c.fetchone()
    5653
    5754        if res:
    58                 c.execute(''' SELECT is_mature FROM final_results WHERE for_id=? ''',(res[0],))
    59                 res2 = c.fetchone()
    60                 if res2:
    61                         db.close()
    62                         return res2[0]
     55                # If is not needed to reload the cache, tries to return the result
     56                if cache_reload==0:
     57                        c.execute(''' SELECT is_mature FROM final_results WHERE for_id=? ''',(res[0],))
     58                        res2 = c.fetchone()
     59                        if res2:
     60                                db.close()
     61                                return res2[0]
     62                        else:
     63                                tb_id = res[0]
    6364                else:
    6465                        tb_id = res[0]
     
    6869                c.execute(''' SELECT ID FROM app WHERE app_md5=? ''',(app_md5,))
    6970                tb_id = c.fetchone()[0]
    70 
    7171
    7272        # Tries to load the model for text categorization
     
    8787                c.execute(''' SELECT image_exp, image_safe FROM image_results WHERE url=?''',(icon,))
    8888                res = c.fetchone()
    89                 if res:
    90                         icon_l.append((('explicit',res[0]), ('safe',res[1])))
     89                # If is not needed to reload the cache, tries to return the result saved
     90                if cache_reload==0:
     91                        if res:
     92                                icon_l.append((('explicit',res[0]), ('safe',res[1])))
     93                        else:
     94                                res = analyse_explicit(illust2vec, icon)
     95                                exp = False
     96                                if res[0][1]>res[1][1]:
     97                                        exp = True
     98                                c.execute(''' INSERT INTO image_results VALUES (?,?,?,?,?,?,?) ''',(int(tb_id), icon, res[0][1], res[1][1], exp, -1,  "icon",))
     99                                db.commit()
     100                                icon_l.append(res)
    91101                else:
    92102                        res = analyse_explicit(illust2vec, icon)
     
    94104                        if res[0][1]>res[1][1]:
    95105                                exp = True
    96                         c.execute(''' INSERT INTO image_results VALUES (?,?,?,?,?,?,?) ''',(int(tb_id), icon, res[0][1], res[1][1], exp, -1,  "icon",))
    97                         db.commit()
     106
     107                        # If the image already exists, it is needed to update the result
     108                        if res:
     109                                c.execute(''' UPDATE image_results SET for_id=?, image_exp=?, image_safe=?, is_mature=?, external_validator=?, icon_or_screenshot=? WHERE url=? ''', (int(tb_id), res[0][1], res[1][1], exp, -1, "icon", icon,))
     110                                db.commit()
     111                        # If the image does not exist, insert new result
     112                        else:
     113                                c.execute(''' INSERT INTO image_results VALUES (?,?,?,?,?,?,?) ''',(int(tb_id), icon, res[0][1], res[1][1], exp, -1,  "icon",))
     114                                db.commit()
     115
    98116                        icon_l.append(res)
    99117
     
    104122                c.execute(''' SELECT image_exp, image_safe FROM image_results WHERE url=?''',(scr,))
    105123                res = c.fetchone()
    106                 if res:
    107                         screens.append((('explicit',res[0]), ('safe',res[1])))
    108                 else:
    109                         res = analyse_explicit(illust2vec, scr)
     124                # If is not needed to reload the cache, tries to return the result saved
     125                if cache_reload==0:
     126                        if res:
     127                                screens.append((('explicit',res[0]), ('safe',res[1])))
     128                        else:
     129                                res = analyse_explicit(illust2vec, scr)
     130                                exp = False
     131                                if res[0][1]>res[1][1]:
     132                                        exp = True
     133                                c.execute(''' INSERT INTO image_results VALUES (?,?,?,?,?,?,?) ''',(int(tb_id), scr, res[0][1], res[1][1], exp, -1,  "screenshot",))
     134                                db.commit()
     135                                screens.append(res)
     136                else:
     137                        res = analyse_explicit(illust2vec, icon)
    110138                        exp = False
    111139                        if res[0][1]>res[1][1]:
    112140                                exp = True
    113                         c.execute(''' INSERT INTO image_results VALUES (?,?,?,?,?,?,?) ''',(int(tb_id), scr, res[0][1], res[1][1], exp, -1,  "screenshot",))
    114                         db.commit()
    115                         screens.append(res)
    116 
     141
     142                        # If the image already exists, it is needed to update the result
     143                        if res:
     144                                c.execute(''' UPDATE image_results SET for_id=?, image_exp=?, image_safe=?, is_mature=?, external_validator=?, icon_or_screenshot=? WHERE url=? ''', (int(tb_id), res[0][1], res[1][1], exp, -1, "icon", icon,))
     145                                db.commit()
     146                        # If the image does not exist, insert new result
     147                        else:
     148                                c.execute(''' INSERT INTO image_results VALUES (?,?,?,?,?,?,?) ''',(int(tb_id), icon, res[0][1], res[1][1], exp, -1,  "icon",))
     149                                db.commit()
     150
     151                        icon_l.append(res)
    117152
    118153        # Check if has already been analysed.
    119         # If it has, just use the previous result.
    120         # If not, save the new result
    121154        c.execute(''' SELECT text_exp FROM text_results WHERE for_id=? ''',(int(tb_id),))
    122155        res = c.fetchone()
    123         if res:
     156       
     157        # If it was already analysed and it is not needed to reload the cache, just get the result
     158        if res and cache_reload==0:
    124159                description = res[0]
     160       
     161        # If exists a result and cache_reload==1, update the cache
     162        elif res:
     163                exp = False
     164                description = text_cat(description, size, category, age)
     165                if description.prob('exp')>0.5:
     166                        exp = True
     167                c.execute(''' UPDATE text_results SET text_exp=?, is_mature=?, external_validator=? WHERE for_id=? ''',(description.prob('exp'), exp, -1, int(tb_id),))
     168                db.commit()
     169       
     170        # If there is no result, just insert a new one
    125171        else:
    126172                exp = False
     
    182228        c.execute(''' SELECT exp_per FROM final_results WHERE for_id=? ''', (int(tb_id),))
    183229        res = c.fetchone()
    184         if res:
     230        if res and cache_reload==0:
    185231                db.close()
    186232                return res[0]
    187         else:
     233        elif res:
    188234                exp = False
    189235                res = classifier.prob_classify(features)
    190236                if res.prob('exp')>0.5:
    191237                        exp = True
    192                 c.execute(''' INSERT INTO final_results VALUES (?,?,?,?,?) ''', (int(tb_id), time.time(), res.prob('exp'),exp,-1,))
     238                c.execute(''' UPDATE final_results SET date=?, exp_per=?, is_mature=?, external_validator=? WHERE for_id=? ''', (time.time(), res.prob('exp'),exp,-1, int(tb_id),))
    193239                db.commit()
    194240                db.close()
    195241                return res
    196 
     242        else:
     243                exp = False
     244                res = classifier.prob_classify(features)
     245                if res.prob('exp')>0.5:
     246                        exp = True
     247                c.execute(''' INSERT INTO final_results VALUES (?,?,?,?,?) ''', (int(tb_id), time.time(), res.prob('exp'),exp,-1,))
     248                db.commit()
     249                db.close()
     250                return res
     251
  • internals/2016/aptoideimagesdetector/trunk/aptoide_mature_app_detector/aptoide_mature_app_detector/explicit_content_detector/API/urls.py

    r16524 r16525  
    55
    66urlpatterns = [
    7     url(r'^md5sum=(?P<app_md5>[0-9a-zA-Z]+)/$', views.getbyMD5, name='md5'),
    8     url(r'^id=(?P<app_id>[0-9]+)/$', views.getbyId, name='id'),
     7    url(r'^md5sum=(?P<app_md5>[0-9a-zA-Z]+)/(reload=(?P<cache_reload>(0|1))/)?$', views.getbyMD5, name='md5'),
     8    url(r'^id=(?P<app_id>[0-9]+)/(reload=(?P<cache_reload>(0|1))/)?$', views.getbyId, name='id'),
    99]
  • internals/2016/aptoideimagesdetector/trunk/aptoide_mature_app_detector/aptoide_mature_app_detector/explicit_content_detector/API/views.py

    r16524 r16525  
    4848# Function that analyses the information of an app and returns if it is explicit or not
    4949@postpone
    50 def get_data_async(page, url_async):
     50def get_data_async(page, url_async, cache_reload):
    5151        illust2vec = Model._model
    5252        exp = False
     
    119119        print "Analysing app..."
    120120        # Gets the percentage for safe and explicit content
    121         dist = analyse_app.analyse_app(page['apk']['id'], page['apk']['md5sum'], illust2vec, icons, screenshots, description,''.join(categories), min_age, size, title)
     121        dist = analyse_app.analyse_app(page['apk']['id'], page['apk']['md5sum'], illust2vec, icons, screenshots, description,''.join(categories), min_age, size, title, cache_reload)
    122122        try:
    123123                if dist.prob('exp')>0.5:
     
    133133
    134134# Function that analyses the information of an app and returns if it is explicit or not
    135 def get_data_sync(page):
     135def get_data_sync(page, cache_reload):
    136136        illust2vec = Model._model
    137137        exp = False
     
    204204        print "Analysing app..."
    205205        # Gets the percentage for safe and explicit content
    206         dist = analyse_app.analyse_app(page['apk']['id'], page['apk']['md5sum'], illust2vec, icons, screenshots, description,''.join(categories), min_age, size, title)
     206        dist = analyse_app.analyse_app(page['apk']['id'], page['apk']['md5sum'], illust2vec, icons, screenshots, description,''.join(categories), min_age, size, title, cache_reload)
    207207        try:
    208208                if dist.prob('exp')>0.5:
     
    219219# For more detailed error logs comment the try... except and indentate correctly its content
    220220
    221 def getbyId(request, app_id):
     221def getbyId(request, app_id, cache_reload=0):
     222        if not cache_reload:
     223                cache_reload=0
    222224        now = datetime.now()
    223225        url = "http://webservices.aptoide.com/webservices/3/getApkInfo/id:"
     
    226228                config = json.load(json_data)
    227229        exp = False
    228         try:
     230        #try:
    229231                # Fetching the JSON content
    230                 webpage = urllib2.urlopen(url+str(app_id)+"/json")
    231                 soup = BeautifulSoup(webpage, "lxml")
     232        webpage = urllib2.urlopen(url+str(app_id)+"/json")
     233        soup = BeautifulSoup(webpage, "lxml")
    232234                                               
    233                 text = soup.get_text()
    234                 page = json.loads(text)
    235                 if page['status']!='FAIL':
    236                         if config["synchronous_or_asynchronous"]=="asynchronous":
    237                                 get_data_async(page, config["directories"]["asynchronous_dir"])
    238                                 return HttpResponse("Waiting")
    239                         exp = get_data_sync(page)
    240 
    241                 else:
    242                         status = 'Failed'
    243                         print "App does not exist"
    244                         return HttpResponse(json.dumps({'status': 'Failed', 'time':str(datetime.now()-now)}, sort_keys=True))
    245         except:
     235        text = soup.get_text()
     236        page = json.loads(text)
     237        if page['status']!='FAIL':
     238                if config["synchronous_or_asynchronous"]=="asynchronous":
     239                        get_data_async(page, config["directories"]["asynchronous_dir"], cache_reload)
     240                        return HttpResponse("Waiting")
     241                exp = get_data_sync(page, int(cache_reload))
     242
     243        else:
    246244                status = 'Failed'
    247                 print "Error during parsing"
     245                print "App does not exist"
    248246                return HttpResponse(json.dumps({'status': 'Failed', 'time':str(datetime.now()-now)}, sort_keys=True))
     247        #except:
     248        #       status = 'Failed'
     249        #       print "Error during parsing"
     250        #       return HttpResponse(json.dumps({'status': 'Failed', 'time':str(datetime.now()-now)}, sort_keys=True))
    249251
    250252        # If it's explicit content, redirects to true page. Otherwise, redirects to false page.
    251253        if exp:
    252                 return HttpResponse(json.dumps({'app_id': app_id, 'status': 'OK','mature_content': 'yes', 'time':str(datetime.now()-now)}, sort_keys=True))
    253         return HttpResponse(json.dumps({'app_id': app_id, 'status': 'OK','mature_content': 'no', 'time':str(datetime.now()-now)}, sort_keys=True))
     254                return HttpResponse(json.dumps({'app_id': int(app_id), 'status': 'OK','mature_content': 'yes', 'time':str(datetime.now()-now)}, sort_keys=True))
     255        return HttpResponse(json.dumps({'app_id': int(app_id), 'status': 'OK','mature_content': 'no', 'time':str(datetime.now()-now)}, sort_keys=True))
    254256
    255257
     
    257259# View for get by md5
    258260# For more detailed error logs comment the try... except and indentate correctly its content
    259 def getbyMD5(request, app_md5):
     261def getbyMD5(request, app_md5, cache_reload=0):
     262        if not cache_reload:
     263                cache_reload=0
    260264        now = datetime.now()
    261265        url = "http://webservices.aptoide.com/webservices/3/getApkInfo/md5sum:"
     
    274278                page = json.loads(text)
    275279                if page['status']!='FAIL':
    276 
     280                        app_id = page['apk']['id']
    277281                        if config["synchronous_or_asynchronous"]=="asynchronous":
    278                                 get_data_async(page, config["directories"]["asynchronous_dir"])
     282                                get_data_async(page, config["directories"]["asynchronous_dir"], cache_reload)
    279283                                return HttpResponse("Waiting")
    280                         exp = get_data_sync(page)
     284                        exp = get_data_sync(page, int(cache_reload))
    281285
    282286                else:
Note: See TracChangeset for help on using the changeset viewer.