IRC使ってるときにちょくちょくURLを貼り付ける事があるのだけど、URLだけ張られて中身何かわからん!ということが結構あるので bot に機能を追加した。
IRC上で誰かが URL を発言したらそのページを習得して title タグの中身を返す関数です。
こんな書き方で良いのかな。そういえば他人書いたPythonのコードってあんまり見たことないのでどんどん読んでいきたいところ。
文字コードを判別する部分はコメントのURLにあった関数をそのまま使わせてもらった。
# http://www.freia.jp/taka/blog/571
def guess_charset(data):
f = lambda d, enc: d.decode(enc) and enc
try: return f(data, 'utf-8')
except: pass
try: return f(data, 'shift-jis')
except: pass
try: return f(data, 'euc-jp')
except: pass
try: return f(data, 'iso2022-jp')
except: pass
return None
def gethttptitle(msg):
import urllib2
import re
m = re.search('(http://[a-z0-9_/\.\-\?\!@%#]*)', msg, re.I)
if msg.find(' PRIVMSG ') > 0 and m:
try:
r = urllib2.urlopen(m.group(0))
if r.msg == 'OK':
p = re.compile('(\r|\n)')
t = re.search('<title>(.*?)</title>', p.sub('', r.read()), re.I)
if t:
encode = guess_charset(t.group(1))
title = t.group(1).decode(encode)
irc.notice(channel, title)
except urllib2.HTTPError, e:
irc.notice(channel, '%s:%s' % (e.code, e.msg))
except urllib2.URLError, e:
irc.notice(channel, '%s' % (e.code))
except:
pass