Skip to content

Commit

Permalink
branch merge ... thnx melmothx
Browse files Browse the repository at this point in the history
  • Loading branch information
Bart Thate committed Mar 28, 2011
2 parents a972566 + ce9960e commit 88808cb
Show file tree
Hide file tree
Showing 5 changed files with 168 additions and 3 deletions.
35 changes: 35 additions & 0 deletions jsb/plugs/common/dns.py
@@ -0,0 +1,35 @@
## jsb imports
from jsb.lib.commands import cmnds
from jsb.lib.examples import examples
## system imports
from socket import gethostbyname
from socket import getfqdn
import re

def handle_dns(bot, event):
if not event.rest:
event.missing("<ip> or <hostname>")
return
query = event.rest.strip()
ippattern = re.match(r"^([0-9]{1,3}\.){3}[0-9]{1,3}$", query)
hostpattern = re.match(r"(\w+://)?(?P<hostname>\S+\.\w+)", query)
if ippattern:
try:
answer = getfqdn(ippattern.group(0))
event.reply("%(hostname)s is %(answer)s" %
{"hostname": query, "answer": answer})
except:
event.reply("Couldn't lookup ip")

elif hostpattern:
try:
answer = gethostbyname(hostpattern.group('hostname'))
event.reply("%(ip)s is %(answer)s" %
{"ip": query, "answer": answer})
except:
event.reply("Couldn't look up the hostname")

else: return

cmnds.add("dns", handle_dns, ["OPER", "USER", "GUEST"])
examples.add("dns", "resolve the ip or the hostname", "dns google.com")
31 changes: 29 additions & 2 deletions jsb/plugs/common/geo.py
Expand Up @@ -11,14 +11,41 @@
from jsb.utils.url import geturl2
from jsb.imports import getjson

## system imports
from socket import gethostbyname
import re
## defines

URL = "http://geoip.pidgets.com/?ip=%s&format=json"

def querygeoipserver(ip):
ipinfo = getjson().loads(geturl2(URL % ip))
return ipinfo

## geo command

def handle_geo(bot, event):
if not event.rest: event.missing("<ip>") ; return
event.reply("geo of %s is: " % event.rest, getjson().loads(geturl2(URL % event.rest)))
if not event.rest:
event.missing("<ip>")
return
query = event.rest.strip()
ippattern = re.match(r"^([0-9]{1,3}\.){3}[0-9]{1,3}$", query)
hostpattern = re.match(r"(\w+://)?(?P<hostname>\S+\.\w+)", query)
ip = ""
if ippattern:
ip = ippattern.group(0)

elif hostpattern:
try:
ip = gethostbyname(hostpattern.group('hostname'))
except:
event.reply("Couldn't look up the hostname")
return

else: return

event.reply("geo of %s is: " % ip, querygeoipserver(ip))



cmnds.add("geo", handle_geo, ["OPER", "GEO"])
52 changes: 52 additions & 0 deletions jsb/plugs/common/googletranslate.py
@@ -0,0 +1,52 @@
## jsb imports

from jsb.lib.commands import cmnds
from jsb.utils.url import geturl2
from jsb.imports import getjson
# import logging
import re
from urllib import quote

# URL = "http://imdbapi.poromenos.org/js/?name=%s" # for this tweaking is needed, but it doesn't appear to work as adviced. E.g., inception return None
URL = r"http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=%(text)s&langpair=%(from)s|%(to)s"

def parse_pair(text):
trans = re.match("^(?P<from>[a-z]{2}) +(?P<to>[a-z]{2}) +(?P<txt>.*)$",
text)
return {'from': trans.group('from'),
'to': trans.group('to'),
'text': quote(trans.group('txt'))}

def handle_translate(bot, event):
if not event.rest:
event.missing("<from> <to> <text>")
return
query = parse_pair(event.rest.strip())
if not query:
event.missing("<from> <to> <text>")
return
# event.reply(URL % query)
rawresult = {}
try:
rawresult = getjson().loads(geturl2(URL % query))
except:
event.reply("Query to Google failed")
return
# debug
# rawresult = {"responseData": {"translatedText":"test"}, "responseDetails": None, "responseStatus": 201}
# logging.warn(URL % query)
# logging.warn(rawresult)
if rawresult['responseStatus'] != 200:
event.reply("Error in the query: ", rawresult)
return
if 'responseData' in rawresult:
if 'translatedText' in rawresult['responseData']:
translation = rawresult['responseData']['translatedText']
event.reply(translation)
else:
event.reply("No text available")
else:
event.reply("Something is wrong, probably the API changed")

cmnds.add("translate", handle_translate, ["OPER", "USER", "GUEST"])

51 changes: 51 additions & 0 deletions jsb/plugs/common/imdb.py
@@ -0,0 +1,51 @@
## jsb imports

from jsb.lib.commands import cmnds
from jsb.utils.url import geturl2, striphtml, decode_html_entities
from jsb.imports import getjson
import logging

# URL = "http://imdbapi.poromenos.org/js/?name=%s" # for this tweaking is needed, but it doesn't appear to work as adviced. E.g., inception return None
URL = "http://www.deanclatworthy.com/imdb/?q=%s"


def handle_imdb(bot, event):
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]

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 )

cmnds.add("imdb", handle_imdb, ["OPER", "USER", "GUEST"])

2 changes: 1 addition & 1 deletion jsb/utils/url.py
Expand Up @@ -174,7 +174,7 @@ def decode_html_entities(s):
def to_entn(match):
""" convert to entities """
if htmlentitydefs.entitydefs.has_key(match.group(1)):
return htmlentitydefs.entitydefs[match.group(1)].decode('utf-8', 'replace')
return htmlentitydefs.entitydefs[match.group(1)].decode('latin1', 'replace')
return match.group(0)

def to_utf8(match):
Expand Down

0 comments on commit 88808cb

Please sign in to comment.