| 
									
										
										
										
											2014-03-29 16:30:49 +01:00
										 |  |  | from lxml import etree | 
					
						
							|  |  |  | from requests import get | 
					
						
							|  |  |  | from json import loads | 
					
						
							| 
									
										
										
										
											2014-03-29 17:04:33 +01:00
										 |  |  | from urllib import urlencode | 
					
						
							| 
									
										
										
										
											2014-03-29 16:30:49 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def dbpedia(query): | 
					
						
							|  |  |  |     # dbpedia autocompleter | 
					
						
							| 
									
										
										
										
											2014-03-29 17:04:33 +01:00
										 |  |  |     autocomplete_url = 'http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?'  # noqa | 
					
						
							| 
									
										
										
										
											2014-03-29 16:30:49 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-29 17:04:33 +01:00
										 |  |  |     response = get(autocomplete_url | 
					
						
							|  |  |  |                    + urlencode(dict(QueryString=query))) | 
					
						
							| 
									
										
										
										
											2014-03-29 16:30:49 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     results = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if response.ok: | 
					
						
							|  |  |  |         dom = etree.fromstring(response.content) | 
					
						
							|  |  |  |         results = dom.xpath('//a:Result/a:Label//text()', | 
					
						
							|  |  |  |                             namespaces={'a': 'http://lookup.dbpedia.org/'}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return results | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def google(query): | 
					
						
							|  |  |  |     # google autocompleter | 
					
						
							| 
									
										
										
										
											2014-03-29 17:04:33 +01:00
										 |  |  |     autocomplete_url = 'http://suggestqueries.google.com/complete/search?client=toolbar&'  # noqa | 
					
						
							| 
									
										
										
										
											2014-03-29 16:30:49 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-29 17:04:33 +01:00
										 |  |  |     response = get(autocomplete_url | 
					
						
							|  |  |  |                    + urlencode(dict(q=query))) | 
					
						
							| 
									
										
										
										
											2014-03-29 16:30:49 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     results = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if response.ok: | 
					
						
							| 
									
										
										
										
											2014-03-29 17:04:33 +01:00
										 |  |  |         dom = etree.fromstring(response.text) | 
					
						
							| 
									
										
										
										
											2014-03-29 16:30:49 +01:00
										 |  |  |         results = dom.xpath('//suggestion/@data') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return results | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def wikipedia(query): | 
					
						
							|  |  |  |     # wikipedia autocompleter | 
					
						
							| 
									
										
										
										
											2014-03-29 17:04:33 +01:00
										 |  |  |     url = 'https://en.wikipedia.org/w/api.php?action=opensearch&{0}&limit=10&namespace=0&format=json'  # noqa | 
					
						
							| 
									
										
										
										
											2014-03-29 16:30:49 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-29 17:04:33 +01:00
										 |  |  |     resp = loads(get(url.format(urlencode(dict(q=query)))).text) | 
					
						
							| 
									
										
										
										
											2014-03-29 17:15:59 +01:00
										 |  |  |     if len(resp) > 1: | 
					
						
							|  |  |  |         return resp[1] | 
					
						
							|  |  |  |     return [] | 
					
						
							| 
									
										
										
										
											2014-03-29 16:30:49 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | backends = {'dbpedia': dbpedia, | 
					
						
							|  |  |  |             'google': google, | 
					
						
							|  |  |  |             'wikipedia': wikipedia | 
					
						
							|  |  |  |             } |