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

素人が今更Twitter APIで遊ぶ 〜その2:サーチ編〜

More than 1 year has passed since last update.

初めましての方は初めまして。そうでない方はこんにちは。
今回は前回に引き続き、Twitter APIを用いて遊んでみる。

今回の目的は「インコの迷子情報に関するtweetをサーチする」である。

環境

  • Python3
  • Jupyter Notebook

準備

まずはじめに、tweetをサーチするためのエンドポイント指定URLを探そう。
これは前回と同様、TwitterのDeveloper用ページから探せば良い。
Standard Search APIのAPI referenceに書いてある。

このStandard Search APIにおけるResponse Informationは以下の通り。

スクリーンショット 2018-07-02 22.59.51.png

これを見ると、responseのフォーマットは前回同様JSONであり、Requestは15分あたり180回までという制約があることがわかる。

次にパラメータについて見てみる。今回Requiredなものはqだけ。

スクリーンショット 2018-07-02 23.05.17.png

qはサーチする際のクエリである。サーチをしようというのだからクエリがRequiredなのは当たり前だね。
また、Optionalなものは数多くあり、count(取得するtweet数)の他にgeocode(latitude,longitude,radiusを指定すれば、サーチをするtweetのlocationが決められる)やlang(言語)などがある。
今回はcountのみを使用する。

これで準備が完了したので本題に入る。

tweetをサーチする

以下のコードを走らせれば、インコの迷子情報を含むtweetをサーチすることができる。

Search_tweet.ipynb
import json,config
from requests_oauthlib import OAuth1Session


ck = config.consumer_key
cs = config.consumer_secret
at = config.access_token
ats = config.access_token_secret

twitter = OAuth1Session(ck, cs, at, ats) #OAuth認証処理

url = 'https://api.twitter.com/1.1/search/tweets.json' #tweetサーチのエンドポイント指定

params = {'q' : 'インコ 迷子', 'count' : 1} #パラメータ指定

res = twitter.get(url, params = params)

try:
    timelines = json.loads(res.text)
    timelines = timelines['statuses'][0]
    print('Success')
    print('*************************************************')
    print(timelines['user']['name'] + ':' + timelines['text'])
    print(timelines['created_at'])

except:
    print(type(json.loads(res.text)))
    print('Error')

結果はこんな感じ

スクリーンショット 2018-07-02 23.21.48.png

できたあ。

Responseを取得するところまでは、前回とほとんど同じなため説明を割愛する。
try-except文以降について以下で説明する。
そもそもtry-except文とは、Exceptionが発生した時に例外処理を行うことができるという構文だ。
使い方は

try-except
try:
    #Exceptionが発生する可能性はあるが、実行したい処理

except エラー名:
    #Exceptionが発生した際に実行したい処理

こんな感じ。便利だねえ。

try-except文を使用した理由は、res.textのデータ型が前回と少し異なり、謎の挙動を示すからだ。
res.text自体はdictなのだが、その下のres.text['statuses']はなぜかlist。さらにその下のres.text['statuses'][0]はdict。
これだけでも腹立つが、サーチ100回に1回程度データ型に関するエラーが発生する。
このように謎の挙動されるのが面倒であり、その原因のデータ型を探りたいため(重力波Detection魂が燃える)、try-except文を用いた。
原因はいまだに特定できていないため、誰か知ってる人教えてくださいお願いします。

まあなんにせよ無事にインコの迷子情報に関するtweetをサーチすることができたのでよしとしよう。

終わりに

今回でインコの迷子情報に関するtweetをサーチすることができたので、次回以降はこの情報を活用した何かを考えていきたいと思う。
インコ救いてえな。マジで。

余談だが、ドイツとスペインが敗退した。クロアチア3位が最も現実的かな。

https://qiita.com/masahiro_isono/items/ad5d36483f27ff4bcb95

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

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
ユーザーは見つかりませんでした