translated.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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}&langpair={from_lang}|{to_lang}'
  9. web_url = 'http://mymemory.translated.net/en/{from_lang}/{to_lang}/{query}'
  10. weight = 100
  11. parser_re = re.compile(u'.*?([a-z]+)-([a-z]+) (.{2,})$', re.I)
  12. def is_valid_lang(lang):
  13. is_abbr = (len(lang) == 2)
  14. if is_abbr:
  15. for l in language_codes:
  16. if l[0][:2] == lang.lower():
  17. return (True, l[0][:2], l[1].lower())
  18. return False
  19. else:
  20. for l in language_codes:
  21. if l[1].lower() == lang.lower():
  22. return (True, l[0][:2], l[1].lower())
  23. return False
  24. def request(query, params):
  25. m = parser_re.match(unicode(query, 'utf8'))
  26. if not m:
  27. return params
  28. from_lang, to_lang, query = m.groups()
  29. from_lang = is_valid_lang(from_lang)
  30. to_lang = is_valid_lang(to_lang)
  31. if not from_lang or not to_lang:
  32. return params
  33. params['url'] = url.format(from_lang=from_lang[1],
  34. to_lang=to_lang[1],
  35. query=query)
  36. params['query'] = query
  37. params['from_lang'] = from_lang
  38. params['to_lang'] = to_lang
  39. return params
  40. def response(resp):
  41. results = []
  42. results.append({
  43. 'url': escape(web_url.format(from_lang=resp.search_params['from_lang'][2],
  44. to_lang=resp.search_params['to_lang'][2],
  45. query=resp.search_params['query'])),
  46. 'title': escape('[{0}-{1}] {2}'.format(resp.search_params['from_lang'][1],
  47. resp.search_params['to_lang'][1],
  48. resp.search_params['query'])),
  49. 'content': escape(resp.json()['responseData']['translatedText'])
  50. })
  51. return results