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