Comme il n'y a que screen_name dans la liste des abonnés de Twitter, j'ai décidé d'ajouter les informations de l'identifiant d'utilisateur à la liste des abonnés de Twitter.
Twitter API GET users/show https://dev.twitter.com/rest/reference/get/users/show
name | account | followdate |
---|---|---|
Kuwa | kazhu | 2015/12/26 |
Giri | noko123 | 2015/12/26 |
Taro | taro123 | 2017/09/21 |
Les restrictions de l'API sont gênantes pour Twitter, mais le moyen de l'éviter est par la méthode de l'administrateur de Code 7 Ward. Je suis toujours reconnaissant de votre aide. Recevez beaucoup de tweets avec TwitterAPI. Tenez compte des erreurs côté serveur (en python)
twitter_user_get.py
# coding=utf-8
import sys
import tweetkey
import os
from requests_oauthlib import OAuth1Session
import csv
import time
import json
import datetime
def init():
#Définissez diverses clés à partir du fichier externe habituel
CONSUMER_KEY = tweetkey.twkey['CONSUMER_KEY']
CONSUMER_SECRET = tweetkey.twkey['CONSUMER_SECRET']
ACCESS_TOKEN = tweetkey.twkey['ACCESS_TOKEN']
ACCESS_SECRET = tweetkey.twkey['ACCESS_SECRET']
twitter = OAuth1Session(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_SECRET)
return(twitter)
def twittergetter(input_name,output_name,api):
TweetIDList = []
with open(input_name, 'r') as f:
reader = csv.reader(f)
header = next(reader) #Lorsque vous souhaitez ignorer l'en-tête
#Ajout de la colonne ID à HEAD pour la sortie
header.append("id")
fout = open(output_name, 'wt')
writer = csv.writer(fout)
writer.writerow(header)
for row in reader:
#Obtenez un compte du tableau 2 de csv et lancez
screen_name = row[2]
print(screen_name)
url = "https://api.twitter.com/1.1/users/show.json?screen_name=" + screen_name
# params = {'count': 100}
# get_les utilisateurs n'ont pas de paramètres
req = api.get(url)
if req.status_code == 200:
users = json.loads(req.text)
print(users)
#l'ID utilisateur est dans l'ID
id = users["id"]
print(id)
#Ajoutez l'id retourné au tableau et écrivez
row.append(id)
writer.writerow(row)
else:
#À 404, écran_Puisque le nom a déjà changé ou retiré, écrivez tel quel
if req.status_code == 404:
writer.writerow(row)
else:
print ("Error: %d" % req.status_code)
time.sleep(240)
#Confirmation d'en-tête (nombre de fois limité)
# X-Rate-Limit-Vérifiez car il est rare que Restant ne soit pas inclus
if ('X-Rate-Limit-Remaining' in req.headers and 'X-Rate-Limit-Reset' in req.headers):
if (int(req.headers['X-Rate-Limit-Remaining']) == 0):
waitUntilReset(int(req.headers['X-Rate-Limit-Reset']))
checkLimit()
else:
print('not found - X-Rate-Limit-Remaining or X-Rate-Limit-Reset')
checkLimit()
fout.close()
return()
def checkLimit():
'''
Interrogez la limite et attendez qu'elle devienne accessible
'''
unavailableCnt = 0
while True:
url = "https://api.twitter.com/1.1/application/rate_limit_status.json"
res = api.get(url)
print(res.text)
if res.status_code == 503:
# 503 : Service Unavailable
if unavailableCnt > 10:
raise Exception('Twitter API error %d' % res.status_code)
unavailableCnt += 1
print('Service Unavailable 503')
waitUntilReset(time.mktime(datetime.datetime.now().timetuple()) + 30)
continue
unavailableCnt = 0
if res.status_code != 200:
raise Exception('Twitter API error %d' % res.status_code)
remaining, reset = getLimitContext(json.loads(res.text))
if (remaining == 0):
waitUntilReset(reset)
else:
break
def getLimitContext(res_text):
'''
Obtenir des informations sur le nombre de fois limite (au démarrage)
'''
remaining = res_text['resources']['users']['/users/show/:id']['remaining']
reset = res_text['resources']['users']['/users/show/:id']['reset']
print(reset)
return int(remaining), int(reset)
def waitUntilReset(reset):
'''
dormir jusqu'à l'heure de réinitialisation
'''
seconds = reset - time.mktime(datetime.datetime.now().timetuple())
seconds = max(seconds, 0)
print('\n =====================')
print(' == waiting %d sec ==' % seconds)
print(' =====================')
sys.stdout.flush()
time.sleep(seconds + 10) #Au cas où+10 secondes
if __name__ == '__main__':
api = init()
input_name = os.getcwd() + "/twitterList.csv"
output_name = os.getcwd() + "/twitterList_add_id.csv"
twittergetter(input_name,output_name, api)
Cependant, lorsque j'essaye de convertir screen_name pour 120 000 personnes, cela ne s'arrête pas même après 2 jours. .. ..
Recommended Posts