事象発生日:2017-08-04
記事公開日:-
アクセス数:6849
毎日334を,そして平日は0655,2355をツイートしようと試みているのだが,いい加減面倒くさくなってきた.そこで自動化.
Pythonのライブラリが優秀だったので,簡単に自動化できた.
トップ画像の出典はこちら.
Ubuntu Server 16.04.2 LTS
Python 2.7.12
Twitter APIを使用するには,
設定とプライバシー > モバイル > 携帯の電話番号
より携帯電話番号を登録する必要がある.
ここではまったのだが,
+81 080********
だと登録できない.
+81 80********
とするといける.
国際電話のかけ方と同じだった....
Application Management (https://apps.twitter.com) にアクセス. | |
Create New Appを押す. | |
もろもろを入力.例えば下のよう. |
Create an application Application Details Name * [溶けかけてるうさぎ] Your application name. This is used to attribute the source of a tweet and in user-facing authorization screens. 32 characters max. Description * [溶けかけてるうさぎ BOT] Your application description, which will be shown in user-facing authorization screens. Between 10 and 200 characters max. Website * [http://hogehoge.hoge.jp] Your application's publicly accessible home page, where users can go to download, make use of, or find out more information about your application. This fully-qualified URL is used in the source attribution for tweets created by your application and will be shown in user-facing authorization screens. (If you don't have a URL yet, just put a placeholder here but remember to change it later.) Callback URL [ ] Where should we return after successfully authenticating? OAuth 1.0a applications should explicitly specify their oauth_callback URL on the request token step, regardless of the value given here. To restrict your application from using callbacks, leave this field blank. Developer Agreement [check] Yes, I have read and agree to the Twitter Developer Agreement.
Keys and Access Token > Your Access Token > Create Access Tokenより,Consumer Key (API Key) Consumer Secret (API Secret) Access Token Access Token Secret が取得できる. |
Twitterに携帯電話番号を登録するのもあれなので,API keyもゲットできたことだし,即刻削除.
下のよう適当にインストールした.
# 入ってないならpipのインストール $ sudo apt-get install python-pip # 必要なライブラリをインストール $ pip install requests requests_oauthlib # sudo付けるの忘れた.... # これだと,インストールしたユーザーでしか使えない.インストールディレクトリが違うっぽい. $ pip uninstall requests requests_oauthlib $ sudo pip install requests requests_oauthlib # 後述するPythonスクリプトを他ユーザーから実行すると, # ImportError: No module named oauthlib.common # のエラー. # 必要か不明だが一応以下もインストール. $ sudo pip install oauthlib # Ubuntuを再起動したらエラーがとれた.
引数をツイートするPythonスクリプトを書いた.
改行に対応させ,エラーログを吐くことにした.
# coding: UTF-8 import sys import os from requests_oauthlib import OAuth1Session import json CONSUMER_KEY = '*************************' CONSUMER_SECRET = '**************************************************' ACCESS_TOKEN = '**************************************************' ACCESS_TOKEN_SECRET = '*********************************************' LOG_FILE = '${path}/log.log' def main(args): # 引数取得 tweetStr = args[1] # 改行を生成 tweetStr = tweetStr.replace('\\n', '\n') twitter = OAuth1Session(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET) # ツイート params = {"status": tweetStr} req = twitter.post("https://api.twitter.com/1.1/statuses/update.json", params = params) # エラーならエラーログ出力 if (str(req) != "<Response [200]>"): # 追記モードで出力 f = open(LOG_FILE, "a") try: f.write(GetStringTime()+"\t"+str(req)+"\n") finally: f.close() # 一応コンソールにも出力 ps(tweetStr) ps("\n") ps(req) ps("\n") ps("\n") def ps(output): sys.stdout.write(str(output)) sys.stdout.flush() def GetStringTime(): import datetime import locale d = datetime.datetime.today() stringTime = str(d.year) stringTime += '.' stringTime += '{0:02d}'.format(d.month) stringTime += '.' stringTime += '{0:02d}'.format(d.day) stringTime += '-' stringTime += '{0:02d}'.format(d.hour) stringTime += '.' stringTime += '{0:02d}'.format(d.minute) stringTime += '.' stringTime += '{0:02d}'.format(d.second) stringTime += '.' stringTime += '{0:02d}'.format(d.microsecond / 10000) return stringTime if __name__ == '__main__': main(sys.argv)
今回は訳あってソースコード編集ユーザーと実行ユーザーが違ったので,適当にパーミッションを変更.
$ sudo chmod 767 tweet.py
実行例を次に示す.
引数に \\n
を挟むと改行される.
$ python ${path}/tweet.py "一行目\\n二行目"
まあ,適当に.
# バックアップは重要 $ crontab -l > ~/crontab.backup $ crontab -e # 以下を追記 34 3 * * * python ${path}/tweet.py "334\\n[bot]" > /dev/null 2>&1 55 23 * * 1,2,3,4,5 python ${path}/tweet.py "2355\\n[bot]" > /dev/null 2>&1 55 06 * * 1,2,3,4,5 python ${path}/tweet.py "0655\\n[bot]" > /dev/null 2>&1
この方法でTL取得できるので,暇になったら自動ツイ消しツイート収集Botでも作りたい(って3年前から言ってる.)
「」で登録したWebsiteは一般には公開されないと思っていた.
しかしながら,TweetDeckを使っている場合,そのviaがここで登録したWebsiteへのリンクとなっていた.
適当なURLを入力する際は注意が必要そうだ.
名前
Email (※公開されることはありません)
コメント