Mit Python + Tweepy können Sie Bilder und Videos der Medienzeitleiste abrufen

Überblick

Ich wollte die Medienzeitleiste (die Spalte, in der ich auf der Benutzerseite auf "Medien" geklickt habe) abrufen, also schreibe ich den Artikel als Erinnerung.

Was zu verwenden

(Übrigens der erste Python)

0. Vorbereitungen

Ich bezog mich auf die Artikel anderer Leute für die Token und die Python-Vorbereitung, die für die Twitter-API-Verbindung erforderlich sind (Round Throw).

1. Versuchen Sie zuerst, Tweepy zu verwenden

Siehe diesen Artikel, versuchen Sie es auf Ihrer Timeline.

Wenn Sie den Text des erfassten Tweets drucken, können Sie das Ergebnis sehen.

キャプチャ.PNG

Sie können den Tweet bekommen. Das Bild wurde auch im Ordner img des Quellcode-Ordners gespeichert. RT-Tweets werden jedoch auch gemischt. Wenn Sie sich die Medien auf Twitter ansehen, sollten Sie nicht sehen, was die Person RTs, und dieses Mal möchte ich auch RTs ausschließen.

2. Setzen Sie include_rts = False, um RT auszuschließen

Wenn Sie sich Offizielles Dokument, API-Spezifikationen von user_timeline ansehen, sehen Sie, dass der API-Parameter ** ist Es gibt einen internen Parameter namens include_rts **, setzen Sie diesen auf ** False **. Im Fall von Tweepy scheint es, dass es durch Schreiben wie folgt eingestellt werden kann

tweetpytest.py


search_results = tweepy.Cursor(api.user_timeline, screen_name=key_account, include_rts=False).items(count_no)

Dadurch wird RT von den Ergebnissen ausgeschlossen. Als Einschränkung stimmt der Parameter count nicht mit der Anzahl der tatsächlich erfassten Tweets überein. Bei erneuter Betrachtung des offiziellen Dokuments scheint es jedoch so zu sein, dass nach dem Erfassen der Zeitleiste einschließlich RT Tweets basierend auf der Parameterbedingung ausgewählt werden.

3. Analysieren Sie das Rückgabeergebnis von tweepy

Drehen Sie danach den zurückgegebenen Wert von tweepy mit for in, um die Bild- oder Video-URL abzurufen und in die Speichermethode zu werfen. Das Verfahren ist wie folgt

1. Bestätigen Sie das Vorhandensein von ** 'extended_entities' **, da es sich sonst nicht um einen Medientweet handelt und daher nicht anwendbar ist

Es scheint, dass der Rückgabewert von tweepy vom Typ ItemIterator und das untergeordnete Element vom Typ Status ist (durch Debugging bestätigt). Wenn es sich um einen Listentyp handelt, kann er anhand von list.get ('Elementname') usw. beurteilt werden. Diesmal ist er jedoch eine Eigenschaft der Klasse, sodass diese Methode nicht verwendet werden kann. Dieses Mal wird es nach der ** Hasattr-Methode ** beurteilt.

tweetpytest.py


if hasattr(result, 'extended_entities'):

Ohne dies ist es kein Medientweet. Ignorieren Sie es also und fahren Sie mit der nächsten Zeile fort.

2. Überprüfen Sie, ob das Ergebnis ['extended_entities'] ['media'] [0] 'Video_info' enthält. Wenn es sich um ein Video oder ein GIF handelt, bestätigen Sie das Bild, falls nicht

Bild-Tweets haben keine video_info, daher können Sie dies beurteilen.

3. GIF wenn Ergebnis ['erweiterte_Entitäten'] ['Medien'] [0] ['Typ'] = animiertes_GIF. Speichern Sie [0] als mp4

GIF wird vorerst auch als mp4 gespeichert.

4. Schleifenergebnis ['extended_entities'] ['media'] [0] ['video_info'] ['Varianten'], speichern Sie mp4 mit der größten 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']

Elemente werden in verschiedenen Größen und Formaten gespeichert, und es scheint keine Garantie dafür zu geben, was in welchem Index enthalten ist. Wenn es sich um eine feste Entscheidung handelt, ist die Größe möglicherweise klein, oder Sie erhalten eine Video-URL, deren Format nicht mp4 ist (es gab). Analysieren Sie daher den Inhalt mit der for-Anweisung, damit Sie das mp4-Video mit der größten Binrate löschen können.

4. Quelle

Zusammengenommen lautet die Quelle wie folgt.

tweetpytest.py


# coding: UTF-8
#!/usr/bin/python3

import json, config #Standard json Modul und Konfiguration.Laden von py
from requests_oauthlib import OAuth1Session #Laden der OAuth-Bibliothek
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/'

#Authentifizierung
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'): #Ergebnis ist'extended_entities'Bestimmen Sie, ob Sie Attribute haben
        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']:
                #GIF-Datei
                gif_url = ex_media_video_variants[0]['url']
                download_file(gif_url, media_name)
            else:
                #Videodatei
                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:
            #Bilddatei
            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('Ende')

Ausführungsbild

Unter dem Ordner mit der Quelle wird ein IMG-Ordner erstellt, unter dem Bilder und Videos gespeichert werden. Der Zweck dieser Zeit ist vorerst erreicht. キャプチャ.PNG

5. (Bonus) Über Since_id

Vorerst ist es oben abgeschlossen, aber damit werden jedes Mal alle Tweets durchsucht. Wenn Sie beim nächsten Start nur nach Tweets suchen möchten, die neuer als diese Zeit sind, legen Sie den folgenden Parameter fest.

search_results = tweepy.Cursor(api.user_timeline, screen_name=key_account, include_rts=False, since_id='Letzte letzte Tweet ID').items(count_no)

Dadurch wird die Bedingung "Since_ID <Suchziel-ID" hinzugefügt.

Drucken Sie am Ende der vorherigen Quelle die letzte ID drucksearch_results = tweepy.Cursor (api.user_timeline, screen_name = key_account, include_rts = False, da_id = pre_last_tweet_id-1) .items (count_no)

Wenn Sie die letzte Tweet-ID am Ende der Schleife behalten und sie in einer Textdatei oder etwas in Verbindung mit der Benutzer-ID speichern, kann die Gesamtzahl der Suchvorgänge anscheinend reduziert werden.

6. Nebenbei

Zuerst habe ich es als Quelle verwendet, um die API ohne Verwendung von Tweepy aufzurufen, aber ich war in der Grenze gefangen, dass ich mit einer Anfrage nur bis zu 200 Fälle erhalten kann. Ich habe versucht, eine Schleife für den Zugriff zu bilden, während ich Since_id und Max_id erhalten habe, aber da Tweepy normal verwendet werden kann, habe ich zu einer Quelle gewechselt, die unterwegs Tweepy verwendet.

Basierend auf dieser Quelle plane ich, eine Anwendung zu erstellen, die Bilder etwas bequemer speichert.

Referenz-URL

Ich habe versucht, das Twitter-Bild "Batch" mit Python zu erhalten Offizielle Dokumentation, API-Spezifikationen für user_timeline

Recommended Posts

Mit Python + Tweepy können Sie Bilder und Videos der Medienzeitleiste abrufen
Holen Sie sich Twitter-Timeline mit Python
Bilder mit Pupil, Python und OpenCV aufnehmen
Importieren und Exportieren von GeoTiff-Bildern mit Python
Holen Sie sich Bilder von OpenStreetMap und Geographical Institute Map mit Python + py-staticmaps
Holen Sie sich Bilder von OpenStreetMap und Geographical Institute Map mit Python + staticmap
Suchen und laden Sie YouTube-Videos automatisch mit Python herunter
Holen Sie sich den Git-Zweignamen und den Tag-Namen mit Python
Holen Sie sich den Betreff und den Text von Google Mail mit der Python- und Google Mail-API
Holen Sie sich Tweets mit Tweepy
Holen Sie sich ein Date mit Python
Erhalten Sie Kommentare auf Youtube Live mit [Python] und [Pytchat]!
Erhalten Sie E-Mails von Google Mail und beschriften Sie sie mit Python3
[Python] Mit der API von Qiita erhalten Sie Benutzer- und Artikelinformationen
Holen Sie sich den Ländercode mit Python
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
Angrenzende Bilder mit Python Teil 1
Python und Hardware-Verwenden von RS232C mit Python-
Holen Sie sich Youtube-Daten mit Python
Holen Sie sich die Thread-ID mit Python
Beginnen Sie mit Python! ~ ② Grammatik ~
Python mit Pyenv und Venv
[Python] Quotient und Überschuss erhalten
Holen Sie sich Lager mit Python
Holen Sie sich das Home-Verzeichnis mit Python
Holen Sie sich Tastaturereignis mit Python
Holen Sie sich Alembic-Informationen mit Python
Funktioniert mit Python und R.
Vergleichen Sie HTTP GET / POST mit cURL (Befehl) und Python (Programmierung).
LGTM - Erstellen Sie LGTM-Bilder mit Videos und Fotos und geben Sie GIF-Animationen aus
Befreien Sie sich mit Python und regulären Ausdrücken von schmutzigen Daten
Beispiel für das Parsen von HTTP GET und JSON mit Pfefferpython
[Python x Zapier] Erhalten Sie Warninformationen und benachrichtigen Sie mit Slack
Holen Sie sich zusätzliche Daten zu LDAP mit Python (Writer und Reader)
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Zahlenerkennung in Bildern mit Python
Leuchtendes Leben mit Python und OpenCV
Beginnen Sie mit Python! ~ ① Umweltbau ~
Roboter läuft mit Arduino und Python
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
Neuronales Netzwerk mit OpenCV 3 und Python 3
AM-Modulation und Demodulation mit Python
Link, um mit Python zu beginnen
Scraping mit Node, Ruby und Python
Holen Sie sich Bewertungen mit Python Googlemap API
Scraping mit Python, Selen und Chromedriver
Kratzen mit Python und schöner Suppe
Holen Sie sich das Wetter mit Python-Anfragen
Holen Sie sich Web-Screen-Capture mit Python
Holen Sie sich das Wetter mit Python-Anfragen 2
[Python] Mit DataReader Wirtschaftsdaten abrufen
Holen Sie sich Daten von VPS MySQL mit Python 3 und SQL Alchemy
JSON-Codierung und -Decodierung mit Python
Erste Schritte mit Python
Hadoop-Einführung und MapReduce mit Python
[GUI in Python] PyQt5-Drag & Drop-
Veröffentlichen Sie mehrere Twitter-Bilder mit Python
[Kleine Geschichte] Holen Sie sich mit Python einen Zeitstempel