in my 雑記

プログラミング bump 日々のことなど

python3で100件以上のツイートを取得する

f:id:inmyzakki:20170902164248p:plain

はじめに

前回の記事ではツイートを取得するプログラムを書きましたが、
twitterApiでは一回で100件までしか、取得できません。
今回はより実践的に該当するツイートをAPIの制限が許す限り表示します。
また、よく使う検索パラメータの紹介をします。

改良したプログラム

下が100件以上取得できるように対応したプログラムです。 「任天堂 switch」または「任天堂 スイッチ」のツイートを取得します。

# -*- coding: utf-8 -*-
from requests_oauthlib import OAuth1Session, OAuth1
import json
import requests
import urllib
import sys
import io

#検索文字列設定
word = "任天堂 AND switch OR スイッチ"
# デフォルト文字コードをutf8に変更
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

#apiキー情報設定
consumer_key = "キー情報"
consumer_key_secret = "キー情報"
access_token = "キー情報"
access_token_secret = "キー情報"

#twitterAPIアクセス
url = "https://api.twitter.com/1.1/search/tweets.json?count=100&lang=ja&q=" + word
auth = OAuth1(consumer_key, consumer_key_secret, access_token, access_token_secret)
response = requests.get(url, auth = auth)
data = response.json()['statuses']

#データ表示
cnt = 0
while True:
    for tweet in data:
        print("------------------------------------------------------------------")
        print(tweet["id"])#ツイートID
        print(tweet["text"])#ツイート内容
        print(tweet["created_at"])#ツイート日時
        cnt += 1
        maxid = int(tweet["id"]) - 1

    #ツイートがない場合ループ終了
    if len(data) == 0:
        break

    url = "https://api.twitter.com/1.1/search/tweets.json?count=100&lang=ja&q=" + word + "&max_id=" + str(maxid)
    auth = OAuth1(consumer_key, consumer_key_secret, access_token, access_token_secret)
    response = requests.get(url, auth = auth)
    data = response.json()['statuses']

print("ツイート数:" + str(cnt))

検索パラメータ

urlにパラメータを追加することで検索条件を変更することができます。 使いそうなパラメータを紹介します。

パラメータ 説明
from userId 指定したユーザーのみ取得
to userId 宛先指定したユーザーのみ取得
since YYYY-MM-DD 指定した日付以降のみ取得
until YYYY-MM-DD 指定した日付以前のみ取得
include retweets リツイートを含むツイートを取得
exclude retweets リツイートを含まないツイートを取得
near 東京 東京付近でのツイートを取得
filter images or videos リツイートに画像や動画があるツイートを取得
min_retweets 数値 リツイートが数値以上のツイートを取得

おわり

とりあえず、このプログラムで私の要件は満たせるが、
twitterでビッグデータ解析等を行う際は、これではAPIの制限で大量のツイートは取得できない。
twitterアプリケーションのアカウントを複数作ることによって、
制限解除を待たずにエンドレスにツイートを取得できるようなので、もっとAPIが使いたい方はそうすると良い。

.entry-content { font-size:20px; }