TwitterAPI에서 특정 키워드가 포함된 트윗 수를 확인합니다.

14315 단어 python3.7TwitterAPI
TwitterAPI를 사용하는 방법을 배우기 위해 키워드로 '코로나'를 포함하는 트윗 수를 조사하기로 결정했습니다.

「코로나」를 포함한 모든 트윗을 취득하고 싶습니다만, TwitterAPI에는 이쪽 링크 와 같이
· 180 요청/15 분, 100 트윗/1 요청의 취득 건수 제한
・과거 7일간 분만이라고 하는 취득 대상 기간의 제한
있습니다.

그 때문에 20분마다 1초간 「코로나」를 포함한 트윗의 취득을 실시했습니다.

기간 지정의 방법은 이쪽의 기사를 참고로 했습니다.
TwitterAPI에서 기간을 지정하여 트윗을 얻는 방법

실행



시도한 코드가 여기입니다.

qiita.py
import urllib
from requests_oauthlib import OAuth1
import requests
import sys
import datetime
import openpyxl


def search_tweets(CK, CKS, AT, ATS, word, count, range):

    # 文字列設定
    word += ' exclude:retweets' # RTは除く
    word = urllib.parse.quote_plus(word)
    # リクエスト
    url = "https://api.twitter.com/1.1/search/tweets.json?lang=ja&q="+word+"&count="+str(count)
    auth = OAuth1(CK, CKS, AT, ATS)
    response = requests.get(url, auth=auth)
    data = response.json()['statuses']
    # 2回目以降のリクエスト
    cnt = 0
    tweets = []
    while True:
        if len(data) == 0:
            break
        cnt += 1
        if cnt > range:
            break
        for tweet in data:
            tweets.append(tweet['text'])
            maxid = int(tweet["id"]) - 1
        url = "https://api.twitter.com/1.1/search/tweets.json?lang=ja&q="+word+"&count="+str(count)+"&max_id="+str(maxid)
        response = requests.get(url, auth=auth)
        try:
            data = response.json()['statuses']
        except KeyError: # リクエスト回数が上限に達した場合のデータのエラー処理
            print('上限まで検索しました')
            break
    return tweets


# APIの秘密鍵
CK = '*************************' # コンシューマーキー
CKS = '*************************************************' # コンシューマーシークレット
AT = '**************************************************' # アクセストークン
ATS = '*************************************************' # アクセストークンシークレット

d=datetime.datetime(2020,7,16,00,00,00)
td=datetime.timedelta(minutes=20)
n=72
f="%Y-%m-%d_%H:%M:%S_"
l=[]
for i in range(n):
    l.append((d+i*td).strftime(f))

dd=datetime.datetime(2020,7,16,00,00,1)
tdd=datetime.timedelta(minutes=20)
nn=72
f="%Y-%m-%d_%H:%M:%S_"
ll=[]
for i in range(nn):
    ll.append((dd+i*tdd).strftime(f))

print(l)
print(ll)
sss=[]
for (i,n) in zip(l,ll):
    word = f'コロナ since:{i}JST until:{n}JST' # 検索ワード
    count = 100 # 一回あたりの検索数(最大100/デフォルトは15)
    range = 5 # 検索回数の上限値(最大180/15分でリセット)
    # ツイート検索・テキストの抽出
    tweets = search_tweets(CK, CKS, AT, ATS, word, count, range)
    # 検索結果を表示

    kk=(str(len(tweets)))
    sss.append(kk)
    print(kk)
    wb=openpyxl.load_workbook("corona.xlsx") #Excelファイルを起動
    ws=wb["Sheet1"]

for (i, j) in enumerate(sss, 1) :
    ws.cell(row=i,column=1,value=int(j))
wb.save('corona.xlsx')'

이 코드에서는 7월 16일에 20분마다 1초간 72회 취득하고, 건수를 "corona.xlsx"에 입력하고 있습니다.
이를 바탕으로 하루의 수를 추정합니다.



2020/7/16~2020/7/22의 일주일간의 트윗은 이렇게 되어, 합계로 3561600건, 하루 평균 50만건이 되는 것을 알았습니다!

좋은 웹페이지 즐겨찾기