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

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

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

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

Python

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

Q&A

0回答

255閲覧

pythonでつくる対話システム twitter_crawler.pyに関するエラー

Y.S_H

総合スコア4

Twitter

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

Python

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

0グッド

0クリップ

投稿2022/06/20 13:40

pythonでつくる対話システムという本で対話システムについて学んでいるのですが
twitterからのデータ収集がうまくいきません。
エラーをなくし、実行できるまでにはしたのですが
実行結果が0pairsのまま動きません。
下記にプログラムを載せました。
わかる方対応していただけるとありがたいです。

python

1import tweepy 2import random 3import re 4 5 6while True: 7 # ここに先程取得したAPIキーとトークンを入力 8 api_key = "XXXXX" 9 api_secret_key = "XXXXX" 10 access_token = "XXXXX" 11 access_token_secret = "XXXXX" 12 13 auth = tweepy.OAuthHandler(api_key, api_secret_key) 14 auth.set_access_token(access_token, access_token_secret) 15 api = tweepy.API(auth, wait_on_rate_limit=True) 16 17 # botのツイートを除外するため,一般的なクライアント名を列挙 18 sources = ["TweetDeck", "Twitter Web Client", "Twitter for iPhone", 19 "Twitter for iPad", "Twitter for Android", "Twitter for Android Tablets", 20 "ついっぷる", "Janetter", "twicca", "Keitai Web", "Twitter for Mac"] 21 22 23 # ひらがな一文字で検索し,スクリーンネームを取得 24 words = list("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん") 25 26 #set()は集合、同じ要素は除外される 27 screen_names = set() 28 #適当な文字を含むツイートを選び、そのツイートのクライアントがsourcesにいればスクリーンネーム(@から始まる名前)を追加する 29 for s in api.search_tweets(q=random.choice(words), lang='ja', result_type='recent', count=100, tweet_mode='extended'): 30 if s.source in sources: 31 screen_names.add(s.author.screen_name) 32 33 # ステータスidからステータスを得るためのdict 34 id2status = {} 35 36 # スクリーンネームからタイムラインを取得してツイートを保存. 37 # さらにリプライツイートであれば,リプライ先のスクリーンネームも取得 38 in_reply_to_screen_names = set() 39 for name in screen_names: 40 try: 41 #screen_namesの中にあるユーザーのタイムラインを見る 42 for s in api.user_timeline(name, tweet_mode='extended', count=200): 43 # リンクもしくはハッシュタグを含むツイートは除外する 44 if "http" not in s.full_text and "#" not in s.full_text: 45 id2status[s.id] = s 46 #ユーザーにリプライしているユーザーのスクリーンネームも保存 47 if s.in_reply_to_screen_name is not None: 48 if s.in_reply_to_screen_name not in screen_names: 49 in_reply_to_screen_names.add(s.in_reply_to_screen_name) 50 except Exception as e: 51 continue 52 53 # リプライ先のスクリーンネームからタイムラインを取得してツイートを保存 54 for name in in_reply_to_screen_names: 55 try: 56 for s in api.user_timeline(name, tweet_mode='extended', count=200): 57 if "http" not in s.full_text and "#" not in s.full_text: 58 id2status[s.id] = s 59 except Exception as e: 60 continue 61 62 # 保存したツイートのリプライ先のツイートが保存されていれば,id2replyidのキーを元ツイートのid,値をリプライ先ツイートのidとする 63 id2replyid = {} 64 for _, s in id2status.items(): 65 if s.in_reply_to_status_id in id2status: 66 id2replyid[s.in_reply_to_status_id] = s.id 67 68 69 # id2replyidのkey valueからstatusを取得し,ツイートペアをタブ区切りで保存 70 f = open("tweet_pairs.txt", "a") 71 for id, rid in id2replyid.items(): 72 # 改行は半角スペースに置換 73 tweet1 = id2status[id].full_text.replace("\n", " ") 74 # スクリーンネームを正規表現を用いて削除 75 tweet1 = re.sub(r"@[0-9a-zA-Z_]{1,15} +", "", tweet1) 76 77 tweet2 = id2status[rid].full_text.replace("\n", " ") 78 tweet2 = re.sub(r"@[0-9a-zA-Z_]{1,15} +", "", tweet2) 79 80 f.write(tweet1+ "\t" + tweet2 + "\n") 81 f.close() 82 print("Write " + str(len(id2replyid)) + " pairs.") 83 84

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

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

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

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

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

quickquip

2022/06/21 02:26

エラーが出て困っているのか、0件になってしまって(=常に Write 0 pairs. になってしまって)困っているのか、どちらなのか伝わってません。 特に前者ならエラーをそのまま載せてください。(個人名/アカウント名はマスクしてよいですが) 参考 https://teratail.com/help/question-tips#questionTips34
Y.S_H

2022/06/21 03:19

後者です。常にWrite 0 pairs.なってしまって困っています。
quickquip

2022/06/21 03:35

except Exception as e: continue (どうせインデントされないので1行にしました) と書いて無視している箇所のいずれかでエラーが起きていて、それで困っている という内容の質問ではないというわけですね……。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問