The jonki

呼ばれて飛び出てじょじょじょじょーんき

RSS(rdf, xml) を BeautifulSoup 使って Twitter に投稿

2chのまとめ系専用のbotを作成しました。
似たようなbotはたくさんあるけど、自分用に見やすいものが欲しかったので。

これ。ヘンリエッタはただの趣味でs(ry)
@2ch_m


さて、今回は下記の2chまとめサイトを利用しました。
使うサイトはランダムにしていて便宜上番号が振って有ります。

media = {
        0:["[痛ニュー] ", "http://blog.livedoor.jp/dqnplus/index.rdf"],
        1:["[ニュー速] ", "http://news4vip.livedoor.biz/index.rdf"],
        2:["[ハム速] ", "http://hamusoku.com/index.rdf"],
        3:["[VIP] ", "http://blog.livedoor.jp/news23vip/index.rdf"],
        4:["[カナ速] ", "http://kanasoku.blog82.fc2.com/?xml"],
        5:["[カジ速] ", "http://www.kajisoku.org/index.rdf"],
        6:["[ベア速] ", "http://vipvipblogblog.blog119.fc2.com/?xml"],
        7:["[日経スレ] ", "http://guideline.livedoor.biz/index.rdf"],
        8:["[アルファ] ", "http://alfalfalfa.com/index.rdf"],
        9:["[ワラノート] ", "http://waranote.blog76.fc2.com/?xml"],
}


で、肝心のBeautifulSoup部分。
記事タイトルとそのリンクが取れれば良いわけだけど、リンクタグがとなって
閉じてしまうようで、上手く取得出来ませんでした。

なので正規表現でゴリ押しっていう最悪なパターン。べ、別にいいんだ。。。

下の例はitemを全検索してますが、実際には適当なところのitemでbreakしてます。

def feedSoup(soup):
        items = soup.findAll("item")

        #ex) <item rdf:about="http://blog.livedoor.jp/dqnplus/archives/1389783.html">
        p = re.compile(r"rdf:about=\"(.+)\"")
        for item in items:
                title = item.title.string
                link = p.search(str(item))
                text = title + " " + link.group(1)
                
        return text


こんな感じに呼び出せば使えます。

rnd = random.randint(0,len(media)-1)
media_name = media[rnd][0]
media_url  = media[rnd][1] 

html = urllib2.urlopen(media_url).read()
soup = BeautifulSoup(html)
text = feedSoup(soup)
text = media_name + text + " #2ch"
print text
tapi = twitter.Api(username=usrname, password=passwd)
tapi.PostUpdate(text)