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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Twitter

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

Q&A

解決済

1回答

2001閲覧

GetOldTweets-pythonでユーザー名(スクリーンネーム)を取得したい

walkwater

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Twitter

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

0グッド

0クリップ

投稿2019/06/26 07:55

編集2019/07/16 12:20

前提・実現したいこと

Twitterの特定ユーザーのツイートと同様のツイートが過去にあるかどうかの確認をしたい。
Python3.7でGetOldTweets-python(https://github.com/Jefferson-Henrique/GetOldTweets-python)を用いて実現したい。
最近Pythonを触り始めたため、いくつかネットで公開されていたソースコードを組み合わせています。
それにより見づらいソースコードになっているかもしれません。

様々なユーザーで実行しましたが、2種類のエラーが出てしまいました。

発生している問題・エラーメッセージ

Twitter weird response. Try to see on browser: https://twitter.com/search?q=%20since%3A2014-01-01%20until%3A2019-04-01%20%22%22&src=typd Unexpected error: <class 'urllib.error.HTTPError'>
Traceback (most recent call last): File "testresearch.py", line 86, in <module> tweet = got.manager.TweetManager.getTweets(tweetCriteria)[i] IndexError: list index out of range

該当のソースコード

Python3.7 import sys import json import config2 import oauth2 as oauth import got3 as got import re import nltk # from requests_oauthlib import OAuth1Session from define_client2 import define_client2_proc #config2に各種アクセスキー CK = config2.CONSUMER_KEY CS = config2.CONSUMER_SECRET AT = config2.ACCESS_TOKEN ATS = config2.ACCESS_TOKEN_SECRET twitter = OAuth1Session(CK, CS, AT, ATS) # -------------------------------------------------------------------- # [8]: def get_tweets_proc(client,screen_name): nnx = 200 url_base = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=" url = url_base + screen_name + "&count=" + str(nnx) array_aa = [] response, data = client.request(url) if response.status == 200: json_str = data.decode('utf-8') array_aa = json.loads(json_str) sys.stderr.write("len(array_aa) = %d\n" % len(array_aa)) # else: sys.stderr.write("*** error *** get_ids_proc ***\n") sys.stderr.write("Error: %d\n" % response.status) # return array_aa # -------------------------------------------------------------------- def filter(text): """ :param text: str :rtype : str """ # アルファベットと半角英数と記号と改行とタブを排除 text = re.sub(r'[a-zA-Z0-9¥"¥.¥,¥@]+', '', text) text = re.sub(r'[!"“#$%&()*+\-.,/:;<=>?@[\]^_`{|}~]', '', text) text = re.sub(r'[\n|\r|\t]', '', text) # 日本語以外の文字を排除(韓国語とか中国語とかヘブライ語とか) jp_chartype_tokenizer = nltk.RegexpTokenizer(u'([ぁ-んー]+|[ァ-ンー]+|[\u4e00-\u9FFF]+|[ぁ-んァ-ンー\u4e00-\u9FFF]+)') text = "".join(jp_chartype_tokenizer.tokenize(text)) return text # ----------------------------------------------------------------------- sys.stderr.write("*** 開始 ***\n") # screen_name = "*******" # client = define_client2_proc() # array_aa = get_tweets_proc(client,screen_name) # sys.stderr.write("len(array_aa) = %d\n" % len(array_aa)) # for unit_aa in array_aa: text = filter(unit_aa['text']) print (text) print('----------------------------------------------------') tweetCriteria = got.manager.TweetCriteria().setQuerySearch('"%s"' % text).setSince("2014-01-01").setUntil( "2019-04-01").setMaxTweets(5) for i in range(5): tweet = got.manager.TweetManager.getTweets(tweetCriteria)[i] if tweet.username == screen_name: print("本人") else: print(tweet.text) print(tweet.username) break sys.stderr.write("*** 終了 ***\n") # --------------------------------------------------------------------

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/07/02 00:43

一つ目は英文の通りとして二つ目は配列について一度学んでみては?
walkwater

2019/07/02 05:41

投稿前に配列に何も入っていないのではと思ってif文で分岐させていたのですが、判定するものを間違えていたことに気づきました。 if tweetCriteria == []: としていたのですが正しくは if got.manager.TweetManager.getTweets(tweetCriteria)== []: こちらでした。ご指摘ありがとうございました。 一つ目の方は発生する条件をもう少し探してみたいと思います。
退会済みユーザー

退会済みユーザー

2019/07/04 08:29

そもそも何がしたいのですか? ユーザー名をただ単に取得したい? ユーザー名を取得して何かをしたい? 分かりづらいです
guest

回答1

0

自己解決

エラー文2つとも解決方法が分かりました。
1つ目は検索したい文字が長すぎたため起こっていた可能性があったので、文字数を制限して解決しました。
2つ目は配列が空の時の想定ができていなかったので空の時の条件分岐をして解決しました。

投稿2019/07/02 16:56

walkwater

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AnilChhetri

2020/04/23 09:15

Hi did you fixed the issue. If so could you please help with the code. I also get the same error i was also using the getoldtweet one from twitter. If you fixed it please could you send me the code or the whole working file to my email. chtryanil1080@gmail.com
Mohrey_Y

2020/05/29 16:40

In my opinion, Twitter has taken some measures. I was using a crawler with GetOldTweets-python-a few months ago, but it doesn't work now.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問