translated.py 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. """
  2. MyMemory Translated
  3. @website https://mymemory.translated.net/
  4. @provide-api yes (https://mymemory.translated.net/doc/spec.php)
  5. @using-api yes
  6. @results JSON
  7. @stable yes
  8. @parse url, title, content
  9. """
  10. import re
  11. from urlparse import urljoin
  12. from lxml import html
  13. from cgi import escape
  14. from searx.engines.xpath import extract_text
  15. from searx.utils import is_valid_lang
  16. categories = ['general']
  17. url = 'http://api.mymemory.translated.net/get?q={query}' \
  18. '&langpair={from_lang}|{to_lang}{key}'
  19. web_url = 'http://mymemory.translated.net/en/{from_lang}/{to_lang}/{query}'
  20. weight = 100
  21. parser_re = re.compile(u'.*?([a-z]+)-([a-z]+) (.{2,})$', re.I)
  22. api_key = ''
  23. def request(query, params):
  24. m = parser_re.match(unicode(query, 'utf8'))
  25. if not m:
  26. return params
  27. from_lang, to_lang, query = m.groups()
  28. from_lang = is_valid_lang(from_lang)
  29. to_lang = is_valid_lang(to_lang)
  30. if not from_lang or not to_lang:
  31. return params
  32. if api_key:
  33. key_form = '&key=' + api_key
  34. else:
  35. key_form = ''
  36. params['url'] = url.format(from_lang=from_lang[1],
  37. to_lang=to_lang[1],
  38. query=query,
  39. key=key_form)
  40. params['query'] = query
  41. params['from_lang'] = from_lang
  42. params['to_lang'] = to_lang
  43. return params
  44. def response(resp):
  45. results = []
  46. results.append({
  47. 'url': escape(web_url.format(
  48. from_lang=resp.search_params['from_lang'][2],
  49. to_lang=resp.search_params['to_lang'][2],
  50. query=resp.search_params['query'])),
  51. 'title': escape('[{0}-{1}] {2}'.format(
  52. resp.search_params['from_lang'][1],
  53. resp.search_params['to_lang'][1],
  54. resp.search_params['query'])),
  55. 'content': escape(resp.json()['responseData']['translatedText'])
  56. })
  57. return results