home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / lib / deskbar-applet / handlers / yahoo.py < prev    next >
Encoding:
Python Source  |  2007-04-09  |  1.9 KB  |  71 lines

  1. from deskbar.Utils import strip_html, get_proxy
  2. from gettext import gettext as _
  3. from deskbar.defs import VERSION
  4. import urllib, cgi
  5. import gnomevfs
  6. import deskbar.Handler, deskbar.Match, deskbar, deskbar.Utils
  7. import xml.dom.minidom
  8.  
  9. YAHOO_API_KEY = 'deskbar-applet'
  10. YAHOO_URL = 'http://api.search.yahoo.com/WebSearchService/V1/webSearch?%s'
  11. MAX_QUERIES = 10
  12. QUERY_DELAY = 1
  13.  
  14. HANDLERS = {
  15.     "YahooHandler" : {
  16.         "name": _("Yahoo! Search"),
  17.         "description": _("Search Yahoo! as you type"),
  18.         "version": VERSION,
  19.     }
  20. }
  21.  
  22. class YahooMatch(deskbar.Match.Match):
  23.     def __init__(self, handler, url=None, **args):
  24.         deskbar.Match.Match.__init__ (self, handler, **args)
  25.         self.url = url
  26.  
  27.     def get_verb(self):
  28.         return "%(name)s"
  29.  
  30.     def action(self, text=None):
  31.         deskbar.Utils.url_show(self.url)
  32.  
  33.     def get_category(self):
  34.         return "web"
  35.  
  36.     def get_hash(self, text=None):
  37.         return self.url
  38.  
  39. class YahooHandler(deskbar.Handler.AsyncHandler):
  40.     def __init__(self):
  41.         deskbar.Handler.AsyncHandler.__init__(self, "yahoo.png")
  42.         self.server = None
  43.  
  44.     def query(self, qstring):
  45.         # Delay before we query so we *don't* make four queries
  46.         # "s", "sp", "spa", "spam".
  47.         self.check_query_changed (timeout=QUERY_DELAY)
  48.         
  49.         print 'Query yahoo for:', qstring
  50.         stream = urllib.urlopen(
  51.             YAHOO_URL % 
  52.             urllib.urlencode(
  53.                 {'appid': YAHOO_API_KEY,
  54.                 'query': qstring,
  55.                 'results': 15}), proxies=get_proxy())
  56.         dom = xml.dom.minidom.parse(stream)
  57.         print 'Got yahoo answer for:', qstring
  58.         
  59.         self.check_query_changed ()    
  60.         # The Yahoo! search might have taken a long time
  61.         # better check if we're still valid
  62.         matches = [
  63.             YahooMatch (self, 
  64.                     name=cgi.escape(strip_html(r.getElementsByTagName("Title")[0].firstChild.data.encode('utf8'))),
  65.                     url=r.getElementsByTagName("ClickUrl")[0].firstChild.data.encode('utf8')
  66.             )
  67.             for r in dom.getElementsByTagName("Result")]
  68.         self.check_query_changed ()
  69.         print "Returning yahoo answer for:", qstring
  70.         return matches
  71.