初めましての方は初めまして。そうでない方はこんにちは。
W杯ほとんど見たせいで寝不足です。
今回は前回に引き続き、Twitter APIを用いて遊んでみる。
今回の目的は「指定したツイートをリツイートする」である。
環境
- Python3
- Jupyter Notebook
準備
まずはじめに、tweetをリツイートするためのエンドポイント指定URLを探そう。
これは前回、前々回と同様、TwitterのDeveloper用ページから探せば良い。
今回の場合はここ。
POST statuses/retweet/:idにおけるResource InformationとParametersはそれぞれ以下の通り。
特に重要なのはParametersのrequiredのところ。今回はリツイートする対象のtweetのidが必要である。
trim_userは今回必要がないので無視する。
準備はこのくらいにして、早速実装に移ろう。
実装:指定したツイートをリツイートする
メインコードをできるだけ簡潔に書くことが大事らしいので、サーチをする関数やリツイートをする関数は別の.pyにまとめておいた。
それぞれの関数はこんな感じ。
def oauth(ck, cs, at, ats):
twitter = OAuth1Session(ck, cs, at, ats)
return twitter
def search(q, cnt, ck, cs, at, ats):
twitter = oauth(ck, cs, at, ats)
url = 'https://api.twitter.com/1.1/search/tweets.json'
params = {'q' : q, 'count' : cnt}
res = twitter.get(url, params = params)
try:
timelines = json.loads(res.text)
timelines = timelines['statuses']
except:
print(type(json.loads(res.text)))
print('Error')
return timelines
def retweet(tid, ck, cs, at, ats):
twitter = oauth(ck, cs, at, ats)
url = 'https://api.twitter.com/1.1/statuses/retweet/' + tid + '.json'
params = {'id' : tid}
res = twitter.post(url, params = params)
if res.status_code == 200:
print('Success')
else:
print('Failed. : %d'% res.status_code)
1番上の関数は単にOAuth認証するための関数。
2番目はサーチする関数。
3番目は今回初登場のリツイートする関数。必要な引数は先ほど説明した通り、リツイート対象のtweet固有のidである。また、エンドポイントURLの中に、そのidを入れる必要があることに注意する。idはstring型でもってくる。
さて、それでははじめに今回リツイートされる記念すべきtweetを決めよう。
鳥のことばかり紹介するのはどうかと思うので、今回はサッカー関係で。
私はマンチェスターシティ(イングランドのプレミアリーグに所属、以下シティ)の大ファンである。つまりCITYZENだ。
先日シティにスーパースターが移籍することが決まった。そう、マフレズである。彼はアルジェリアの選手、そして前所属はレスターシティであり日本代表の岡崎選手のチームメイトだった。
私はとにかくプレイスタイルがエロいサッカー選手(ダビド・シルバ、エジルやモドリッチなど)が大好きなので、マフレズのようなマジシャンが加入すると聞いた時、それはもう歓喜オブ歓喜だった。
そんな経緯で今回はマフレズの移籍に関するtweetをリツイートしよう。
まず、マフレズ 移籍に関するtweetをサーチしよう。
import json,config
from requests_oauthlib import OAuth1Session
from twitter_function import search, oauth
# 認証処理
ck = config.consumer_key
cs = config.consumer_secret
at = config.access_token
ats = config.access_token_secret
# パラメータ設定
q = 'マフレズ 移籍'
cnt = 5
res = search(q, cnt, ck, cs, at, ats)
# 表示
for line in res:
print(line['user']['name']+'::'+line['text'])
print(line['created_at'])
print('*' * 100)
とりあえず、マフレズ 移籍に関するtweetを5つ表示して、その中からテキトーにリツイートするtweetを決めてみようと思う。
表示されたのはこんな感じ。
名前とURLはモザイクかけさせていただきました。(だったら最初から表示すんな)
なんか1人目と2人目が同じ内容になっているけど、ちゃんと違う人です。運命共同体ですかね、羨ましい。
どれリツイートしてもいいんですけど、今回はW杯で大活躍した本田選手(アンチの方々、元気ですか?)の背番号にちなんで4人目で!
というわけで4番目のtweetをリツイートしよう。
メインコードはこんな感じ。
import json,config
from requests_oauthlib import OAuth1Session
from twitter_function import search, oauth, retweet
# 認証処理
ck = config.consumer_key
cs = config.consumer_secret
at = config.access_token
ats = config.access_token_secret
# サーチ
q = 'マフレズ 移籍'
cnt = 5
res = search(q, cnt, ck, cs, at, ats)
# tweet_idの取り出し
tid = res[3]['id_str'] # 4人目なので[3]、stringで取り出したいので'id_str'
# リツイート
retweet(tid, ck, cs, at, ats)
結果はこんな感じ。
リツイートできてた!
終わりに
Twitter APIを用いたリツイートもできるようになったので、あとはリツイートbotさえ作成すれば当初の目的に近づけるかね。
それと同時に、アクティヴなTwitterアカウントのフォロワー数を増やさなければこの取り組みも意味をなくしてしまうので、そういったマーケティングも考えていかなければなぁと思う。
ありがとうございました。
W杯の次はUEFAネーションズリーグかいな、寝れねえ
追記
8月から運用予定のTwitterアカウント(東京都におけるインコの迷子情報をリツイートします)をフォローしていただけると幸いです。
Twitterで[at]inko_maigo_infoで検索してください。