[PYTHON] Laden Sie die Bilder und Videos herunter, die in den Tweets enthalten sind, die Ihnen auf Twitter gefallen haben, und laden Sie sie auf Google Drive hoch

Einführung

Dies ist mein zweiter Beitrag, obwohl ich ein Anfänger bin. Ich hoffe du wirst mit warmen Augen über mich wachen. Es ist in [GitHub] aufgeführt (https://github.com/kotaromz/SavePicsAndVideosYouLiked).

Möglicherweise möchten Sie die Bilder und Videos speichern, die an die Tweets Ihrer Lieblingskünstler, Entertainer, Sportler usw. angehängt sind. Ich fragte mich, ob ich programmgesteuert etwas dagegen tun könnte.

Überblick

Geben Sie die Twitter-Benutzer-ID an, laden Sie die in den Tweets enthaltenen Bilder / Videos einmal in einen lokalen Ordner herunter und laden Sie sie dann in den angegebenen Ordner von Google Drive hoch. Es funktioniert, indem Sie den Python-Befehl von cmd aus drücken. Es unterstützt keine Dinge wie das Bewegen in regelmäßigen Abständen oder das Starten. Ich würde mich gerne eines Tages damit befassen, aber das Problem in Frage bleibt bestehen, also ...

Wir empfehlen, dass Sie die Twitter-API und die Google Drive-API verwenden. Weitere Informationen finden Sie auf der Website unter Referenz. Es ist sehr leicht zu verstehen.

Quellcode

↓ Die Einstellungen sind zusammengefasst. Oben ist der Twitter-API-Schlüssel und der Benutzername und unten die ID des zu speichernden Google Drive-Verzeichnisses. Bitte geben Sie den Wert ein, den Sie selbst erhalten haben.

config.py



CONSUMER_KEY = "********************************"
CONSUMER_SECRET = "********************************"
ACCESS_TOKEN = "********************************"
ACCESS_TOKEN_SECRET = "********************************"
USER_ID = "***********"

GOOGLEDRIVE_PICS_DIRECTORY_ID = "********************************"
GOOGLEDRIVE_VIDEOS_DIRECTORY_ID = "********************************"

↓ Der Teil, der sich als Hauptteil bewegt. Codiert für die Debug-Ausgabe mit cmd. Es wird automatisch festgestellt, ob Bilder / Videos enthalten sind. Was Videos betrifft, gibt es einige, die nicht .mp4 sind, und einige, die klein sind, also versuche ich, das mit der größten Größe zu bekommen.

get_data.py


import json, config
from requests_oauthlib import OAuth1Session
import re
import download
import upload

CONSUMER_KEY = config.CONSUMER_KEY
CONSUMER_SECRET = config.CONSUMER_SECRET
ACCESS_TOKEN = config.ACCESS_TOKEN
ACCESS_TOKEN_SECRET = config.ACCESS_TOKEN_SECRET

USER_ID = config.USER_ID

twitter = OAuth1Session(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

url = "https://api.twitter.com/1.1/favorites/list.json"

params ={'screen_name' : USER_ID, 'count' : 200}
res = twitter.get(url, params = params)

def main():
    if res.status_code == 200:
        for line in json.loads(res.text):
            if('extended_entities' not in line):
                return
            for i in line['extended_entities']['media']:
                if('video_info' in i): #if the tweet contains a video.
                    dic = {}
                    for v in i['video_info']['variants']:
                        if ('.mp4' in v['url']): #only .mp4 file.
                            dic[v['url']] = find_max_size(v['url'])
                    print(max(dic, key=dic.get).encode('cp932', 'ignore').decode('cp932'))
                    download.download_videos(max(dic, key=dic.get))
                else:
                    print((i['media_url_https']).encode('cp932', 'ignore').decode('cp932'))
                    download.download_pics(i['media_url_https'])
    else:
        print("Failed: %d" % res.status_code)

def find_max_size(url): #Find the max size video.
    s = re.findall(r'/\d+x\d+/', url) #e.g. /720x1280/
    t = re.findall(r'/\d+x', str(s[0])) #e.g. /720x
    u = re.findall(r'x\d+/', str(s[0])) #e.g. x1280/
    x = int(t[0].replace('x', '').replace('/', '')) #e.g. 720
    y = int(u[0].replace('x', '').replace('/', '')) #e.g. 1280
    return x * y

main()
upload.upload_pics_videos()

↓ Dies ist der Teil zum Herunterladen von Bildern / Videos in einen lokalen Ordner. Ich habe Ordner mit dem Namen / pics und / videos erstellt und dort gespeichert. Der Dateiname ist nach Datum und Uhrzeit eindeutig.

download.py


import requests
import datetime
import os

def download_pics(url):
  os.makedirs('pics/', exist_ok=True)
  file_name = "pics/" + datetime.datetime.now().strftime("%Y%m%d%H%M%S%f") + ".jpg "

  response = requests.get(url)
  image = response.content

  with open(file_name, "wb") as stream:
      stream.write(image)

def download_videos(url):
  os.makedirs('videos/', exist_ok=True)
  file_name = "videos/" + datetime.datetime.now().strftime("%Y%m%d%H%M%S%f") + ".mp4"

  response = requests.get(url)
  video = response.content

  with open(file_name, "wb") as stream:
      stream.write(video)

↓ Schließlich ist es der Teil, der auf Google Drive hochgeladen werden soll. Die Bewegung besteht darin, in einen Ordner hochzuladen, der zuvor auf dem Laufwerk erstellt wurde.

upload.py


from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from pathlib import Path
import config

def upload_pics_videos():
  gauth = GoogleAuth()
  gauth.CommandLineAuth()
  drive = GoogleDrive(gauth)

  for p in Path("pics").glob("*"):
    q = str(p)
    f = drive.CreateFile({
      "parents": [{
        "id": config.GOOGLEDRIVE_PICS_DIRECTORY_ID
        }]
      })
    f.SetContentFile(q)
    f.Upload()
    print(f['title'], f['id'])

  for p in Path("videos").glob("*"):
    q = str(p)
    f = drive.CreateFile({
      "parents": [{
        "id": config.GOOGLEDRIVE_VIDEOS_DIRECTORY_ID
        }]
      })
    f.SetContentFile(q)
    f.Upload()
    print(f['title'], f['id'])

schließlich

Sie sollten die Quelle schöner schreiben. Obwohl ich neu in Python bin, bin ich reuig. Wo finde ich den Variablennamen oder die maximale Größe des Videos? .. .. Ich hatte jedoch den starken Wunsch, einen Artikel an Herrn Qiita zu senden, der mir immer als Ergebnis verpflichtet ist, und ich habe etwas gemacht, das funktioniert, also habe ich den Mut genommen, es zu veröffentlichen.

Frage

Ich möchte jemanden fragen, der mit der Twitter-API vertraut ist, aber über die Einschränkungen der diesmal verwendeten GET-Favoriten / -Liste. Auch wenn Sie diese Anwendung oder dieses Programm tatsächlich ausführen

  1. Die angegebene Nummer kann nicht abgerufen werden
  2. Manchmal kann nicht einmal ein Fall erhalten werden.
  3. Es funktioniert nicht gut, auch wenn es einmal täglich in Intervallen gestartet wird.

Wenn ich es im Netz nachschaue

Es scheint eine solche Grenze zu geben, aber ich frage mich, warum sie erreicht wird. Liegt dies daran, dass die API nicht ordnungsgemäß verwendet wird, oder handelt es sich um ein Problem wie einen schweren Server? Ich bin ein Anfänger, also bin ich mir nicht sicher. Ich würde mich freuen, wenn Sie mich in den Kommentaren wissen lassen könnten.

Referenz

Zusammenfassung der Verfahren von der Registrierung der Twitter-API (Kontoantragsmethode) bis zur Genehmigung * Informationen ab August 2019

Bilder mit Python auf Google Drive hochladen

Recommended Posts

Laden Sie die Bilder und Videos herunter, die in den Tweets enthalten sind, die Ihnen auf Twitter gefallen haben, und laden Sie sie auf Google Drive hoch
Laden Sie Bilder mit Python auf Google Drive hoch
Speichern Sie den Tweet von Twitter mit Geo als CSV und zeichnen Sie ihn auf Google Map.
Speichern Sie Bilder im Web mit Python (Colab) auf einem Laufwerk.
Skript zum Sichern von Ordnern auf dem Server in Google Drive
Laden Sie Google Drive-Dateien in Python herunter
Laden Sie Bilder mit Falcon hoch und laden Sie sie herunter
Erhalten Sie Tweets mit der Google Cloud-Funktion und speichern Sie Bilder automatisch in Google Fotos
Codebeispiel zum Abrufen von oauth_token und oauth_token_secret der Twitter-API in Python 2.7
Erstellen und bearbeiten Sie Tabellenkalkulationen in einem beliebigen Ordner auf Google Drive mit Python
[Android] Zeigen Sie Bilder im Web im infoWindow von Google Map an
Laden Sie gemeinsam die Bilder herunter, die in den Text der Pull-Anfrage auf Github eingefügt wurden
In Dataflow implementiert, um die hierarchische Struktur von Google Drive in Google Cloud Storage zu kopieren