Twitterで短縮URLの飛び先がリンク切れになっていないか?そもそもちゃんと自分が意図したURLになってるかな?と気になって寝られなくなり、簡単だがbitly用のリンク一覧スクリプトを書いてみた。
botなんかで自動的にツイートしてると、(主にバグが原因で)URLが表示されていなかったりリンク切れになってたり、しかも膨大な数のツイートになると目視とか無理。
雑なのであまり参考にならないかもしれませんが。以下ソース
やってることは単に
1. 特定のユーザーのTLから1ツイートづつ読み込む
2. 短縮URLがあったらリンク先に飛んでみる
3.リンク先に飛んでみて、レスポンスコードとメッセージを取得
4. ログファイルにstatusesとか飛び先のURLをwriteする
5. ページ送り
6. 1に戻る
import feedparser, urllib2, re, time, sys
fp = open("bitly_check.log", "a+")
screen_name = "HogeHuga"
count = 200
page = 1
while 1:
r = urllib2.urlopen("http://twitter.com/statuses/user_timeline.atom?screen_name=%s&count=%d&page=%d" % (screen_name, count, page)).read()
feed = feedparser.parse(r)
regex = re.compile('http\:\/\/bit.ly\/[0-9a-zA-Z]+')
if feed.entries:
for entry in feed.entries:
bitlyUrl = regex.findall(str(entry.content))
if len(bitlyUrl) > 0:
try:
content = urllib2.urlopen(bitlyUrl[0])
fp.write("%s\t%s\t%d\t%s\n" % (entry.link, content.geturl(), content.code, content.msg))
except urllib2.HTTPError, e:
fp.write("%s\t%s\t%d\t%s\n" % (entry.link, content.geturl(), e.code, e.msg))
except urllib2.URLError, e:
fp.write("%s\t%s\t\t%s\n" % (entry.link, content.geturl(), e))
time.sleep(10)
else:
fp.write("%s\tNoLink\t\t\n" % entry.link)
time.sleep(1)
else:
fp.close()
sys.exit()
page += 1
time.sleep(10)
fp.close()
fp = open("bitly_check.log", "a+")
screen_name = "HogeHuga"
count = 200
page = 1
while 1:
r = urllib2.urlopen("http://twitter.com/statuses/user_timeline.atom?screen_name=%s&count=%d&page=%d" % (screen_name, count, page)).read()
feed = feedparser.parse(r)
regex = re.compile('http\:\/\/bit.ly\/[0-9a-zA-Z]+')
if feed.entries:
for entry in feed.entries:
bitlyUrl = regex.findall(str(entry.content))
if len(bitlyUrl) > 0:
try:
content = urllib2.urlopen(bitlyUrl[0])
fp.write("%s\t%s\t%d\t%s\n" % (entry.link, content.geturl(), content.code, content.msg))
except urllib2.HTTPError, e:
fp.write("%s\t%s\t%d\t%s\n" % (entry.link, content.geturl(), e.code, e.msg))
except urllib2.URLError, e:
fp.write("%s\t%s\t\t%s\n" % (entry.link, content.geturl(), e))
time.sleep(10)
else:
fp.write("%s\tNoLink\t\t\n" % entry.link)
time.sleep(1)
else:
fp.close()
sys.exit()
page += 1
time.sleep(10)
fp.close()
※ ちなみにTwitter APIの仕様で、3200件以上前のツイートは上記の方法では取得できません。
Pythonはまだまだ勉強中なので、もっとスマートな方法を考えてみたいなぁ・・・。