Je voulais obtenir la chronologie des médias (la colonne où j'ai appuyé sur "média" sur la page utilisateur), alors j'écris l'article comme rappel.
(Au fait, le premier Python)
J'ai fait référence aux articles d'autres personnes pour les jetons et la préparation Python requis pour la connexion à l'API Twitter (jet rond)
Reportez-vous à cet article, essayez-le sur votre chronologie.
Si vous imprimez le texte du tweet acquis, vous pouvez voir le résultat.
Vous pouvez obtenir le tweet. L'image a également été enregistrée dans le dossier img du dossier du code source. Cependant, les tweets RT sont également mitigés. Quand vous regardez les médias sur Twitter, vous ne devriez pas voir ce que la personne RT, et cette fois, je veux également exclure les RT.
Si vous regardez Document officiel, spécifications API de user_timeline, vous pouvez voir que le paramètre API est ** Il existe un paramètre interne appelé include_rts **, définissez-le sur ** False **. Dans le cas de tweepy, il semble qu'il puisse être réglé en écrivant comme suit
tweetpytest.py
search_results = tweepy.Cursor(api.user_timeline, screen_name=key_account, include_rts=False).items(count_no)
Cela exclura RT des résultats. En guise de mise en garde, le paramètre count ne correspond pas au nombre de tweets qui ont été réellement acquis, mais en regardant à nouveau le document officiel, il semble qu'après l'acquisition de la chronologie incluant RT, les tweets sont sélectionnés en fonction de la condition du paramètre.
Après cela, activez la valeur renvoyée de tweepy avec for in pour obtenir l'URL de l'image ou de la vidéo et la renvoyer à la méthode de sauvegarde. La procédure est la suivante
Il semble que la valeur de retour de tweepy soit de type ItemIterator et que l'élément enfant soit de type Status (confirmé par le débogage). S'il s'agit d'un type de liste, il peut être jugé par list.get ('nom de l'élément') etc., mais cette fois c'est une propriété de la classe, donc cette méthode ne peut pas être utilisée. Cette fois, il est jugé par la ** méthode hasattr **.
tweetpytest.py
if hasattr(result, 'extended_entities'):
Sans cela, ce n'est pas un tweet médiatique, alors ignorez-le et passez à la ligne suivante.
Les tweets d'image n'ont pas video_info, vous pouvez donc en juger.
GIF est également enregistré au format mp4 pour le moment.
tweetpytest.py
bitrate_array = []
for movie in ex_media_video_variants:
bitrate_array.append(movie.get('bitrate',0))
max_index = bitrate_array.index(max(bitrate_array))
movie_url = ex_media_video_variants[max_index]['url']
Les éléments sont stockés dans différentes tailles et formats, et il semble qu'il n'y ait aucune garantie quant à ce qui se trouve dans quel index. S'il s'agit d'une décision fixe, la taille peut être petite, ou vous pouvez obtenir une URL vidéo dont le format n'est pas mp4 (il y en avait). Par conséquent, analysez le contenu avec l'instruction for afin de pouvoir supprimer la vidéo mp4 avec le plus grand débit binaire.
En mettant ce qui précède ensemble, la source est la suivante.
tweetpytest.py
# coding: UTF-8
#!/usr/bin/python3
import json, config #Module et configuration json standard.Chargement py
from requests_oauthlib import OAuth1Session #Chargement de la bibliothèque OAuth
import tweepy
import time
import datetime
import urllib.error
import urllib.request
import re
import sys, calendar
import update_tweetinfo_csv
CONSUMER_KEY = config.CONSUMER_KEY
CONSUMER_SECRET = config.CONSUMER_SECRET
ACCESS_TOKEN = config.ACCESS_TOKEN
ACCESS_SECRET = config.ACCESS_TOKEN_SECRET
FOLDER_PASS = 'img/'
#Authentification
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)
def download_file(url, file_name):
urllib.request.urlretrieve(url, FOLDER_PASS + file_name)
key_account = input('Enter account name:')
count_no = int(input('Set search count:'))
search_results = tweepy.Cursor(api.user_timeline, screen_name=key_account, include_rts=False).items(count_no)
for result in search_results:
if hasattr(result, 'extended_entities'): #le résultat est'extended_entities'Déterminez si vous avez des attributs
ex_media = result.extended_entities['media']
tweet_id = result.id
if 'video_info' in ex_media[0]:
ex_media_video_variants = ex_media[0]['video_info']['variants']
media_name = '%s-%s.mp4' % (key_account, tweet_id)
if 'animated_gif' == ex_media[0]['type']:
#Fichier GIF
gif_url = ex_media_video_variants[0]['url']
download_file(gif_url, media_name)
else:
#Fichier vidéo
bitrate_array = []
for movie in ex_media_video_variants:
bitrate_array.append(movie.get('bitrate',0))
max_index = bitrate_array.index(max(bitrate_array))
movie_url = ex_media_video_variants[max_index]['url']
download_file(movie_url, media_name)
else:
#Fichier d'image
for image in ex_media:
image_url = image['media_url']
image_name = image_url.split("/")[len(image_url.split("/"))-1]
download_file(image_url + ':orig', image_name)
print('Fin')
Un dossier img est créé sous le dossier avec la source, et les images et les vidéos sont stockées en dessous. Pour le moment, le but de cette période est atteint.
Pour le moment, il est complété ci-dessus, mais avec cela, tous les tweets seront recherchés à chaque fois. Si vous souhaitez rechercher uniquement les tweets plus récents que cette fois-ci lorsque vous le lancez la prochaine fois, définissez le paramètre suivant.
search_results = tweepy.Cursor(api.user_timeline, screen_name=key_account, include_rts=False, since_id='ID du dernier tweet').items(count_no)
Cela ajoutera la condition "since_id <ID cible de recherche".
À la fin de la source précédente, affichez search_results = tweepy.Cursor (api.user_timeline, screen_name = key_account, include_rts = False, since_id = pre_last_tweet_id-1) .items (count_no)
Si vous conservez le dernier identifiant de tweet à la fin de la boucle et que vous le sauvegardez dans un fichier texte ou quelque chose en association avec l'identifiant utilisateur, il semble que le nombre total de recherches puisse être réduit.
Au début, je l'ai utilisé comme source pour accéder à l'API sans utiliser tweepy, mais j'ai été pris dans la limite où je ne peux obtenir que 200 cas avec une seule demande. J'ai essayé de former une boucle d'accès tout en obtenant since_id et max_id, mais comme tweepy peut être pris normalement, je suis passé à une source qui utilise tweepy en cours de route.
Sur la base de cette source, je prévois de créer une application qui enregistre les images un peu plus facilement.
J'ai essayé d'obtenir l'image Twitter "Batch" avec python Documentation officielle, spécifications API pour user_timeline
Recommended Posts