def google(self, message): ''' google <string> [results <number>]: google <string> in google. results - number of printed search results.''' try: (text, numresults) = message.ctext.rsplit(' results ', 1) except ValueError: text = message.ctext numresults = 1 try: numresults = int(numresults) except Exception: numresults = 1 response = json.loads(goUrl('http://ajax.googleapis.com/ajax/services/search/web?v=1.0&', {'q' : text})) if response and response.has_key('responseData') and response['responseData'] and response['responseData'].has_key('results'): num = 0 for result in response['responseData']['results']: if numresults > 0 and num >= numresults: break result['content'] = result['content'].replace('<b>', '').replace('</b>', '') message.reply(' '.join([result['titleNoFormatting'], result['content'], result['url']])) num += 1 else: message.reply('NO WAI!')
def translate(self, message): ''' translate <string> [lang <language>|<language>]: translate <string> using google api. lang option specifies the direction of translation. <language> it is 2-character code of language. Default direction: en|ru''' try: (text, lang) = message.ctext.rsplit(' lang ', 1) except ValueError: text = message.ctext lang = 'en|ru' if lang.find('jp') >= 0: message.reply('Use ja, Luke.') return langs = lang.split('|') response = '' for i in range(0, len(langs)-1): response = json.loads(goUrl('http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&', {'q' : text,'langpair':langs[i]+'|'+langs[i+1]})) if response and response.has_key('responseData') and response['responseData'] and response['responseData'].has_key('translatedText'): text = response['responseData']['translatedText'] else: message.reply('Translate from ' + langs[i] + ' to ' + langs[i+1] + ' fail. Last: ' + text) return if response and response.has_key('responseData') and response['responseData'] and response['responseData'].has_key('translatedText'): message.reply(response['responseData']['translatedText']) else: message.reply('NO WAI!')
def anime(self, message): """ anime <string> [results <number>] [page <number>]: Search <string> as record name in catalog database and display matches. result - number of results to display. Default: 1. Maximum: 20. page - number of results page to display sort - not realised yet field - not supported by api yet.""" if not self.csrf: self.csrf = self.getcsrf() try: (text, page) = message.ctext.rsplit(" page ", 0) except ValueError: text = message.ctext page = 0 try: (text, numresults) = text.rsplit(" results ", 1) numresults = int(numresults) except ValueError: numresults = 3 ret = goUrl( "http://anicat.net/ajax/search/", {"string": text, "page": page, "limit": numresults, "csrfmiddlewaretoken": self.csrf}, True, {"csrftoken": self.csrf}, ) ret = json.loads(ret) if not ret: message.reply("No!") return if ret["response"] == "error": message.reply(ret["text"]) else: if not ret["text"]["count"]: message.reply("Nothing found.") else: response = str(ret["text"]["count"]) + " results total. " response += "Page %i of %i \n" % (ret["text"]["page"] + 1, int(ret["text"]["count"]) / numresults + 1) rescount = 0 for elem in ret["text"]["items"]: rescount += 1 if rescount > numresults: break response += "%s (%s), Translation: %s\n" % ( self.encd(elem["name"]), elem["type"], elem["translation"], ) response += "Catalog id: %d http://anicat.net/card/%d/\n" % (elem["id"], elem["id"]) message.reply(response)
def aniget(self, message): """ aniget <number> <string>: Return <string> parameter of record with id <number>. Multiple fields supported with comma separator between.""" if not self.csrf: self.csrf = self.getcsrf() try: cid, text = message.ctext.split(" ", 1) int(cid) except Exception: message.reply('NO WAI!\nTry "aniget help"') return ret = json.loads( goUrl( "http://anicat.net/ajax/get/", {"id": cid, "field": text, "csrfmiddlewaretoken": self.csrf}, True, {"csrftoken": self.csrf}, ) ) if not ret: message.reply("No!") return if ret["response"] == "error": message.reply(ret["text"]) else: resp = "" r = ret["text"] print r for o in r["order"]: elem = r[o] if elem: resp += "\n %s: " % o.capitalize() if type(elem).__name__ == "list": for el in elem: resp += "\n" if type(el).__name__ == "dict" and el.has_key("name") and el["name"]: resp += self.encd(el["name"]) if el.has_key("comm") and el["comm"]: resp += "(%s)" % self.encd(el["comm"]) if el.has_key("role") and el["role"]: resp += " as " + self.encd(el["role"]) else: resp += self.encd(el) else: resp += self.encd(elem) message.reply(resp)