gigablast.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. """
  2. Gigablast (Web)
  3. @website https://gigablast.com
  4. @provide-api yes (https://gigablast.com/api.html)
  5. @using-api yes
  6. @results XML
  7. @stable yes
  8. @parse url, title, content
  9. """
  10. from json import loads
  11. from random import randint
  12. from time import time
  13. from urllib import urlencode
  14. # engine dependent config
  15. categories = ['general']
  16. paging = True
  17. number_of_results = 10
  18. language_support = True
  19. safesearch = True
  20. # search-url
  21. base_url = 'https://gigablast.com/'
  22. search_string = 'search?{query}'\
  23. '&n={number_of_results}'\
  24. '&c=main'\
  25. '&s={offset}'\
  26. '&format=json'\
  27. '&qh=0'\
  28. '&qlang={lang}'\
  29. '&ff={safesearch}'\
  30. '&rxikd={rxikd}' # random number - 9 digits
  31. # specific xpath variables
  32. results_xpath = '//response//result'
  33. url_xpath = './/url'
  34. title_xpath = './/title'
  35. content_xpath = './/sum'
  36. supported_languages = ["en", "fr", "es", "ru", "tr", "ja", "zh-CN", "zh-TW", "ko", "de",
  37. "nl", "it", "fi", "sv", "no", "pt", "vi", "ar", "he", "id", "el",
  38. "th", "hi", "bn", "pl", "tl", "la", "eo", "ca", "bg", "tx", "sr",
  39. "hu", "da", "lt", "cs", "gl", "ka", "gd", "go", "ro", "ga", "lv",
  40. "hy", "is", "ag", "gv", "io", "fa", "te", "vv", "mg", "ku", "lb", "et"]
  41. # do search-request
  42. def request(query, params):
  43. offset = (params['pageno'] - 1) * number_of_results
  44. if params['language'] == 'all':
  45. language = 'xx'
  46. else:
  47. language = params['language'].replace('-', '_').lower()
  48. if language.split('-')[0] != 'zh':
  49. language = language.split('-')[0]
  50. if params['safesearch'] >= 1:
  51. safesearch = 1
  52. else:
  53. safesearch = 0
  54. search_path = search_string.format(query=urlencode({'q': query}),
  55. offset=offset,
  56. number_of_results=number_of_results,
  57. rxikd=str(time())[:9],
  58. lang=language,
  59. safesearch=safesearch)
  60. params['url'] = base_url + search_path
  61. return params
  62. # get response from search-request
  63. def response(resp):
  64. results = []
  65. # parse results
  66. response_json = loads(resp.text)
  67. for result in response_json['results']:
  68. # append result
  69. results.append({'url': result['url'],
  70. 'title': result['title'],
  71. 'content': result['sum']})
  72. # return results
  73. return results