とあるツイートにインスパイアされて、Flickrから写真を取得してTwitterに投稿するBOTを作ってみました(ネコ、イヌ、ペンギン、ウサギ、ハムスター、赤ちゃん、とリスト)。
TwitterのBOTくらいなら簡単に作成できる…と思っていたのですが、先日のBASIC認証廃止で、OAuthによる認証が必須となり、簡単なBOTでも結構ややこしい手順をふむ必要が出てきました。
そこで、少しでも楽をするために、今回はPythonを使って構築しています。
適当なライブラリを活用することで、認証の処理がかなり容易になります。
以下、一連の作業と作成したソースコードの記録です。
BOTアカウントの登録
なにはともあれ、BOT用のアカウントを登録します。
こちらのページから、通常通りアカウントを作成します。
後々、このアカウントに紐づいたアクセストークンが必要となります。
登録を終えたら通常通りログオンし、Bio等をセッティングします。
アプリケーションの登録
次に、BOT用アカウントでログインした状態で http://dev.twitter.com/ へアクセスします。
この画面から、新しく作成するBOTをアプリケーションとして登録します。
右上の “Your apps” をクリックします。
既に登録しているアプリケーションの一覧が表示されます。
何も登録していない場合は、登録画面へのリンクだけが表示されるはずです。
新しく登録する場合は、右の “Register a new app” をクリックします。
基本的に、入力項目はすべて入力する必要があります。
BOT用アプリケーション登録の際のポイントは、 “Application Type” を “Client” に変更することと、 “Default Access type” を “Read & Write” に変更すること。
ちなみに、 “Callback URL” の入力欄は、 “Application Type” を “Client” に変更すると消えます。
登録が完了すると、このような画面に移ります。
この画面で必要な情報は、 “OAuth 1.0a Settings” の “Consumer key” と “Consumer secret” の2つ。
これらの情報が、このBOTを更新するためのアプリケーションである、ということを証明するのに使われるものです。
これらの情報を記録します。
次に、画面の上に戻って “My Access Token” をクリックします。
すると、このように “Access Token (oauth_token)” と “Access Token Secret (oauth_token_secret)” の情報が表示されます。
これは、このアプリケーションの作成者(=BOTアカウント)の認証に使われる情報です。
先の “Consumer key” 、 “Consumer secret” とあわせて、初めてBOTを更新するためのアプリケーションで、BOTアカウントのツイートを更新できるようになります。
“Access Token (oauth_token)” と “Access Token Secret (oauth_token_secret)” の情報も記録しておきます。
これで、BOTに必要な “Consumer key”、 “Consumer secret”、”Access Token (oauth_token)”、 “Access Token Secret (oauth_token_secret)” という4つの鍵が手に入りました。
スクリプトの作成
上述のように、今回BOTを更新するアプリケーションは、Pythonによるスクリプトを作成しました。
PythonでのTwitterの操作は tweepy というライブラリを利用しています。
また、Flickrからの写真の取得は、Flickrのタグをキーに写真を検索してRSSを作成してくれる Flickr RSS Feed Generator というサービスを利用し、この結果取得したRSSを feedparser というライブラリを使ってパースしています。
更に、 今回はFlickrの写真をツイートするということで、 flickrapi.shorturl というライブラリでURLを短縮しています。
各ライブラリのインストールは環境により異なるので、他を参照いただきたいのですが、このBlogを置いているCoreserverやXREAの場合は基本的に次のような手順でインストールできると思います。
- 管理画面からホスト情報を登録する。
- SSHでサーバへアクセスする。
- 次の環境変数を設定しておく。
- 各ソースコードをダウンロードし、以下のコマンドでインストール先を指定してインストールする。
$ export PYTHONPATH=$HOME/lib/python2.4:$HOME/lib/python2.4/site-packages
$ python setup.py install --prefix=~/
次に、実際にBOTを更新するスクリプトのソースコードです。ここで、”Consumer key”, “Consumer secret”, “Access Token (oauth_token)”, “Access Token Secret (oauth_token_secret)”にはそれぞれ植えで入手した情報を入れて下さい。
#!/usr/local/bin/python # -*- coding: utf-8 -*- import string import random import feedparser import tweepy import flickrapi.shorturl CONSUMER_KEY = 'Consumer key' CONSUMER_SECRET = 'Consumer secret' ACCESS_TOKEN = 'Access Token (oauth_token)' ACCESS_TOKEN_SECRET = 'Access Token Secret (oauth_token_secret)' num = 100 # 100枚の写真から1枚選ぶ tag = 'cat+kitty+kitten' # 検索するタグを + で繋げる id = random.randint(0, num) if random.randrange(0, 10, 1) > 5: sort = 'interestingness-desc' else: sort = 'date-posted-desc' url = 'http://www.degraeve.com/flickr-rss/rss.php?tags=' + tag + '&tagmode=any&sort=' + sort + '&num=' + str(num) data = feedparser.parse(url) prefix = u'ミ^・.・^彡' title = data['entries'][id]['title'] link = data['entries'][id]['link'] link = flickrapi.shorturl.url(link[link.rfind(u'/')+1:]) if len(title) + len(link) + len(prefix) > 110: title = title[0:110 - len(link) - len(prefix)] + '...' tweet = prefix + ' ' + title + ' ' + link # ここからTwitter auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) api = tweepy.API(auth) api.update_status(tweet)
最後に、このスクリプトをcronで動かすためのshスクリプトを作成します。ここで、上のPythonスクリプトは /virtual/user/bin/nyancopot.py に保存されているものとします。
#!/bin/sh export PYTHONPATH=$HOME/lib/python2.4:$HOME/lib/python2.4/site-packages export LD_LIBRALY=$HOME/lib /usr/local/bin/python /virtual/user/bin/nyancopot.py
あとは、このshスクリプトをcronに登録すれば完了です。
指定された時間にBOTがつぶやきます。