実現したいこと
tweepyを使って時間指定をして特定のキーワードを含むツイートを全件取得し、CSV形式で出力したい。
また、リツイートを弾き、 botも弾きたいため、URLを含むツイートも除外。
災害関連のツイートを取得したいため、「火事」や「火災」などで何度か試行している。
発生している問題・エラーメッセージ
CSVで出力はできているが、iOS版のtwitterで検索した場合にあるはずのツイートが無かったり、「火事」と検索するとハッシュタグ「#火事」が含まれている「火事」を含むツイートがPython側で検索に引っ掛からなかったりする。
また、ハッシュタグ「#火事」と検索してもまったく検索に引っ掛から無かったりする。
該当のソースコード
TwitterアカウントはElevatedクラスで、Twitter API v1.1を使用しています。
Python
1#ライブラリのインポート 2import tweepy 3from datetime import datetime,timezone 4import pytz 5import pandas as pd 6 7#Twitterの認証 8api_key = "" 9api_secret = "" 10access_key = "" 11access_secret = "" 12auth = tweepy.OAuthHandler(api_key, api_secret) 13auth.set_access_token(access_key, access_secret) 14api = tweepy.API(auth) 15 16#検索条件の設定 17searchkey = '#火災 -filter:retweets -filter:links' 18date_since = "2022-12-07_23:59:59_JST" 19date_until = "2022-12-08_11:29:59_JST" 20 21#検索条件を元にツイートを抽出 22tweets = tweepy.Cursor(api.search_tweets, 23 q=searchkey, 24 lang='ja', 25 since = date_since, 26 until = date_until, 27 ).items() 28 29#関数: UTCをJSTに変換する 30def change_time_JST(u_time): 31 #イギリスのtimezoneを設定するために再定義する 32 utc_time = datetime(u_time.year, u_time.month,u_time.day, \ 33 u_time.hour,u_time.minute,u_time.second, tzinfo=timezone.utc) 34 #タイムゾーンを日本時刻に変換 35 jst_time = utc_time.astimezone(pytz.timezone("Asia/Tokyo")) 36 # 文字列で返す 37 str_time = jst_time.strftime("%Y-%m-%d_%H:%M:%S") 38 return str_time 39 40#抽出したデータから必要な情報を取り出す 41#取得したツイートを一つずつ取り出して必要な情報をtweet_dataに格納する 42tweet_data = [] 43data_number = 0 44for tweet in tweets: 45 #ツイート時刻とユーザのアカウント作成時刻を日本時刻にする 46 data_number += 1 47 tweet_time = change_time_JST(tweet.created_at) 48 create_account_time = change_time_JST(tweet.user.created_at) 49 #tweet_dataの配列に取得したい情報を入れていく 50 tweet_data.append([ 51 data_number, 52 tweet.id, 53 tweet_time, 54 tweet.text, 55 tweet.favorite_count, 56 tweet.retweet_count, 57 tweet.user.screen_name, 58 tweet.user.name, 59 ]) 60 61#取り出したデータをpandasのDataFrameに変換 62#CSVファイルに出力するときの列の名前を定義 63labels=[ 64 'No.', 65 'ツイートID', 66 'ツイート時刻', 67 'ツイート内容', 68 'いいね数', 69 'リツイート数', 70 'ユーザID', 71 'アカウント名', 72 ] 73#tweet_dataのリストをpandasのDataFrameに変換 74df = pd.DataFrame(tweet_data,columns=labels) 75 76#CSVファイルに出力する 77#CSVファイルの名前を決める 78file_name='' 79#CSVファイルを出力する 80df.to_csv(file_name,encoding='utf-8-sig',index=False)
試したこと
制限があったりするので時間を空けつつ色々検索ワードを変えて試してみているが特に進展はなく、むしろひっかからないツイートが多い。
プログラミングがあまり得意ではないので分かりやすく教えてもらえると幸いです。
よろしくお願いします。

回答2件
あなたの回答
tips
プレビュー