0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【2022年 Twitter API】v2のBearer Tokenでツイートを収集するシンプルなスクリプト

Last updated at Posted at 2022-04-24

Twitter API v2を利用してツイートを収集したい方向けに、
とりあえずサクッと試せるシンプルなコードを紹介します。

Twitter APIの種類についてはこちらの記事をご参照ください。

この記事の想定読者

  • Twitter API(v2)を利用したツイート収集を試してみたい
  • Pythonユーザー

筆者の環境

import platform
print(platform.platform())
# macOS-12.2.1-x86_64-i386-64bit
print(platform.python_version())
# 3.10.2

Visual Studio Codeのインタラクティブウインドウを利用しています。

結論: 今回のコード全文

まず今回使うコードの全文を記載します。1

詳細はこの後説明します。

simple_get_tweets.py
import json
from typing import NamedTuple

import urllib3

URL = 'https://api.twitter.com/2/tweets/search/recent'
KEY = 'AAAAAAAAAAAAAAAAAAAAA***'
# ご自分のBEARER TOKENを入力してください

class RequestItems(NamedTuple):
    http: urllib3.PoolManager
    key: str
    params: dict


def request_tweets(ritems: RequestItems):
    headers = {'Authorization': 'Bearer '+ ritems.key}
    return ritems.http.request('GET', URL, fields=ritems.params, headers=headers)


def simple_get_tweets(ritems: RequestItems):
    res = request_tweets(ritems)
    return res


http = urllib3.PoolManager()

params = {
        'query':'ゴールデンカムイ -is:retweet',
        'max_results':10,
        }

ritems = RequestItems(http, KEY, params)

res = simple_get_tweets(ritems)

print(res.status)
# 200
print(res.reason)
# OK
print(res.headers)
# HTTPHeaderDict({'date': 'Sun, 24 Apr 2022 …(略)})
print(json.loads(res.data))
# id等は適当に***でマスキングしてます
# {'data': [{'id': '151817293***', 'text': 'ゴールデンカムイでなんか胸毛をむしるらしいから読んでみたいんですよ!!!!!!!!!'}, {'id': …(略)}],
# 'meta': {'newest_id': '15181729311***', 'oldest_id': '151817270348811***', 'result_count': 10, 'next_token': 'b26v89c19zqg8o3fpy***'}}

前準備

Twitter APIのBEARER TOKENを取得する

まだTwitter API v2の利用をしたことがない方は、以下のページが参考になると思います。

urllib3のインストール

urllib3というライブラリをpip等でインストールしてください。

コードの実行

関数定義パート

引数をrequest_tweets()に渡しやすいようにネームドタプルを使っています。

simple_get_tweets.py
import json
from typing import NamedTuple

import urllib3

URL = 'https://api.twitter.com/2/tweets/search/recent'
KEY = 'AAAAAAAAAAAAAAAAAAAAA***'
# ご自分のBEARER TOKENを入力してください

class RequestItems(NamedTuple):
    http: urllib3.PoolManager
    key: str
    params: dict


def request_tweets(ritems: RequestItems):
    headers = {'Authorization': 'Bearer '+ ritems.key}
    return ritems.http.request('GET', URL, fields=ritems.params, headers=headers)


def simple_get_tweets(ritems: RequestItems):
    res = request_tweets(ritems)
    return res

実行パート

ツイート検索(収集)用のパラメータを適当にセットして実行します。
-is:retweetで単純なリツイートのツイートを除外しています。

Jupyterなどの対話的環境であれば、
resの中身をいろいろと観察してみると面白いかもしれません。

statusが200の場合は成功ですが、それ以外の場合はツイート取得に失敗しています。
失敗した理由を調べるには、res.reasonなどが参考になります。

ツイートのデータ本体はres.dataの中にあります。
日本語で読みたい場合にはjson.loads(res.data)を使うとよいでしょう。

simple_get_tweets.py

http = urllib3.PoolManager()

params = {
        'query':'ゴールデンカムイ -is:retweet',
        'max_results':10,
        }

ritems = RequestItems(http, KEY, params)

res = simple_get_tweets(ritems)

print(res.status)
# 200
print(res.reason)
# OK
print(res.headers)
# HTTPHeaderDict({'date': 'Sun, 24 Apr 2022 …(略)})
print(json.loads(res.data))
# id等は適当に***でマスキングしてます
# {'data': [{'id': '151817293***', 'text': 'ゴールデンカムイでなんか胸毛をむしるらしいから読んでみたいんですよ!!!!!!!!!'}, {'id': …(略)}],
# 'meta': {'newest_id': '15181729311***', 'oldest_id': '151817270348811***', 'result_count': 10, 'next_token': 'b26v89c19zqg8o3fpy***'}}

まとめ

  • Twitter API v2でBEARER TOKENを使ったツイート収集ができた!

今後の展開

この記事ではツイート収集のシンプルなやり方について説明しました。

次回以降(の記事を書くことがあれば)、この関数を利用して、
より多くのツイートを収集するコードを紹介します。2

next_tokenをうまく利用することが鍵になります。

  1. 検索クエリが"ゴールデンカムイ"なのは筆者の趣味です。

  2. 次回以降の記事を書かないかもしれません。筆者のやる気によります。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?