歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【Python】twilogの過去ツイートから、URLを含んだtweetのみを抽出する

こういうbotをやっています。 twilog.org

botの仕組み自体は簡単で、あらかじめ私が設定したyoutubeニコニコ動画のURLをランダムにツイートしています (APIを使ってリンク切れの判定くらいはしていますが)。 ところが、この曲のリストを2年以上更新していません。 そのため、最近ではちょっと懐かしい曲ばかりになってしまっています。

このbotでは、自分用のメモも兼ねて、手動で最新情報をリツイートしているので、 その手動ツイートの中から最新曲のURLを抽出するというのが今回やりたいことです。

まずはTwilogから過去のツイートデータをcsvでダウンロードします。 こんな感じのデータが出てきます。

"638275039566008321","150831 180002","物凄い狂っとるフランちゃんが物凄いうた http://youtu.be/TJiHFgNFeGQ #dempa_b"                                                          
"638184442180202496","150831 120002","筋肉水泳 http://youtu.be/3aNBAuHOc7k #dempa_b"
"638093864885063681","150831 060007","私の彼はサイコパス http://nico.ms/sm8734847 #dempa_b http://pic.twitter.com/ZceCyX1VCY"
"638003259014119425","150831 000005","お兄ちゃんと放課後のひ・み・つ☆ http://nico.sc/sm6703289 #dempa_b http://pic.twitter.com/rPgRlND46o"

最近Haskellを勉強してるので、関数型っぽくfilter関数を多用して、 「全てのパターンからフィルターをかけて目的のものを抽出する」という感じでやってみました。 でも変数の再代入(tweetsとか)はガンガン使っちゃってます。

また、pandasを使おうとも考えたのですが、標準ライブラリとmapとかfilter使ったほうが覚えることが少なくて楽な気がしちゃってます…。 難しい統計解析なら便利なのかもしれないですが。

import csv
import re
from functools import partial

data = csv.reader(open('dempa_bot150831.csv'))

# 前回更新以前のデータを削除
data = filter(lambda x: int(x[0]) > 356014284679024641, data)
tweets = map(lambda x: x[2], data)

# urlツイートのみを抽出
is_urltweet = partial(re.match, r'.*https?://.*')
tweets = filter(is_urltweet, tweets)

# 自動投稿を削除(自動投稿にはハッシュタグ#dempa_bをつける設定をしている)
tweets = filter(lambda x: not '#dempa_b' in x, tweets)

# 自分のブログ投稿を削除
tweets = filter(lambda x: not 'http://sciandeng.blog38.fc2.com' in x, tweets)

# 一行ずつ書き込む(改行は空白に置換)
with open('output.txt', 'w') as f:
    for tw in tweets:
        f.write(tw.replace('\n', ' '))
        f.write('\n')

結果としては、こんなものが出てきます。 3700行程度なのであとは目視でなんとかなります。

RT @mimeko_hime: ぷりんてぃんのLINEスタンプ販売開始しました☆ 下のアドレスをクリックするか、LINEアプリ内で「ぷりんてぃん」で検索してみてください。https://store.line.me/stickershop/product/1018555/ja http://pic.twitter.com/nJQGnog4oY
RT @chii_mofumofu: 学園ハンサムのDVDの盤面、肝心のアゴが穴で見切れてるじゃんと思ったら、指をつっこんでお好きなアゴメンの顎をお好みの長さで楽しめるという機能だったぁぁ!!うぼぁぁぁあああああ!!!! http://pic.twitter.com/ZsAzAbSyQp
RT @tadanonatsu: アイカツ!『COLORFUL SMILE』がリリースになりました。ひとあし先にTVでお披露目された「エメラルドの魔法」、お楽しみいただけているでしょうか。ときどき肉の会で隣の席になるagraph 牛尾憲輔さんの作曲編曲、嬉しさです。 http://pic.twitter.com/xz8ydMaZYV