fix: google.py module

The search result does not include always 3 elements. It's better to
enumerate here.
The googleapi fails sometimes. Retry it 3 times.

Signed-off-by: Jürgen Löhel <juergen.loehel@inlyse.com>
pull/477/head
Jürgen Löhel 2021-03-09 18:04:12 -06:00
parent c1700cc955
commit 9e8d01b6c8
No known key found for this signature in database
GPG Key ID: 54E44C4D345DD098
1 changed files with 13 additions and 3 deletions

View File

@ -1,4 +1,6 @@
import json import json
import random
import time
try: try:
from googleapi import google from googleapi import google
except ImportError: except ImportError:
@ -9,6 +11,8 @@ mispattributes = {'input': ['url'], 'output': ['text']}
moduleinfo = {'author': 'Oun & Gindt', 'module-type': ['hover'], moduleinfo = {'author': 'Oun & Gindt', 'module-type': ['hover'],
'description': 'An expansion hover module to expand google search information about an URL'} 'description': 'An expansion hover module to expand google search information about an URL'}
def sleep(retry):
time.sleep(random.uniform(0, min(40, 0.01 * 2 ** retry)))
def handler(q=False): def handler(q=False):
if q is False: if q is False:
@ -18,10 +22,16 @@ def handler(q=False):
return {'error': "Unsupported attributes type"} return {'error': "Unsupported attributes type"}
num_page = 1 num_page = 1
res = "" res = ""
search_results = google.search(request['url'], num_page) # The googleapi module sets a random useragent. The output depends on the useragent.
for i in range(3): # It's better to retry 3 times.
for retry in range(3):
search_results = google.search(request['url'], num_page)
if len(search_results) > 0:
break
sleep(retry)
for i, search_result in enumerate(search_results):
res += "("+str(i+1)+")" + '\t' res += "("+str(i+1)+")" + '\t'
res += json.dumps(search_results[i].description, ensure_ascii=False) res += json.dumps(search_result.description, ensure_ascii=False)
res += '\n\n' res += '\n\n'
return {'results': [{'types': mispattributes['output'], 'values':res}]} return {'results': [{'types': mispattributes['output'], 'values':res}]}