IRC上に流れてきたURLのタイトルを返す関数

シェアする

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
Sponsored Link

シェアする

フォローする