Ich wollte die Medienzeitleiste (die Spalte, in der ich auf der Benutzerseite auf "Medien" geklickt habe) abrufen, also schreibe ich den Artikel als Erinnerung.
(Übrigens der erste Python)
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).
Siehe diesen Artikel, versuchen Sie es auf Ihrer Timeline.
Wenn Sie den Text des erfassten Tweets drucken, können Sie das Ergebnis sehen.
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.
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.
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
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.
Bild-Tweets haben keine video_info, daher können Sie dies beurteilen.
GIF wird vorerst auch als mp4 gespeichert.
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.
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')
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.
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.
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.
Ich habe versucht, das Twitter-Bild "Batch" mit Python zu erhalten Offizielle Dokumentation, API-Spezifikationen für user_timeline
Recommended Posts