修正後のソースコード
user_info = ["user.screen_name", "user.name",] request_result = request_authorization(request_url=request_url, ck=CK, cs=CS, at=AT, ats=AS, params=params, user_info=user_info) if request_result.status_code == 200: tweetinfo = json.loads(request_result.text) for j in range(0,len(tweetinfo)): print(str(i)+":"+str(j)+":"+"リツイートID" + str(tweetinfo[j]['id']) + str(twitter_info[j]["screen_name"])) user = api.get_user(j) followerdata = {'retweet_id':tweetinfo[j]['id'], 'user_id':tweetinfo[j]['user']['id'], "screen_name":tweetinfo[j]["screen_name"]} with open(output_csv_file_name, 'a') as f: writer = csv.writer(f, lineterminator='\n') writer.writerow(followerdata.values()) ```### 前提・実現したいこと ここに質問の内容を詳しく書いてください。 pythonでtwiiterの特定ツイートのリツイートアカウントを取得したいです。 ### 発生している問題・エラーメッセージ
エラーメッセージ
line 63, in <module>
print(str(i)+":"+str(j)+":"+"リツイートID" + str(tweetinfo[j]['id']) + str(tweetinfo[j]["screen_name"]))
KeyError: 'screen_name'
### 全体のソースコード Python ソースコード ```from requests_oauthlib import OAuth1Session import json import csv import tweepy import configparser def request_authorization (**url_and_params): twitter = OAuth1Session(url_and_params['ck'], url_and_params['cs'], url_and_params['at'], url_and_params['ats']) if('params' in url_and_params): request_result = twitter.get(url_and_params['request_url'],params=url_and_params['params']) else: request_result = twitter.get(url_and_params['request_url']) return request_result config_ini = configparser.ConfigParser() config_ini.read('config.ini', encoding='utf-8') CK = config_ini["key"]["consumer_key"] CS = config_ini["key"]["consumer_secret"] AT = config_ini["key"]["access_token"] AS = config_ini["key"]["access_secret"] global twitter twitter = OAuth1Session(CK, CS, AT, AS) request_status_url = "https://api.twitter.com/1.1/statuses/retweets/:id.json" tweet_id = ["1414972474261786636"] #リツイート情報を取得したい TweetID total_requests_number = len(tweet_id) print("--------"+"送信するリクエスト数合計:" + str(total_requests_number)+"-------------") sched_requests_number = 0 should_get_requests_limit = True i_plus = 1 requests_count = 0 error_count = 0 output_csv_file_name = 'retweet_info.csv' with open(output_csv_file_name,'a') as f: writer = csv.writer(f, lineterminator='\n') header = ['retweet_id', 'user_id'] writer.writerow(header) for i in range(0,total_requests_number,i_plus): if(should_get_requests_limit == True): api_response = request_authorization(request_url=request_status_url, ck=CK, cs=CS, at=AT, ats=AS) requests_limit = api_response.headers['x-rate-limit-remaining'] requests_limit = int(requests_limit) requests_count += 1 print("--------"+str(requests_count)+"回目。今回送信するリクエスト数:" + str(requests_limit)+"--------------------") sched_requests_number += requests_limit should_get_requests_limit = False if(requests_limit != 0): i_plus = 1 print(str(i) + ":リクエストしたtweetID:" + str(tweet_id[i])+"---------") request_url = "https://api.twitter.com/1.1/statuses/retweets/"+str(tweet_id[i])+".json?count=100&trim_user=false" params = {'tweet_id':tweet_id[i]} user_info = ["user.screen_name", "user.name",] request_result = request_authorization(request_url=request_url, ck=CK, cs=CS, at=AT, ats=AS, params=params, user_info=user_info) if request_result.status_code == 200: tweetinfo = json.loads(request_result.text) for j in range(0,len(tweetinfo)): print(str(i)+":"+str(j)+":"+"リツイートID" + str(tweetinfo[j]['id']) + user_info[j]["screen_name"]) followerdata = {'retweet_id':tweetinfo[j]['id'], 'user_id':tweetinfo[j]['user']['id'], "user_name":user_info["screen_name"]} with open(output_csv_file_name, 'a') as f: writer = csv.writer(f, lineterminator='\n') writer.writerow(followerdata.values()) else: print ("Error: %d" % request_result.status_code) error_count += 1 print("Error数:"+str(error_count)) else: i_plus = 0 if(i == sched_requests_number): print("--------"+"残りリクエスト数" + str(total_requests_number-requests_limit) + "-------------") sleep_until_api_limit(api_response) should_get_requests_limit = True コード
試したこと
コードが読みにくくて申し訳ございません。
webで掲載されていたコード使用しました。
取得情報を「ID」ではなく「screen_name」に変えて情報を取得したかったのですがエラーが出てしまいます。
アカウントやユーザー等の名前が分かるものに変えたいのですが、やり方が分かりません。
補足情報(FW/ツールのバージョンなど)
python 3.9.4
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/14 06:57
2021/07/14 07:28
2021/07/14 07:37
2021/07/14 23:24