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部の終わりくらいまで。ヨロシサン製薬が実際大活躍でしたな。ビョーキ・トシヨリ・ヨロシサン。ヨロシサン関係のニンジャ…特にケジメニンジャ=サンやサブジュゲイター=サン、セントール=サンあたりはかなり良かった。
ただ就職するならヨロシサンよりオムラ・インダストリだよね。モーター理念バンザイ。最後は残念なことになっちゃったけど。