python3で100件以上のツイートを取得する
はじめに
前回の記事ではツイートを取得するプログラムを書きましたが、
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が使いたい方はそうすると良い。