Obtenez des images et des vidéos de la chronologie des médias avec Python + Tweepy

Aperçu

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.

Quoi utiliser

(Au fait, le premier Python)

0. Préparatifs

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)

1. Essayez d'abord d'utiliser Tweepy

Reportez-vous à cet article, essayez-le sur votre chronologie.

Si vous imprimez le texte du tweet acquis, vous pouvez voir le résultat.

キャプチャ.PNG

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.

2. Définissez include_rts = False pour exclure 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.

3. Analysez le résultat de retour de tweepy

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

1. Confirmez l'existence de ** 'extended_entities' **, sinon ce n'est pas un tweet médiatique, donc il n'est pas applicable

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.

2. Vérifiez s'il y a'video_info 'dans le résultat [' extended_entities '] [' media '] [0], s'il s'agit d'une vidéo ou d'un GIF, sinon, confirmez l'image

Les tweets d'image n'ont pas video_info, vous pouvez donc en juger.

3. GIF si résultat ['extended_entities'] ['media'] [0] ['type'] = animated_gif. Enregistrer [0] en mp4

GIF est également enregistré au format mp4 pour le moment.

4. Résultat de la boucle ['extended_entities'] ['media'] [0] ['video_info'] ['variants'], enregistrez mp4 avec le plus grand binrate

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.

4. Source

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')

Image d'exécution

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. キャプチャ.PNG

5. (Bonus) À propos de since_id

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.

6. Mis à part

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.

URL de référence

J'ai essayé d'obtenir l'image Twitter "Batch" avec python Documentation officielle, spécifications API pour user_timeline

Recommended Posts

Obtenez des images et des vidéos de la chronologie des médias avec Python + Tweepy
Obtenez la chronologie Twitter avec Python
Capturer des images avec Pupil, python et OpenCV
Importer et exporter des images GeoTiff avec Python
Obtenez des images d'OpenStreetMap et de la carte de l'Institut géographique avec Python + py-staticmaps
Obtenez des images de la carte OpenStreetMap et de l'Institut géographique avec Python + staticmap
Rechercher et télécharger automatiquement des vidéos YouTube avec Python
Obtenez le nom de la branche git et le nom de la balise avec python
Obtenez l'objet et le corps de Gmail avec Python et l'API Gmail
Recevez des tweets avec Tweepy
Obtenez date avec python
Obtenez des commentaires sur youtube Live avec [python] et [pytchat]!
Recevoir des e-mails de Gmail et étiqueter avec Python3
[Python] Obtenez des informations sur les utilisateurs et des articles sur l'API de Qiita
Obtenez le code du pays avec python
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Images en bordure avec python Partie 1
Python et matériel - Utilisation de RS232C avec Python -
Obtenez des données Youtube avec python
Obtenir l'ID de thread avec python
Commencez avec Python! ~ ② Grammaire ~
python avec pyenv et venv
[python] Obtenir le quotient et le surplus
Obtenez des stocks avec Python
Obtenir le répertoire personnel avec python
Obtenir un événement de clavier avec python
Obtenez des informations sur l'alambic avec Python
Fonctionne avec Python et R
Comparez HTTP GET / POST avec cURL (commande) et Python (programmation)
LGTM --Composez des images LGTM avec des vidéos et des photos et produisez une animation GIF
Débarrassez-vous des données sales avec Python et les expressions régulières
Exemple d'analyse HTTP GET et JSON avec Pepper Python
[Python x Zapier] Obtenez des informations d'alerte et notifiez avec Slack
Obtenez des données supplémentaires vers LDAP avec python (Writer et Reader)
Communiquez avec FX-5204PS avec Python et PyUSB
Reconnaissance des nombres dans les images avec Python
Briller la vie avec Python et OpenCV
Commencez avec Python! ~ ① Construction de l'environnement ~
Robot fonctionnant avec Arduino et python
Installez Python 2.7.9 et Python 3.4.x avec pip.
Réseau neuronal avec OpenCV 3 et Python 3
Modulation et démodulation AM avec python
Lien pour commencer avec python
Scraping avec Node, Ruby et Python
Obtenez des avis avec l'API googlemap de python
Grattage avec Python, Selenium et Chromedriver
Grattage avec Python et belle soupe
Obtenez la météo avec les requêtes Python
Obtenez une capture d'écran Web avec python
Obtenez la météo avec les requêtes Python 2
[Python] Obtenez des données économiques avec DataReader
Obtenez des données de VPS MySQL avec Python 3 et SQL Alchemy
Encodage et décodage JSON avec python
Comment démarrer avec Python
Introduction à Hadoop et MapReduce avec Python
[GUI en Python] PyQt5-Glisser-déposer-
Publiez plusieurs images Twitter avec python
[Petite histoire] Obtenez l'horodatage avec Python