Je suis probablement aboli, et quand je regarde le temps d'écran, je passe en moyenne environ 3 heures par jour sur Twitter. Je fais presque un huitième de jour sur Twitter ... Eh bien, il y a des gens qui sont encore pires que moi ... Aussi, si vous en avez envie, suivez-moi → @y_a_m_a_y_a (J'ai changé le compte avec lequel Qiita travaille)
La plupart de ce que je fais consiste simplement à organiser des tweets sur la chronologie où je vois les tweets des gens et vérifie les tendances (parce que je suis sensible aux tendances), alors je voulais créer un programme pour réduire ce temps. ..
Voici la [Démo (publiée sur Twitter sous forme de vidéo)] créée (https://twitter.com/y_a_m_a_y_a/status/1261218576918130688?s=20).
Google Colab (la construction de l'environnement était problématique) Le code se trouve sur GitHub et google drive.
En gros, il existe de nombreuses explications pour cette partie.
Pour utiliser l'API Twitter, vous devez vous inscrire en tant que développeur. Cette partie a été écrite par différentes personnes, veuillez donc vous y référer. 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 Comme c'était un but académique pour les étudiants d'étudier, j'ai été certifié immédiatement en environ une journée.
Avec la bibliothèque Twitter, vous pouvez facilement tweeter, suivre, etc. sur Twitter. (Veuillez installer lors de l'utilisation avec Colab)
Tout d'abord, une authentification est requise. Authentifiez Twitter avec le code suivant.
AOuth.py
import twitter
#Définir la clé et le jeton d'accès obtenus(Entrez votre propre clé)
auth = twitter.OAuth(consumer_key="-------------------",
consumer_secret="-------------------",
token="-------------------",
token_secret="-------------------")
t = twitter.Twitter(auth=auth)
Vient ensuite l'acquisition de tweets. Vous pouvez recevoir des tweets avec le code suivant.
python
t.statuses.home_timeline(count =Nombre de tweets acquis)
Vous pouvez le faire avec. Il reviendra avec un fichier json. Cette page est très facile à comprendre comme exemple de réponse. Si vous importez la bibliothèque json, vous pouvez utiliser json comme une liste
Exemple
import json
last_id = get_data[len(get_data)-1]["id"]
Le code ci-dessus obtient l'ID du tweet.
En raison des restrictions strictes sur l'API de Twitter, le nombre de tweets pouvant être acquis en même temps est fixé à environ 200. Référence officielle Par conséquent, vous pouvez l'obtenir en lisant à plusieurs reprises ce code avec l'instruction while.
En utilisant max_id, vous pouvez obtenir des tweets avant l'ID de tweet spécifié.
python
t.statuses.home_timeline(count =Nombre de tweets acquis,max_id =Identifiant du Tweet)
Le point à noter ici est que les tweets avec l'identifiant spécifié seront inclus plus d'une fois. Exclure avec l'instruction if.
Maintenant, vous pouvez obtenir les tweets !!!
Cependant, selon les spécifications de l'API, il semble que le nombre de tweets pouvant être retracés soit d'environ 800 tweets ... (Quel enfer ...) [Articles pouvant recevoir 3200 tweets avec Tweepy](https://www.pytry3g.com/entry/python-twitter-timeline#Cursor%E3%82%92%E4%BD%BF%E3%81%A3% E3% 81% A6% E5% A4% A7% E9% 87% 8F% E3% 81% AE% E3% 83% 84% E3% 82% A4% E3% 83% BC% E3% 83% 88% E3% 82% 92% E5% 8F% 96% E5% BE% 97% E3% 81% 99% E3% 82% 8B), mais je n'ai pas pu l'utiliser car j'ai été pris dans la limite de l'API Twitter de 15 minutes immédiatement après l'avoir essayé. J'ai abandonné après 800 tweets ...
L'idée originale était que je voulais revenir à un tweet de 24 heures, donc j'utiliserai la bibliothèque datetime pour connaître l'heure. Étant donné que l'heure du tweet n'est pas au format datetime, elle est convertie de force par une opération de chaîne de caractères. C'est la partie suivante.
python
import datetime
date_create = get_data[int(len(get_data)-1)]["created_at"] #Obtenez la date et l'heure de création du tweet
date_create_at = datetime.datetime(year=int(date_create[26:30]), month=int(date.month),
day=int(date_create[8:10]), hour=int(date_create[11:13]),minute=int(date_create[14:16]))#Convertir l'heure de publication du tweet
Je voulais comparer l'heure (se terminer quand elle remonte à plus de 24 heures), donc je la soustrais et la convertis en secondes pour qu'il soit facile de comparer les valeurs. Je ne l'ai pas utilisé ...
python
diff = date - date_create_at
...
if diff.seconds >= 86400 or count >15: #24 heures ou lorsque vous êtes coincé dans une limite de boucle
break
Si vous combinez ces domaines, vous pouvez obtenir 800 tweets à partir de l'heure actuelle! (Ouais)
Puis triez. Vous pouvez utiliser le tri de bibliothèque pour trier sans tenir compte de l'efficacité de l'algorithme. Puisqu'il s'agit d'un tri de liste multidimensionnel, utilisez lamda pour le trier.
python
data.sort(key=lambda data: data[5]) #Trier à l'aide d'une expression lambda(Fabo)
De plus, cette fois, nous allons trier par le nombre de favos et le nombre de RT, donc copiez le tableau de données. (Parce que cela semble être plus facile lors de l'exportation) Copy utilise la bibliothèque de copie.
python
import copy
data_RT = copy.copy(data)
Enfin, exportez. Créez-le en vous référant au générateur HTML officiellement publié par Twitter. J'ai trouvé que si je spécifie correctement l'url, elle s'affichera correctement, donc tout ce que j'ai à faire est de remplacer la valeur. Défini dans une fonction.
python
#Créer du HTML à partir de tweets (fonction)
def create_html(text ,username ,userid, tweetid):
html = '<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">' + text + '</p>—' + username +'(@' + userid +') <a href="https://twitter.com/' + userid + '/status/' +tweetid + '?ref_src=twsrc%5Etfw"></a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>'
return html
Écrivez les 10 derniers dans l'instruction For et vous avez terminé! !!
C'est dommage que l'API Twitter soit si restrictive que nous ne pouvions revenir en arrière qu'environ 3 heures au lieu de remonter les 24 premières heures. (Je pense que les résultats vont changer ici en fonction du nombre de followers) De plus, je ne peux pas le faire dans chaque environnement personnel sans m'inscrire en tant que développeur, et comme je le fais avec colab, j'ai le sentiment que la génération de fichiers ne se passe pas bien par rapport au local, et il y a beaucoup d'améliorations ...
Il semble qu'il faudra un peu plus de temps pour obtenir son diplôme de Tsui. .. .. · Résultat d'exécution
Sentiment de code hérité ...
python
import twitter
import json
import datetime
import copy
#Créer du HTML à partir de tweets (fonction)
def create_html(text ,username ,userid, tweetid):
html = '<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">' + text + '</p>—' + username +'(@' + userid +') <a href="https://twitter.com/' + userid + '/status/' +tweetid + '?ref_src=twsrc%5Etfw"></a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>'
return html
#Définir la clé et le jeton d'accès obtenus(Entrez votre propre clé)
auth = twitter.OAuth(consumer_key="-------------------",
consumer_secret="-------------------",
token="-------------------",
token_secret="-------------------")
t = twitter.Twitter(auth=auth)
#Obtenir la chronologie(Revenez aussi loin que possible avec l'instruction while)
date = datetime.datetime.now() #Obtenez le temps maintenant
date = datetime.datetime(year=date.year, month=date.month, day=date.day, hour=date.hour,minute=date.minute)
count = 0 #Pour compter les tweets récupérés
data =[] #Sauvegardez les données acquises
#data_swap =[]
diff = date - date
print("Heure de début",date)
while(1): #Démarrer l'acquisition de données
if diff.seconds >= 86400 or count >15: #24 heures ou lorsque vous êtes coincé dans une limite de boucle
print("Fin de la recherche")
print(count)
break
elif count ==0: #La première fois
get_data = t.statuses.home_timeline(count = 200)
for i in range(len(get_data)):
# create,"id",name,userid,text,"favorite_count","retweet_count"
data_swap = [str(get_data[i]["created_at"]),str(get_data[i]["id"]),str(get_data[i]["user"]["name"]),str(get_data[i]["user"]["screen_name"]),str(get_data[i]["text"]),int(get_data[i]["favorite_count"]),int(get_data[i]["retweet_count"])]
data.append(data_swap)
last_id = get_data[len(get_data)-3]["id"] #Récupérer les tweets précédents à partir de l'identifiant du dernier tweet
date_create = get_data[int(len(get_data)-1)]["created_at"]
date_create_at = datetime.datetime(year=int(date_create[26:30]), month=int(date.month), day=int(date_create[8:10]), hour=int(date_create[11:13]),minute=int(date_create[14:16]))#Prenez le temps de publier des tweets
count = count +1
else: #D'autres fois
get_data = t.statuses.home_timeline(count = 800, max_id = last_id)
if len(get_data) == 0: #Lorsque le nombre de tweets acquis devient 0 en raison de la limite
print("Fin de la recherche")
break
for i in range(len(get_data)):
if i >0: # max_Récupérer après le tweet spécifié par id
data_swap = [str(get_data[i]["created_at"]),str(get_data[i]["id"]),str(get_data[i]["user"]["name"]),str(get_data[i]["user"]["screen_name"]),str(get_data[i]["text"]),int(get_data[i]["favorite_count"]),int(get_data[i]["retweet_count"])]
data.append(data_swap)
last_id = get_data[len(get_data)-1]["id"] #Récupérer les tweets précédents à partir de l'identifiant du dernier tweet
date_create = get_data[int(len(get_data)-1)]["created_at"]
date_create_at = datetime.datetime(year=int(date_create[26:30]), month=int(date.month), day=int(date_create[8:10]), hour=int(date_create[11:13]),minute=int(date_create[14:16]))#Prenez le temps de publier des tweets
diff = date -date_create_at
count = count +1
print("Heure de fin",date_create_at)
print("Nombre total de données:",len(data))
#Trier
size = len(data)
data.sort(key=lambda data: data[5]) #Trier à l'aide d'une expression lambda(Fabo)
data_RT = copy.copy(data)
data_RT.sort(key=lambda data: data[6]) #Trier à l'aide d'une expression lambda(RT)
#Voir les résultats(HTML)
path = '/content/drive/My Drive/Colab Notebooks/TwitterAPI/' + 'data/TimeLine' +str(date.month) +'Mois' +str(date.day) + 'journée' +'.html'
with open(path, mode='w') as f:
f.write("<H1>Les 10 meilleurs tweets avec le plus de favos!<H1>")
f.write("<H1>"+str(date + datetime.timedelta(hours =9)) + "~" +str(date_create_at + datetime.timedelta(hours =9)) +"<H1>")
for i in range(10):
f.write("<H2>Non."+str(i+1)+"Rang!! "+ str(data[size-1-i][5]) + "Fabo<H2>")
f.write(create_html(data[size-1-i][4],data[size-1-i][2],data[size-1-i][3],data[size-1-i][1]))
#Chez RT
f.write("<H1>Les 10 meilleurs tweets avec le plus de RT!<H1>")
for i in range(10):
f.write("<H2>Non."+str(i+1)+"Rang!! "+ str(data[size-1-i][6]) + "RT <H2>")
f.write(create_html(data_RT[size-1-i][4],data_RT[size-1-i][2],data_RT[size-1-i][3],data_RT[size-1-i][1]))
print("Fin d'écriture")