autocomplete.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from lxml import etree
  2. from requests import get
  3. from json import loads
  4. from urllib import urlencode
  5. def dbpedia(query):
  6. # dbpedia autocompleter
  7. autocomplete_url = 'http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?' # noqa
  8. response = get(autocomplete_url
  9. + urlencode(dict(QueryString=query)))
  10. results = []
  11. if response.ok:
  12. dom = etree.fromstring(response.content)
  13. results = dom.xpath('//a:Result/a:Label//text()',
  14. namespaces={'a': 'http://lookup.dbpedia.org/'})
  15. return results
  16. def google(query):
  17. # google autocompleter
  18. autocomplete_url = 'http://suggestqueries.google.com/complete/search?client=toolbar&' # noqa
  19. response = get(autocomplete_url
  20. + urlencode(dict(q=query)))
  21. results = []
  22. if response.ok:
  23. dom = etree.fromstring(response.text)
  24. results = dom.xpath('//suggestion/@data')
  25. return results
  26. def wikipedia(query):
  27. # wikipedia autocompleter
  28. url = 'https://en.wikipedia.org/w/api.php?action=opensearch&{0}&limit=10&namespace=0&format=json' # noqa
  29. resp = loads(get(url.format(urlencode(dict(q=query)))).text)
  30. if len(resp) > 1:
  31. return resp[1]
  32. return []
  33. backends = {'dbpedia': dbpedia,
  34. 'google': google,
  35. 'wikipedia': wikipedia
  36. }