Esempio n. 1
0
def handle_imdb(bot, event):
    """ arguments: <query> - query the imdb databae at http://www.deanclatworthy.com/imdb/ """
    if not event.rest:
        event.missing("<query>")
        return
    query = event.rest.strip()
    urlquery = query.replace(" ", "+")
    result = {}
    rawresult = getjson().loads(geturl2(URL % urlquery))
    # the API are limited to 30 query per hour, so avoid querying it just for testing purposes
    # rawresult = {u'ukscreens': 0, u'rating': u'7.7', u'genres': u'Animation,&nbsp;Drama,Family,Fantasy,Music', u'title': u'Pinocchio', u'series': 0, u'country': u'USA', u'votes': u'23209', u'languages': u'English', u'stv': 0, u'year': None, u'usascreens': 0, u'imdburl': u'http://www.imdb.com/title/tt0032910/'}
    if not rawresult:
        event.reply("couldn't look up %s" % query)
        return
    if 'error' in rawresult:
        event.reply("%s" % rawresult['error'])
        return
    print rawresult
    for key in rawresult.keys():
        if not rawresult[key]: result[key] = u"n/a"
        else: result[key] = rawresult[key]
    for key in result.keys():
        try:
            result[key] = striphtml(decode_html_entities(rawresult[key]))
        except AttributeError:
            pass
    if "year" in rawresult.keys():
        event.reply(
            "%(title)s (%(country)s, %(year)s): %(imdburl)s | rating: %(rating)s (out of %(votes)s votes) | Genres %(genres)s | Language: %(languages)s"
            % result)
    else:
        event.reply(
            "%(title)s (%(country)s): %(imdburl)s | rating: %(rating)s (out of %(votes)s votes) | Genres %(genres)s | Language: %(languages)s"
            % result)
Esempio n. 2
0
File: imdb.py Progetto: code2u/jsb
def handle_imdb(bot, event):
    """ arguments: <query> - query the imdb databae at http://www.deanclatworthy.com/imdb/ """
    if not event.rest:  event.missing("<query>") ; return
    query = event.rest.strip()
    urlquery = query.replace(" ", "+")
    result = {}
    rawresult = getjson().loads(geturl2(URL % urlquery))
    # the API are limited to 30 query per hour, so avoid querying it just for testing purposes
    # rawresult = {u'ukscreens': 0, u'rating': u'7.7', u'genres': u'Animation,&nbsp;Drama,Family,Fantasy,Music', u'title': u'Pinocchio', u'series': 0, u'country': u'USA', u'votes': u'23209', u'languages': u'English', u'stv': 0, u'year': None, u'usascreens': 0, u'imdburl': u'http://www.imdb.com/title/tt0032910/'}
    if not rawresult: event.reply("couldn't look up %s" % query) ; return
    if 'error' in rawresult: event.reply("%s" % rawresult['error']) ; return
    for key in rawresult.keys():
        if not rawresult[key]: result[key] = u"n/a"
        else: result[key] = rawresult[key]
    for key in result.keys():
        try: result[key] = striphtml(decode_html_entities(rawresult[key]))
        except AttributeError: pass
    event.reply("%(title)s (%(country)s, %(year)s): %(imdburl)s | rating: %(rating)s (out of %(votes)s votes) | Genres %(genres)s | Language: %(languages)s" % result )
Esempio n. 3
0
 def say(self, channel, txt, result=[], how="msg", event=None, nr=375, extend=0, dot=", ", showall=False, *args, **kwargs):
     """ default method to send txt from the bot to a user/channel/jid/conference etc. """
     if event and event.userhost in self.ignore: logging.warn("%s - ignore on %s - no output done" % (self.cfg.name, event.userhost)) ; return
     if event and event.nooutput:
         logging.debug("%s - event has nooutput set, not outputing" % self.cfg.name)
         if event: event.outqueue.put_nowait(txt)
         return
     if event and event.how == "msg":
          if self.type == "irc": target = event.nick
          else: target = channel
     else: target = channel
     if showall or (event and event.showall): txt = self.makeresponse(txt, result, dot, *args, **kwargs)
     else: txt = self.makeoutput(channel, txt, result, nr, extend, dot, origin=target, *args, **kwargs)
     if txt:
         if event and event.displayname: txt = "[%s] %s" % (event.displayname, txt)
         txt = decode_html_entities(txt)
         if event:
             event.resqueue.put_nowait(txt)
             event.outqueue.put_nowait(txt)
             if event.path != None and not self.cfg.name in event.path: event.path.append(self.cfg.name)
         txt = self.outputmorphs.do(txt, event)
         self.out(target, txt, how, event=event, origin=target, *args, **kwargs)
     if event: event.result.append(txt)
Esempio n. 4
0
def handle_imdb(bot, event):
    if not event.rest:
        event.missing("<query>")
        return
    query = build_query(scan_query(event.rest.strip()))
    result = {}
    rawresult = do_imdb_api_query(query)

    # the API are limited to 30 query per hour, so avoid querying it just for
    # testing purposes

    #    rawresult = {u'ukscreens': 0, u'rating': u'7.7', u'genres': u'Animation,&nbsp;Drama,Family,Fantasy,Music', u'title': u'Pinocchio', u'series': 0, u'country': u'USA', u'votes': u'23209', u'languages': u'English', u'stv': 0, u'year': None, u'usascreens': 0, u'imdburl': u'http://www.imdb.com/title/tt0032910/'}
    if not rawresult:
        event.reply("Couldn't look up %s" % query)
        return

    if 'error' in rawresult:
        event.reply("%s" % rawresult['error'])
        return

    for key in rawresult.keys():
        if not rawresult[key]:
            result[key] = u"n/a"
        else:
            result[key] = rawresult[key]

    logging.warn(rawresult, result)
    for key in result.keys():
        try:
            result[key] = striphtml(decode_html_entities(rawresult[key]))
        except AttributeError:
            # if the value is not a string, ignore the error and keep going
            pass

    event.reply("%(title)s (%(country)s, %(year)s): %(imdburl)s | rating:\
 %(rating)s (out of %(votes)s votes) | Genres %(genres)s | Language: %(languages)s"
                % result)
Esempio n. 5
0
 def say(self, channel, txt, result=[], how="normal", event=None, nr=375, extend=0, dot=", ", showall=False, speed=None, direct=False, plugorigin=None, *args, **kwargs):
     """ default method to send txt from the bot to a user/channel/jid/conference etc. """
     speed = speed or (event and event.speed) or 5
     logging.info("saying to %s (speed is %s)" % (channel, speed))
     if event:
         if event.userhost.lower() in self.state['ignore']: logging.warn("%s - ignore on %s - no output done" % (self.cfg.name, event.userhost)) ; return
         if event.how == "msg" and self.type == "irc": target = event.nick
         else: target = channel
         if event.pipelined:
             dres = []
             if issubclass(type(result), dict):
                 for key, value in result.iteritems():
                     dres.append(u"%s: %s" % (key, unicode(value)))
             for i in dres or result: event.outqueue.append(i)
     else: target = channel
     origin = target
     if (event and event.pipelined) or showall or (event and event.showall): txt = self.makeresponse(txt, result, dot, *args, **kwargs)
     else: txt = self.makeoutput(channel, txt, result, nr, extend, dot, origin=origin, *args, **kwargs)
     if txt:
         txt = decode_html_entities(txt)
         if event:
             event.nrout += 1
             if event.displayname: txt = "[%s] %s" % (event.displayname, txt)
             event.resqueue.append(txt)
             if event.pipelined: return
             if result:
                 for i in result: event.outqueue.append(i)
             if event.nooutput: event.ready() ; return
         else: logging.info("not putting txt on queues")
         txt = self.outputmorphs.do(txt, event)
         if target == "usedefault": tt = self.state["joinedchannels"]
         else: tt = [target, ]
         if event:
             event.ready()
             if event.stop: return
         for t in tt: self.putonqueue(speed, target, txt, how, event=event, origin=origin, plugorigin=plugorigin, *args, **kwargs)
Esempio n. 6
0
def handle_imdb(bot, event):
    if not event.rest: 
        event.missing("<query>")
        return
    query = build_query(scan_query(event.rest.strip()))
    result = {}
    rawresult = do_imdb_api_query(query)

# the API are limited to 30 query per hour, so avoid querying it just for 
# testing purposes

#    rawresult = {u'ukscreens': 0, u'rating': u'7.7', u'genres': u'Animation,&nbsp;Drama,Family,Fantasy,Music', u'title': u'Pinocchio', u'series': 0, u'country': u'USA', u'votes': u'23209', u'languages': u'English', u'stv': 0, u'year': None, u'usascreens': 0, u'imdburl': u'http://www.imdb.com/title/tt0032910/'}
    if not rawresult:
        event.reply("Couldn't look up %s" % query)
        return

    if 'error' in rawresult:
        event.reply("%s" % rawresult['error'])
        return

    for key in rawresult.keys():
        if not rawresult[key]:
            result[key] = u"n/a"
        else:
            result[key] = rawresult[key]

    logging.warn(rawresult, result)
    for key in result.keys():
        try:
            result[key] = striphtml(decode_html_entities(rawresult[key]))
        except AttributeError:
            # if the value is not a string, ignore the error and keep going
            pass

    event.reply("%(title)s (%(country)s, %(year)s): %(imdburl)s | rating:\
 %(rating)s (out of %(votes)s votes) | Genres %(genres)s | Language: %(languages)s" % result )
Esempio n. 7
0
    """ fetch title of url """
    try: result = geturl2(url)
    except urllib2.HTTPError, ex: logging.warn("HTTPError: %s" % str(ex)) ; return False
    except urllib2.URLError, ex: logging.warn("URLError %s" % str(ex)) ; return False
    except IOError, ex:
        try: errno = ex[0]
        except IndexError: handle_exception() ; return
        return False
    if not result: return False
    test_title = re_html_title.search(result)
    if test_title:
        # try to find an encoding and standardize it to utf-8
        encoding = get_encoding(result)
        title = test_title.group(1).decode(encoding, 'replace').replace('\n', ' ')
        title = title.strip()
        return decode_html_entities(title)
    return False

## geturl_validate function

def geturl_validate(url):
    """ validate url """
    url = urlvalidate % urllib.urlencode({'uri': url})
    try: result = geturl(url)
    except IOError, ex:
        try: errno = ex[0]
        except IndexError: handle_exception() ; return
        return False
    if not result: return False
    results = {}
    for key in re_html_valid.keys():
Esempio n. 8
0
 def say(self,
         channel,
         txt,
         result=[],
         how="normal",
         event=None,
         nr=375,
         extend=0,
         dot=", ",
         showall=False,
         speed=None,
         direct=False,
         plugorigin=None,
         *args,
         **kwargs):
     """ default method to send txt from the bot to a user/channel/jid/conference etc. """
     speed = speed or (event and event.speed) or 5
     logging.info("saying to %s (speed is %s)" % (channel, speed))
     if event:
         if event.userhost.lower() in self.state['ignore']:
             logging.warn("%s - ignore on %s - no output done" %
                          (self.cfg.name, event.userhost))
             return
         if event.how == "msg" and self.type == "irc": target = event.nick
         else: target = channel
         if event.pipelined:
             dres = []
             if issubclass(type(result), dict):
                 for key, value in result.iteritems():
                     dres.append(u"%s: %s" % (key, unicode(value)))
             for i in dres or result:
                 event.outqueue.append(i)
     else:
         target = channel
     origin = target
     if (event and event.pipelined) or showall or (event and event.showall):
         txt = self.makeresponse(txt, result, dot, *args, **kwargs)
     else:
         txt = self.makeoutput(channel,
                               txt,
                               result,
                               nr,
                               extend,
                               dot,
                               origin=origin,
                               *args,
                               **kwargs)
     if txt:
         txt = decode_html_entities(txt)
         if event:
             event.nrout += 1
             if event.displayname:
                 txt = "[%s] %s" % (event.displayname, txt)
             event.resqueue.append(txt)
             if event.pipelined: return
             if result:
                 for i in result:
                     event.outqueue.append(i)
             if event.nooutput:
                 event.ready()
                 return
         else:
             logging.info("not putting txt on queues")
         txt = self.outputmorphs.do(txt, event)
         if target == "usedefault": tt = self.state["joinedchannels"]
         else: tt = [
             target,
         ]
         if event:
             event.ready()
             if event.stop: return
         for t in tt:
             self.putonqueue(speed,
                             target,
                             txt,
                             how,
                             event=event,
                             origin=origin,
                             plugorigin=plugorigin,
                             *args,
                             **kwargs)
Esempio n. 9
0
    except IOError, ex:
        try:
            errno = ex[0]
        except IndexError:
            handle_exception()
            return
        return False
    if not result: return False
    test_title = re_html_title.search(result)
    if test_title:
        # try to find an encoding and standardize it to utf-8
        encoding = get_encoding(result)
        title = test_title.group(1).decode(encoding,
                                           'replace').replace('\n', ' ')
        title = title.strip()
        return decode_html_entities(title)
    return False


## geturl_validate function


def geturl_validate(url):
    """ validate url """
    url = urlvalidate % urllib.urlencode({'uri': url})
    try:
        result = geturl(url)
    except IOError, ex:
        try:
            errno = ex[0]
        except IndexError: