歩いたら休め

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

【Twitter】@kayourock に自動リンク切れチェック機能を実装しました

@kayourockのクライアントをeasybotterからpythonの自作プログラムに移行しました。ついでにリンク切れしたYoutubeのURLを除く機能を実装してみました。

Pythontwitterを扱うライブラリはたくさんありますが、python-twitterを利用しています。

 

同じディレクトリにアカウント情報を記述したsecret.pyと、ツイート内容を記述したdata.txtというファイルを用意する必要があります。

data.txtには、次のように一行ずつツイート内容を記述します。改行コードなど、詳しくはeasybotterのサイトを参考にするといい気がします。

EasyBotter - プログラミングができなくても作れるTwitter botの作り方

0.8秒と衝撃。「21世紀の自殺者」 http://youtu.be/ru4xoKsm9lo #kayourock
0.8秒と衝撃。「POSTMAN JOHN」 http://youtu.be/dHRMezlbmiE #kayourock
0.8秒と衝撃。「町蔵・町子・破壊」 http://youtu.be/0NQUAHcecRU #kayourock
13*SQUAD「陽炎」 http://youtu.be/TAHY2-2VwhA #kayourock

 

python-twitterの使い方はここを参考。
python-twitterの使い方(1) - 忘れないようにメモっとく

botアカウントのクライアント情報を記述した secret.py を用意します。Read-onlyではなく、ツイートできる権限が必要です。詳しくは以下のサイトで。

python-twitterを使ってTwitterBot開発 - お首が長いのよ

 

youtubeのリンク切れチェックは、サムネイル画像のAPIを利用しています。

【Python】YouTubeのURLリストのリンク切れをチェックするためのコード - 歩いたら休め

# -*- coding: utf-8 -*-

import twitter
import urllib
import random
import secret

api = twitter.Api(
    consumer_key = secret.twDict['consumer_key'],
    consumer_secret = secret.twDict['consumer_secret'],
    access_token_key = secret.twDict['access_token_key'],
    access_token_secret = secret.twDict['access_token_secret']
)

f = open('data.txt')
data1 = f.read()
f.close()

datas1 = data1.split('\n')
random.shuffle(datas1) #ランダムに並び替え(1個目をツイート)

for data in datas1: #リンク切れしていないURLまでループ、breakを忘れると全ツイートするハメに
	data_split = data.split("http://")[1]
	is_youtube = data_split.startswith("youtu.be")
	if is_youtube:
		pic_api = data_split.replace("youtu.be/",
			"http://gdata.youtube.com/feeds/api/videos/")
		f = urllib.urlopen(pic_api)
		url_open = f.read()
		
		if url_open.startswith("""<?xml version='1.0'"""):
			api.PostUpdate(data)
			break
	else:
		api.PostUpdate(data)
		break

ちなみにbreak文を忘れるとdata.txtの内容をすべてツイートすることになるので、大変なことになります。気をつけましょう。

@dempa_botにも同じような機能を実装したいと考えていますが、ニコニコ動画でも同様にリンク切れをチェックする方法を探しています。