質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

pythonでTwitterのツイートを期間指定して収集したい

Lia
Lia

総合スコア9

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0グッド

0クリップ

457閲覧

投稿2022/10/22 06:04

編集2022/10/22 06:50

前提

研究でpythonでTwitterのツイートを収集しようとしています。
※TwitterAPIを使用し、tweepyにてコードを書いています。
使用しているOSやツールは以下の通りです。
Windows11
jupyter notebook (python)

実現したいこと

期間を指定してツイートを取得したいと思っています。
since = "2017-08-26_00:00:00_JST"
until = "2017-08-30_00:00:00_JST"
と指定すればいいとネットに書いてあったのですが変数を指定した後がわかりません。

※参考サイト
期間指定をしていたのはこちらの2人しかいなかったので自分のコードで応用するのは難しく、できませんでした。
https://vatchlog.com/tweepy-search-time/
https://qiita.com/areph/items/0745cb744a12810334c6

コード全般の参考サイトはこちらです
https://python-man.club/python_twitter_api_tweet/

発生している問題

sinceとuntilを指定した後、tweepy.Cursor()のかぎかっこにどのように入れればいいのかがいまいちわかりません。そもそもここに入れるかすら分からないのでアドバイスよろしくお願いします。
以下がコードとなっています。ここでは例として君の名は(kiminona_movie)のアカウントのツイートを収集しました。

該当のソースコード

python

1import tweepy 2import pandas as pd 3import csv 4import time 5from datetime import datetime,timezone 6import pytz 7 8 9#各種ツイッターのキーをセット 10consumer_key = '' 11consumer_secret = '' 12access_key = '' 13access_secret = '' 14 15auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 16auth.set_access_token(access_key, access_secret) 17api = tweepy.API(auth) 18 19 20#since = "2017-08-26_00:00:00_JST" 21#until = "2017-08-30_23:59:59_JST" 22 23 24tweets = tweepy.Cursor(api.user_timeline, screen_name = "kiminona_movie", exclude_replies = True).items() 25 26 27#関数: UTCをJSTに変換する 28def change_time_JST(u_time): 29 #イギリスのtimezoneを設定するために再定義する 30 utc_time = datetime(u_time.year, u_time.month,u_time.day, \ 31 u_time.hour,u_time.minute,u_time.second, tzinfo=timezone.utc) 32 33 #タイムゾーンを日本時刻に変換 34 jst_time = utc_time.astimezone(pytz.timezone("Asia/Tokyo")) 35 36 #文字列で返す 37 str_time = jst_time.strftime("%Y-%m-%d_%H:%M:%S") 38 return str_time 39 40 41#ツイート取得 42tweet_data = [] 43 44 45for tweet in tweets: 46 #ツイート時刻とユーザのアカウント作成時刻を日本時刻にする 47 tweet_time = change_time_JST(tweet.created_at) 48 create_account_time = change_time_JST(tweet.user.created_at) 49 50 #tweet_dataの配列に取得したい情報を入れていく 51 tweet_data.append([ 52 tweet.id, 53 tweet_time, 54 tweet.text, 55 tweet.favorite_count, 56 tweet.retweet_count, 57 tweet.user.name, 58 tweet.user.friends_count, 59 tweet.user.followers_count, 60 create_account_time, 61 ]) 62 63 64labels=[ 65 'ツイートID', 66 'ツイート時刻', 67 'ツイート本文', 68 'いいね数', 69 'リツイート数', 70 'アカウント名', 71 'フォロー数', 72 'フォロワー数', 73 'アカウント作成日時' 74 ] 75 76#tw_dataのリストをpandasのDataFrameに変換 77df = pd.DataFrame(tweet_data,columns=labels) 78 79#CSVファイルに出力する 80#CSVファイルの名前を決める 81file_name='kiminonaha.csv' 82 83#CSVファイルを出力する 84df.to_csv(file_name,encoding='utf-8-sig',index=False)

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

PondVillege

2022/10/22 08:23

tweepyのバージョンは幾つですか?4.0からAPI.searchはAPI.search_tweetsに名前が変更 https://docs.tweepy.org/en/stable/api.html?highlight=use_timeline#tweepy.API.search_tweets されています.また現状使われているAPI.user_timeline - https://docs.tweepy.org/en/stable/api.html?highlight=use_timeline#tweepy.API.user_timeline に期間の両端を指定するオプションはありません. 今一度,タイムラインからの取得を目的としているのか,検索を利用した取得を目的にしているのか,コードと文言の一致を図って質問を見直してください.
Lia

2022/10/25 13:32 編集

回答ありがとうございます。 すみません、tweepyのバージョンはどこから確認できるのでしょうか? またやりたいこととしては、ユーザーのタイムラインを取得したいです。例で言うと今回は映画「君の名は。」のTwitterユーザー名である「@kiminona_movie」をある期間(2017年08月26日~9月1日など)のタイムラインを取得したいです。まさか期間指定のオプションがないとは思いませんでした。 何かいい案はないでしょうか。質問ばかりで大変恐縮ではございますがよろしくお願い致します。 少し調べてみたのですが、ツイッターのユーザー名で期間指定している方がいたのですが、テキストを収集していていいね数などを取得できるのかはわかりませんでした。また何週間分のようにweekで絞ることも不可能なのでしょうか。 「コード例」 # ユーザー名、ツイートで取得 tweetCriteria = got.manager.TweetCriteria().setUsername("haniokasai").setSince("2017-09-10").setUntil( "2017-09-12").setMaxTweets(1) tweet = got.manager.TweetManager.getTweets(tweetCriteria)[0] print(tweet.text) 参考URL https://qiita.com/haniokasai/items/9eba9e232a144a0f8805
PondVillege

2022/10/25 16:13

print(tweepy.__version__)でバージョンの確認をしてください. GetOldTweetsは初めて聞きましたが,どれも原理はTwitter APIを叩くものです. ライブラリに明確なオプションがない限りは自力でAPIを叩いたほうが良い場合だってあります.
Lia

2022/10/27 08:30

バージョンは4.10.1でした また自力でやるしかないと思ったので少し追加したのですがエラーがどうしても解決できませんでした。 startdateとenddate で日付を指定し、アカウント作成日時と同じく日本時刻に変換しました。 そうすると「'<' not supported between instances of 'datetime.datetime' and 'str'」エラーが出ました。 日本時刻に直すときに文字列で変換するようにしているのが原因かと思います。しかし日本時刻に直さないと「can't compare offset-naive and offset-aware datetimes」というエラーが出てしまします。 「オフセットなしの日時とオフセット対応の日時を比較できません」という意味だと思うのですが、期間を指定に関してなにかいい案はないでしょうか。 よろしくお願いします。 #日付を指定しました startdate = pd.to_datetime("2017/7/10") enddate = pd.to_datetime("2017/7/30") tweets = tweepy.Cursor(api.user_timeline, screen_name = "kiminona_movie", exclude_replies = True).items() #関数: UTCをJSTに変換する def change_time_JST(u_time): #イギリスのtimezoneを設定するために再定義する utc_time = datetime(u_time.year, u_time.month,u_time.day, \ u_time.hour,u_time.minute,u_time.second, tzinfo=timezone.utc) #タイムゾーンを日本時刻に変換 jst_time = utc_time.astimezone(pytz.timezone("Asia/Tokyo")) # 文字列で返す str_time = jst_time.strftime("%Y-%m-%d_%H:%M:%S") return str_time for tweet in tweets: #ツイート時刻とユーザのアカウント作成時刻を日本時刻にする tweet_time = change_time_JST(tweet.created_at) create_account_time = change_time_JST(tweet.user.created_at) #日本時刻に合わせるためstartdateとenddate も変換する startdate = change_time_JST(tweet.user.created_at) enddate = change_time_JST(tweet.user.created_at) if tweet.created_at < enddate and tweet.created_at > startdate: tweet_data.append([ tweet.id, tweet_time, tweet.text, tweet.favorite_count, tweet.retweet_count, tweet.user.name, tweet.user.friends_count, tweet.user.followers_count, create_account_time, ])
PondVillege

2022/10/27 08:50

pd.to_dataframe()の引数にutc = Trueを設定しましょう.回答の方に書きますね.
Lia

2022/10/27 09:19

参考にさせてもらった結果ようやく期間指定ができました! 細かいところまで教えていただき本当にありがとうございました!

回答1

0

ベストアンサー

Python

1import tweepy 2import pandas as pd 3 4auth = tweepy.OAuthHandler('<Consumer Key>','<Consumer Secrets>') 5auth.set_access_token('<Access Token>', '<Access Secrets>') 6 7api = tweepy.API(auth) 8 9tweets = tweepy.Cursor(api.user_timeline, screen_name = 'kiminona_movie', exclude_replies = True).items() 10 11startdate = pd.to_datetime("2017/7/10", utc = True) 12enddate = pd.to_datetime("2017/7/30", utc = True) 13 14tweet_data = list() 15fmt = "%Y-%m-%d_%H:%M:%S" 16 17for tweet in tweets: 18 tweet_time = tweet.created_at.strftime(fmt) 19 create_account_time = tweet.user.created_at.strftime(fmt) 20 if tweet.created_at < enddate and tweet.created_at > startdate: 21 tweet_data.append([ 22 tweet.id, 23 tweet_time, 24 tweet.text, 25 tweet.favorite_count, 26 tweet.retweet_count, 27 tweet.user.name, 28 tweet.user.friends_count, 29 tweet.user.followers_count, 30 create_account_time 31 ]) 32print(*tweet_data, sep = '\n')

結果は次のようになりました

Python

1[890098338737082368, '2017-07-26_06:35:55', 'Blu-ray&amp;DVD発売記念、Yahoo! JAPANで「君の名は。ペア動画」を公開!\n2台のスマホで、「カタワレ時」の感動を再び!https://t.co/2nyIumEJI1\nYahoo! JAPANで「カタワレ」と検索!ビデオ担当A\n#君の名は。#カタワレ #ペア動画', 1861, 844, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 2[889863068334800896, '2017-07-25_15:01:03', '「君の名は。」Blu-ray&DVD本日発売!お手元で繰り返し楽しんでください!そして、新CMも解禁!神木さん、上白石さんが新たに吹き替えてくれました!https://t.co/B2IrpgpgUL… https://t.co/FliFjRnKAM', 3988, 1640, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 3[889860044136734720, '2017-07-25_14:49:01', 'RT @shinkaimakoto: 『君の名は。』DVD&amp;Blu-ray、どうか楽しんでいただけますように。素晴らしい仕事をいただけた全てのスタッフにも、観てくださった(観てくださる)お客さまにも、あらためてお礼申し上げます。ありがとうございました! https://t.co…', 0, 2079, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 4[889793938625675265, '2017-07-25_10:26:21', 'RT @YojiNoda1: そしてそしてDVD、Blu-ray『君の名は』もいよいよ店着日。\nついに手元におけるのですな、あの作品が。\n皆々様ぜひ!!😊', 0, 1343, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 5[889725049992642560, '2017-07-25_05:52:36', 'RT @TOHOanimeSTORE: 【君の名は。】ついに明日、本作の魅力を余すことなく詰め込んだBD・DVDが発売!TaS限定版は各エディション共通で「田中将賀氏描き下ろしキャンバスアート」、「特製リングバインダー」がセット!数量限定なのでお早めに!!\nhttps://t.…', 0, 292, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 6[889668406898638848, '2017-07-25_02:07:32', 'RT @GEO_official: < #一番くじ 君の名は。~異心伝心>\nご好評につき、再入荷が決定🎵\n取扱店舗は▶ https://t.co/OhkG7e4sMh\nさらに‼いよいよ明日『君の名は。』DVD/ブルーレイもリリース開始💖\n\n#立花滝\n#宮水三葉\n#君の名は ht…', 0, 201, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 7[888319739222564865, '2017-07-21_08:48:24', '『君の名は。』オーケストラコンサートは、RADWIMPS×東京フィルハーモニー交響楽団による生演奏とともにスクリーンに映し出される映画全編を観る贅沢なひと時。あの感動が再び!\u3000詳細はこちら→… https://t.co/LJ4gyhgfKU', 418, 150, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 8[888318070892019712, '2017-07-21_08:41:46', '「君の名は。カタワレ時」のスマホのホームパックが登場!\nAndroidのスマートフォンできせかえると、壁紙やアイコンが全て無料でカタワレ時のデザインに♪\n設定はこちらから⇒https://t.co/NAHs45M6jE\u3000ビデオ担当… https://t.co/VbuaqAwrcs', 779, 240, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 9[888317186866987009, '2017-07-21_08:38:16', 'RT @tanamasa0119: 君の名はーー!!(°д°) https://t.co/Yk3AQw6cZe', 0, 589, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 10[888019294046478336, '2017-07-20_12:54:32', 'RT @WILLER_TRAVEL: #君の名はカフェバス \n✨運行開始キャンペーン✨\n1組2名様にカフェバスの無料乗車を抽選でプレゼント!\n応募は簡単!フォロー&RTするだけ!\n【7/31(月)〆切】\n\n⬇️#君の名はカフェバス 詳細はこちら⬇️\nhttps://t.co/m…', 0, 544, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 11[887690155376615424, '2017-07-19_15:06:40', 'RT @febri_edit: 【お知らせ】「新海誠監督作品 君の名は。美術画集」ですが、当初の7月28日発売から8月2日発売に変更になりました。ファンの皆様には、お待たせすることになってしまい、大変申し訳ございません。 https://t.co/zbg1Njpiq5', 0, 369, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 12[887665837649285123, '2017-07-19_13:30:02', 'RT @shinkaimakoto: 『君の名は。』BD&amp;DVDの発売日は26日ですが、一足お先に頂きました。美しくパッケージしていただき嬉しいです!\u3000皆さんのお手元に届くまで、楽しみにしていただけますように。 https://t.co/gJvAYJvl0H', 0, 4581, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 13[887206083587997696, '2017-07-18_07:03:08', 'RT @LOFT_Official: \予告/\n映画「君の名は。」の限定グッズを取り揃えた「君の名は。SPECIAL SHOP」を、全国のロフト10店舗にて開催!DVD発売を前に、もう一度あの世界を体感しよう!\n■7月15日(土)より順次スタート\n詳しくは→https://t.…', 0, 141, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 14[886092940765872129, '2017-07-15_05:19:54', 'RT @gsc_kahotan: 【速報】「ねんどろいど 宮水三葉」「ねんどろいど 立花瀧」彩色原型、初公開です! #君の名は #goodsmile \n\n秋葉原ラジオ会館4Fにオープンする「あみあみ秋葉原ラジオ会館店」さまにて15日(土)より展示いたします◎ #akiba ht…', 0, 1041, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 15[885986953643966465, '2017-07-14_22:18:45', 'ルミネ新宿店×「君の名は。」DVD発売記念キャンペーン実施!対象店舗で1レシート700円以上のお買い上げで、スタンプをひとつ捺印。スタンプを2つ集めると、抽選でオリジナルグッズをプレゼント!ぜひお立ち寄りください。\u3000期間:7/15… https://t.co/1nE2sXUnEU', 942, 290, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 16[885798756800634880, '2017-07-14_09:50:55', 'RT @TOHOanimeSTORE: 【君の名は。】全エディション共通でTaS限定版に付く「キャンバスアート」のサンプル到着!田中将賀氏による貴重な描き下ろしイラストを、シンプルかつ最大限活かしたステキな一品に仕上がりました。BD・DVDは7/26発売!!\nhttps://t…', 0, 228, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 17[885758624533839872, '2017-07-14_07:11:27', 'RT @TOHOanimeSTORE: 【君の名は。】ご好評いただいておりますオルゴール新作2種の予約受付を開始! 今回はOP、EDを彩った「夢灯籠」「なんでもないや」が登場!オルゴールの優しい音色が作品の感動を呼び起こします!お届け予定は11月上旬です\nhttps://t.c…', 0, 184, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 18[885748064408829952, '2017-07-14_06:29:29', 'Blu-ray&DVD の発売に先駆け、コレクターズ・エディションの特典ディスク1~3のビデオコンテ、RADWIMPS のレコーディング風景、神木隆之介と上白石萌音のアフレコ風景などの映像を特別先行公開!… https://t.co/xr5fAgqCkn', 613, 224, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 19[884982739698692096, '2017-07-12_03:48:21', 'Yahoo! JAPANきせかえに「君の名は。」カタワレ時のデザインが新登場!\nスマホで設定すると、ヤフーのトップや検索結果がいつでも美しいカタワレ時のデザインに♪\n設定はコチラから⇒https://t.co/LT0Ywtx5dZ… https://t.co/EL8WpqCtNR', 438, 150, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 20[884618644457705472, '2017-07-11_03:41:34', 'TOHO animation STORE限定版は田中将賀氏による瀧と三葉の入れ替わりを描いた貴重な描き下ろしイラストのキャンバスアートが付いてきます!更に特製リングバインダーはコレクターズ・エディション用の描き下ろしを使用。ぜひチ… https://t.co/n1MG68gIKJ', 345, 115, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 21[884612636050051073, '2017-07-11_03:17:42', 'Blu-ray&DVDがもうすぐ発売ですが、“劇場ならでは”の企画として、7/23に池袋シネマ・ロサにて“大合唱上映会”開催決定!昨年末の大合唱上映会同様、4曲の主題歌字幕がついた本編の特別版を上映!https://t.co/HjigWHNC7L\u3000ビデオ担当A #君の名は。', 438, 208, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57'] 22[884318499023106049, '2017-07-10_07:48:54', 'RT @hna_d: 東京駅キャラクターストリート期間限定「 #君の名は 。SPECIAL SHOP」が大好評につき7/30(日)まで期間延長します♪\u3000引き続き、限定グッズ、ステーショナリーなど様々な商品をお取り扱い中です!東京駅にお越しの際は是非お立ち寄りください!《営業時間…', 0, 140, '映画『君の名は。』', 13, 121678, '2016-06-06_10:37:57']

投稿2022/10/27 08:56

PondVillege

総合スコア1032

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。