translated.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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}'
  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. def is_valid_lang(lang):
  14. is_abbr = (len(lang) == 2)
  15. if is_abbr:
  16. for l in language_codes:
  17. if l[0][:2] == lang.lower():
  18. return (True, l[0][:2], l[1].lower())
  19. return False
  20. else:
  21. for l in language_codes:
  22. if l[1].lower() == lang.lower():
  23. return (True, l[0][:2], l[1].lower())
  24. return False
  25. def request(query, params):
  26. m = parser_re.match(unicode(query, 'utf8'))
  27. if not m:
  28. return params
  29. from_lang, to_lang, query = m.groups()
  30. from_lang = is_valid_lang(from_lang)
  31. to_lang = is_valid_lang(to_lang)
  32. if not from_lang or not to_lang:
  33. return params
  34. params['url'] = url.format(from_lang=from_lang[1],
  35. to_lang=to_lang[1],
  36. query=query)
  37. params['query'] = query
  38. params['from_lang'] = from_lang
  39. params['to_lang'] = to_lang
  40. return params
  41. def response(resp):
  42. results = []
  43. results.append({
  44. 'url': escape(web_url.format(
  45. from_lang=resp.search_params['from_lang'][2],
  46. to_lang=resp.search_params['to_lang'][2],
  47. query=resp.search_params['query'])),
  48. 'title': escape('[{0}-{1}] {2}'.format(
  49. resp.search_params['from_lang'][1],
  50. resp.search_params['to_lang'][1],
  51. resp.search_params['query'])),
  52. 'content': escape(resp.json()['responseData']['translatedText'])
  53. })
  54. return results