現在
- はてなダイアリー
- はてなグループダイアリー
- ライブドアブログ
- Seesaa ブログ
- Nowa
BeautifulSoupを使っているので、あまり白熱したコメント欄だとサーバが火を噴くかもしれません。
また過激な議論、18才未満に相応しく無いもの等は、強制でフィード出力を停止する場合があります。
CommentRSSよろしかったら使ってみて下さい。
CommentRSSよろしかったら使ってみて下さい。
*** elementtree/ElementTree.py.orig Thu Apr 24 21:02:09 2008
--- elementtree/ElementTree.py Thu Apr 24 21:34:42 2008
***************
*** 1252,1254 ****
--- 1252,1267 ----
tree = self._target.close()
del self._target, self._parser # get rid of circular references
return tree
+
+ try:
+ from xml.parsers import expat
+ except ImportError:
+ import xmllib
+ import SimpleXMLTreeBuilder
+ def __init__fake(self, html=0):
+ self.__init__orig(html)
+ xmllib.XMLParser.__init__(self, accept_utf8=1)
+ clazz = SimpleXMLTreeBuilder.TreeBuilder
+ clazz.__init__orig = clazz.__init__
+ clazz.__init__ = __init__fake
+ XMLTreeBuilder = SimpleXMLTreeBuilder.TreeBuilder
ちなみにpatch当てなくても、ElementTree.pyの最下行に
try:
from xml.parsers import expat
except ImportError:
import xmllib
import SimpleXMLTreeBuilder
def __init__fake(self, html=0):
self.__init__orig(html)
xmllib.XMLParser.__init__(self, accept_utf8=1)
clazz = SimpleXMLTreeBuilder.TreeBuilder
clazz.__init__orig = clazz.__init__
clazz.__init__ = __init__fake
XMLTreeBuilder = SimpleXMLTreeBuilder.TreeBuilder
を足せば出来上がる。こうすると大概のものは小細工無しに動くと思う。たぶんtwitterのfollower発言で、漢字が読めなかった貴方。「@mattn_jp それなんて読むの?」とか聞くのが恥ずかしい貴方。そんな貴方にピッタリのサービスです。twitter followerの発言に「読み」を付けて表示します。(まぁ私は難しい単語なんて使いませんが...)
文字の分解にはYahoo! JAPANの「日本語形態素解析Webサービス」を使用しています。
色の変っている部分にマウスを当てると、ツールチップにて読みを教えてくれるようになっています。
で、いきなりですが「よみふったー」のソースです。
#!-*- coding:utf-8 -*-
import os
import re
import base64
import xmllib
import logging
import elementtree.SimpleXMLTreeBuilder as xmlbuilder
import wsgiref.handlers
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from BeautifulSoup import BeautifulSoup
from webSimple import Simple as webSimple
class MainPage(webapp.RequestHandler):
def post(self):
twitter_user = self.request.get('twitter_user').encode('utf-8', 'replace')
template_valuse = {
'twitter_user' : twitter_user,
'statuses' : []
}
try:
twitter_url = "http://twitter.com/statuses/user_timeline/%s.xml" % twitter_user
twitter = webSimple({ 'base_url': twitter_url })
yahoo = webSimple({
'base_url': 'http://api.jlp.yahoo.co.jp/MAService/V1/parse',
'param' : { 'appid' : 'xxxxxxxx', 'results' : 'ma', },
})
xml = twitter.get().content
r = re.compile(r'(\&#\d+;)')
for st in BeautifulSoup(xml)('status'):
name = r.sub(lambda x: unichr(int(x.group(1)[2:-1])), st.user.screen_name.string).encode('utf-8', 'replace')
msg = r.sub(lambda x : unichr(int(x.group(1)[2:-1])), st.text.string).encode('utf-8', 'replace')
xml = yahoo.get({ 'sentence': msg }).content
words = []
for word in BeautifulSoup(xml)('word'):
words.append({
'reading' : word.reading.string.encode('utf-8', 'replace'),
'pos' : word.pos.string.encode('utf-8', 'replace'),
'surface' : word.surface.string.encode('utf-8', 'replace'),
})
template_valuse['statuses'].append({
'screen_name' : name,
'words' : words,
})
except Exception, e:
template_valuse['error'] = e
pass
path = os.path.join(os.path.dirname(__file__), 'yomifutter.html')
self.response.out.write(template.render(path, template_valuse))
def get(self):
path = os.path.join(os.path.dirname(__file__), 'yomifutter.html')
self.response.out.write(template.render(path, {}))
def main():
application = webapp.WSGIApplication([('/yomifutter/', MainPage)], debug=True)
wsgiref.handlers.CGIHandler().run(application)
if __name__ == '__main__':
main()
適当なコードで申し訳ない...汗このブログを応援する