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.
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.
↓ 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'])
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.
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
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.
Bilder mit Python auf Google Drive hochladen
Recommended Posts