Dans cet article, tweepy est utilisé pour définir un tweet spécifique + une réponse au tweet correspondant. Décrivez le code à obtenir. Dans le code ci-dessous, plus de 100 réponses ont été publiées à titre d'exemple Rassemblez les informations sur les tweets et les réponses.
L'ensemble des tweets et réponses acquis est "Id" inclus dans le statut du tweet et "in_reply_to_status_id" inclus dans le statut de la réponse La destination peut être liée par assemblage.
Veuillez noter que la version gratuite de l'API Twitter a une limitation selon laquelle les tweets datant de plus de 7 jours ne peuvent pas être collectés.
gather.py
# coding:utf-8
import tweepy
import csv
import time
from datetime import datetime, date, timedelta
import re
#Obtenir des informations sur la date actuelle
today = datetime.today()
#Spécifiez la plage horaire de publication du tweet à acquérir(Exemple: depuis 2 jours jusqu'à aujourd'hui)
tweet_begin_date = datetime.strftime(today - timedelta(days=2), '%Y-%m-%d_00:00:00_JST')
tweet_end_date = datetime.strftime((today), '%Y-%m-%d_23:59:00_JST')
#Spécifiez la plage de temps de publication de la réponse à acquérir(Exemple: depuis 2 jours jusqu'à aujourd'hui)
reply_begin_date = datetime.strftime(today - timedelta(days=2), '%Y-%m-%d_00:00:00_JST')
reply_end_date = datetime.strftime((today), '%Y-%m-%d_23:59:00_JST')
#Résultat de l'acquisition répertoire de destination de sortie du fichier csv
csv_dir = '/hoge/'
# Twitter API KEY
Consumer_key = 'xxxx'
Consumer_secret = 'xxxx'
Access_token = 'xxxx'
Access_secret = 'xxxx'
#Pour l'authentification API Twitter
def authTwitter():
auth = tweepy.OAuthHandler(Consumer_key, Consumer_secret)
auth.set_access_token(Access_token, Access_secret)
api = tweepy.API(auth, retry_count=3,retry_delay=40,retry_errors=set([401, 404, 500, 502, 503, 504]), wait_on_rate_limit = True, wait_on_rate_limit_notify=True)
return(api)
#Pour l'acquisition de données de tweet
def gather_tweet_and_reply(s,t):
api = authTwitter() #Authentification
tweet_list = []
reply_list = []
tweet_id_list = []
user_id_list = []
tweets = tweepy.Cursor(api.search, q = s, #Chaîne de recherche
include_entities = True, #Récupérer tous les liens omis
tweet_mode = 'extended', #Obtenez tous les tweets omis
since = tweet_begin_date, #Spécifier la date et l'heure de début de la collecte
until = tweet_end_date, #Spécifier la période de fin de collecte
lang = 'ja').items() #Recevez uniquement des tweets japonais
#Stocker les tweets recherchés dans une liste
for tweet in tweets:
tweet_list.append([tweet.id, tweet.user.screen_name, tweet.created_at, tweet.full_text.replace('\n',''), tweet.favorite_count, tweet.retweet_count])
tweet_id_list.append(tweet.id)
user_id_list.append(tweet.user.screen_name)
# user_id_Le nom d'utilisateur stocké dans la liste recherche la réponse de destination
for user_id in user_id_list:
replies = tweepy.Cursor(api.search, q = t + " to:" + str(user_id), #Chaîne de recherche
include_entities = True, #Récupérer tous les liens omis
tweet_mode = 'extended', #Obtenez tous les tweets omis
since = reply_begin_date, #Spécification de la date et de l'heure de début de la collecte des réponses
until = reply_end_date, #Spécification de la date et de l'heure de fin de la collecte des réponses
lang = 'ja').items() #Recevez uniquement des tweets japonais
#Contre-mesures contre la déconnexion de session due à la transmission massive de requêtes
time.sleep(5)
#L'ID de destination de la réponse est un tweet_id_Stocker dans la liste si dans la liste
for reply in replies:
if reply.in_reply_to_status_id in tweet_id_list:
reply_list.append([reply.id, reply.in_reply_to_status_id, reply.user.screen_name, reply.created_at, reply.full_text.replace('\n',''), reply.favorite_count, reply.retweet_count])
#Résultat csv de sortie
with open(csv_dir+'tweet_'+ today.strftime('%Y%m%d_%H%M%S') + '.csv', 'w',newline='',encoding='utf-8') as f:
writer = csv.writer(f, lineterminator='\n')
writer.writerow(["id","user","created_at","text","fav","RT"])
writer.writerows(tweet_list)
pass
with open(csv_dir+'reply_'+ today.strftime('%Y%m%d_%H%M%S') + '.csv', 'w',newline='',encoding='utf-8') as f:
writer = csv.writer(f, lineterminator='\n')
writer.writerow(["id","to_id","user","created_at","text","fav","RT"])
writer.writerows(reply_list)
pass
def main():
gather_tweet_and_reply("lang:ja exclude:retweets min_replies:100","lang:ja filter:replies exclude:retweets")
if __name__ == "__main__":
main()
・ Résumé des procédures depuis l'enregistrement de l'API Twitter (méthode de demande de compte) jusqu'à l'approbation * Informations en août 2019 ・ Je ne savais pas ce que je pouvais obtenir de la liste des statuts Tweepy, alors je l'ai retirée
Recommended Posts