事象発生日:2017-08-04
記事公開日:-
アクセス数:7445
毎日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 TokenAccess 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 (※公開されることはありません)
コメント