togetter→EPUB変換
結局、togetterの番号から記事を取ってきてテキストにするスクリプトを書いて、reStructuredTextあたりとして処理してpandocでEPUBに変換することで、ニンジャスレイヤーをEPUBでオフラインで読むことができるようになりました。最近はこれでAndroidのFBReaderで読んでますが、動作も安定しているし、途中で中断しても続きから開けるのでかなり快適になりました。
とりあえずスクリプトを載せておきます。Cookieとかcsrf_tokenがないと続きを読み込めないみたいだが、かなり適当にやっても普通にテキストに変換することができた。ニンジャスレイヤーのテキストに関しては一部エスケープしないといけなかったり、&が&になってしまったりするようだが、おおむね読むのに問題ない状況になっている。
#! /usr/bin/python # encoding: UTF-8 import urllib, urllib2 import cookielib from BeautifulSoup import BeautifulSoup as BS class tog: def __init__(self, tid): self.title=str(tid) self.tid=tid self.cookie=cookielib.CookieJar() self.texts=[] self.opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookie)) def call_api(self, name, tid, data): url="http://togetter.com/api/%s/%d" %(name, tid) data["csrf_token"]=self.csrf_token params=urllib.urlencode(data) fp=self.opener.open(url, params) html=fp.read() return html def get(self): fp=self.opener.open("http://togetter.com/li/%d" %(self.tid)) html=fp.read() soup=BS(html) self.csrf_token=soup.find('meta', {"name":"csrf_token"})["content"] self.title=soup.find("meta", {"name":"twitter:title"})["content"] return html def parse2txt(self, html): soup=BS(html) for i in soup.findAll("div", {"class":"tweet"}): self.texts.append(i.text) rest=filter(lambda f: f.text.startswith(u"残りを読む"), soup.findAll("a", {"class": "btn comment_btn"})) if len(rest)==1: rstr=rest[0]["onclick"] page=int(rstr.split(",",1)[1].strip(");")) return page return None def readall(self): html=self.get() rest=self.parse2txt(html) while rest!=None: html=self.call_api("moreTweets", self.tid, {"page":rest}) rest=self.parse2txt(html) if __name__=="__main__": import sys tg=tog(int(sys.argv[1])) tg.readall() titlelen=len(tg.title.encode("EUC-JP")) print tg.title.encode("UTF-8") print "-"*titlelen print "" for t in tg.texts: print t.encode("UTF-8") print ""
読み進めたのは今のところ第2部の終わりくらいまで。ヨロシサン製薬が実際大活躍でしたな。ビョーキ・トシヨリ・ヨロシサン。ヨロシサン関係のニンジャ…特にケジメニンジャ=サンやサブジュゲイター=サン、セントール=サンあたりはかなり良かった。
ただ就職するならヨロシサンよりオムラ・インダストリだよね。モーター理念バンザイ。最後は残念なことになっちゃったけど。