tweepyを使ってみた

部長です。

気まぐれの更新です。

本日は、Pythonのライブラリのひとつ「tweepy」を使って、
ちょっと、Botを改造しようってなりました。

とりあえず、今まで稼動していたやつは、
twitter(python-twitterとは違うみたい)」を利用していたので、
別のファイルに書きました。

本日したことは、
「数学問題Botのツイートがあれば、リツイートする機能」を、
「3時間に1回、23分の時に発動する」ことです。

1.OAuth認証

まずは、OAuth認証の部分。

#! /usr/local/bin/python
# -*- coding: utf-8 -*-
import tweepy
def authentication():
consumer_key = #きーいれる
consumer_secret = #きーいれる
access_key = #きーいれる
access_secret = #きーいれる
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
return tweepy.API(auth_handler = auth)
api = authentication()

ここまでは、うまくいきました。

ちなみに、「consumer_*」のキーをミスると、

tweepy.error.TweepError: Could not authenticate with OAuth.

「access_*」のキーをしくじると、

tweepy.error.TweepError: Invalid / expired Token

なんて出てきました。

2.とりあえずツイート

じゃあツイートさせて確認を取りましょうってことで、
一番下に、以下を追記。

def tweet(tweet_str):
api.update_status(tweet_str.decode("utf8"))
tweet("hoge")

Bot は hoge とほざきました。
ということで、日本語もツイートして欲しいので、

tweet("ほげ")

なんて書くと、ほげとほざくでしょう。

ここで、ひとつ悲しい事件がありました。

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

の部分を

# -*- coding : utf-8 -*-
# (codingのあとに空白がある)

とかいてしまうと、

SyntaxError: Non-ASCII character '\xe3' in file wt_math_retweet.py on line (日本語が含まれる行), but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

とか言われて、tweetどころの騒ぎでは無くなってしまいます。

このエラーは完全に文字コードの何かで、
‘\xe3’はASCIIコードじゃないよとか言ってる気がします。

3.リツイート機能

確認が済んだので、リツイートの機能にやっと入ります。
以下を一番下に追加。

i = 0
for tl_elm in api.friends_timeline():
if tl_elm.user.screen_name == "mathematics_bot":
tl_elm.retweet()
break
i += 1
if i > 10:
break
friends_timeline()

でフォローしてる人のタイムラインが、
取得できました。(フォローしてる人であってるのかな?)

そこから、ひとつづつツイートを見ていって、
数学問題Botのツイートがあれば、

tl_elm.retweet()

でリツイートします。

一応、毎回リツイートするつもりはなかったので、
10ツイート見て、数学問題Botがいなければ、breakしてます。

4.3時間に1回実行

今回は(というか今回も)、VPSの方で cron を設定しました。
ちなみに、月額980円のさくらのVPSを借りており、OSはFreeBSDが入ってます。

設定方法は、まず

$ crontab -e

と、コンソールに入力すると、設定ファイルが開かれるはずです。

3時間に1回、23分の時に実行するので、

23 0-23/3 * * * /usr/local/bin/python src.py

今までのソースは、src.pyに書いてあったとしています。*1

なんで、pythonが絶対参照かというと、
そうしないと、うまくpythonを発見してくれなかったからです。

5.雑記

といった感じで、
「数学問題Botのツイートがあれば、リツイートする機能」を、
「3時間に1回、23分の時に発動する」ことが実現されました。

実際に動いているBotはお見せすることができるような、
立派なものではないので、ご容赦ください。

こう纏めている間も、もっとやり方あっただろうとか思ったり、
知らないことがあったりと、勉強不足が明らかになりました。

また、きまぐれで更新するであろう、部長でした。

*1:pythonのpathミスってましたごめんなさい。是が正しいです。