translated.py 2.0 KB

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