部長です。
気まぐれの更新です。
本日は、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ミスってましたごめんなさい。是が正しいです。