twitterでRTしたユーザーアカウントをpythonでテキストベースで抽出したいのですが、
get retweeted のコマンドだと100件までしか出せません。
100件以上を抽出する方法をご存知の方は教えていただけないでしょうか。。
別の方法として、このサイトから下のソースコードも見ましたが、
OAuth1session がimportできないと表示されました。
twitterはすでにOAuth2.0 でしょうか。。
教えていただけたら嬉しいです。
初心者なので、間違った質問をしていたら申し訳ありません。
### 全体のソースコード
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
コード
コードし質問に書かないと読めないです。「このサイト」も書いた方がいいと思います。
質問は編集できます。
あなたの回答
tips
プレビュー