2chのまとめ系専用のbotを作成しました。
似たようなbotはたくさんあるけど、自分用に見やすいものが欲しかったので。
さて、今回は下記の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)