前提・実現したいこと
はじめまして.独学でPythonの勉強をしているものです.
今回,Tweepyを用いて任意の時間に投稿されるツイートを自動更新して取得するコードについて質問があり,投稿させていただきます.
実現させたいことというのは,「ある任意の時間に投稿されるツイートを自動で更新して取得する」ということです.
書いてみたソースコード
さて,実際に色々と試してみた結果,ある任意の時間より前に投稿された最新ツイートは取得できたのですが,その時間に投稿されるツイートを取得するには至りませんでした.以下がそのコードです.
Python
1import tweepy 2import datetime 3import re 4 5CK = "*********" 6CS = "*********" 7AT = "*********" 8AS = "*********" 9 10auth = tweepy.OAuthHandler(CK, CS) 11auth.set_access_token(AT, AS) 12api = tweepy.API(auth) 13 14set_time = "" # ここに任意の時間を指定 15username = "" # 任意のTwitterユーザ名を記入 16 17dt = datetime.datetime.now() 18dt_min = dt.strftime("%M") 19 20while set_time != dt_min: 21 dt = datetime.datetime.now() 22 dt_min = dt.strftime("%M") 23 tweet = tweepy.Cursor(api.user_timeline, id = username, tweet_mode = "extended").items(1) 24 for status in tweet: 25 content = re.findall(r"\w+", status.full_text) 26 tt = re.findall(r"\d+", str(status.created_at)) 27 tt_min = tt[4] 28 print(content, tt) # もともと入れる予定はありませんでしたが,動作確認用に入れてみました. 29 if tt_min == set_time: 30 tweet = tweepy.Cursor(api.user_timeline, id = username, tweet_mode = "extended").items(1) 31 for status in tweet: 32 content = re.findall(r"\w+", status.full_text) 33 tt = re.findall(r"\d+", str(status.created_at)) 34 tt_min = tt[4] 35 print(content, tt) 36 break 37
出力結果
上記のコードを実行した結果,任意の時間までに投稿された最新ツイート1件を出力することはできたのですが,set_timeで設定した時間になると実行が終了してしまいます.
['*****', '*****'] (set_time以前の最新ツイートのツイート時間) ['*****', '*****'] (set_time以前の最新ツイートのツイート時間) ['*****', '*****'] (set_time以前の最新ツイートのツイート時間) ['*****', '*****'] (set_time以前の最新ツイートのツイート時間) ['*****', '*****'] (set_time以前の最新ツイートのツイート時間) (ここでset_timeになる) 何も出力されずに終了
試したこと
記載したソースコードの他にも,
Python
1import sys 2 3while set_time != dt_min: 4 dt = datetime.datetime.now() 5 dt_min = dt.strftime("%M") 6 tweet = tweepy.Cursor(api.user_timeline, id = username, tweet_mode = "extended").items(1) 7 for status in tweet: 8 content = re.findall(r"\w+", status.full_text) 9 tt = re.findall(r"\d+", str(status.created_at)) 10 tt_min = tt[4] 11 if set_time == tt_min: 12 sys.exit() 13 14while set_time == dt_min and set_time != tt_min: 15 dt = datetime.datetime.now() 16 dt_min = dt.strftime("%M") 17 tweet = tweepy.Cursor(api.user_timeline, id = username, tweet_mode = "extended").items(1) 18 for status in tweet: 19 content = re.findall(r"\w+", status.full_text) 20 tt = re.findall(r"\d+", str(status.created_at)) 21 tt_min = tt[4] 22 if set_time == dt_min and set_time == tt_min: 23 tweet = tweepy.Cursor(api.user_timeline, id = username, tweet_mode = "extended").items(1) 24 for status in tweet: 25 content = re.findall(r"\w+", status.full_text) 26 tt = re.findall(r"\d+", str(status.created_at)) 27 tt_min = tt[4] 28 print(content, tt_min) 29
と複雑にしてみたり...
そもそもツイート内の数字のみを取得したいという特性も利用して,
Python
1import time 2 3tweet = tweepy.Cursor(api.user_timeline, id = username, tweet_mode = "extended").items(1) 4 for status in tweet: 5 content = re.findall(r"\d+", status.full_text) 6 tt = re.findall(r"\d+", str(status.created_at)) 7 tt_min = tt[4] 8 9while len(content) == 0: 10 sys.stdout.write("\r更新中...") 11 sys.stdout.flush() 12 time.sleep(0.01) 13 if len(content) >= 1 and set_time == tt_min: 14 print(content, tt) 15 break 16
など,考えつきそうなものは手当たり次第試してみたのですが,どれもset_timeに投稿されるツイートの取得には至りませんでした.
Pythonの勉強を始めたばかりですので,そもそものコードに無駄がある・使い方が違うなどの意見も下さると嬉しいです.
何卒宜しくお願い申し上げます.
回答1件
あなたの回答
tips
プレビュー