Help us understand the problem. What is going on with this article?

素人が今更Twitter APIで遊ぶ 〜その3:リツイート、マフレズようこそ編〜

More than 1 year has passed since last update.

初めましての方は初めまして。そうでない方はこんにちは。

W杯ほとんど見たせいで寝不足です。

今回は前回に引き続き、Twitter APIを用いて遊んでみる。

今回の目的は「指定したツイートをリツイートする」である。

環境

  • Python3
  • Jupyter Notebook

準備

まずはじめに、tweetをリツイートするためのエンドポイント指定URLを探そう。
これは前回、前々回と同様、TwitterのDeveloper用ページから探せば良い。
今回の場合はここ

POST statuses/retweet/:idにおけるResource InformationとParametersはそれぞれ以下の通り。

Resource Information
スクリーンショット 2018-07-19 18.48.56.png

Parameters
スクリーンショット 2018-07-19 18.49.10.png

特に重要なのはParametersのrequiredのところ。今回はリツイートする対象のtweetのidが必要である。
trim_userは今回必要がないので無視する。

準備はこのくらいにして、早速実装に移ろう。

実装:指定したツイートをリツイートする

メインコードをできるだけ簡潔に書くことが大事らしいので、サーチをする関数やリツイートをする関数は別の.pyにまとめておいた。
それぞれの関数はこんな感じ。

twitter_function.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をサーチしよう。

search.py
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を決めてみようと思う。
表示されたのはこんな感じ。

写真 2018-07-19 19 23 41.png

名前とURLはモザイクかけさせていただきました。(だったら最初から表示すんな)
なんか1人目と2人目が同じ内容になっているけど、ちゃんと違う人です。運命共同体ですかね、羨ましい。
どれリツイートしてもいいんですけど、今回はW杯で大活躍した本田選手(アンチの方々、元気ですか?)の背番号にちなんで4人目で!

というわけで4番目のtweetをリツイートしよう。
メインコードはこんな感じ。

main.py
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)

結果はこんな感じ。

スクリーンショット 2018-07-19 19.36.25.png

あ.png

リツイートできてた!

終わりに

Twitter APIを用いたリツイートもできるようになったので、あとはリツイートbotさえ作成すれば当初の目的に近づけるかね。

それと同時に、アクティヴなTwitterアカウントのフォロワー数を増やさなければこの取り組みも意味をなくしてしまうので、そういったマーケティングも考えていかなければなぁと思う。

ありがとうございました。

W杯の次はUEFAネーションズリーグかいな、寝れねえ

追記

8月から運用予定のTwitterアカウント(東京都におけるインコの迷子情報をリツイートします)をフォローしていただけると幸いです。
Twitterで[at]inko_maigo_infoで検索してください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした