C'est mon deuxième article même si je suis débutant. J'espère que vous veillerez sur moi avec des yeux chaleureux. Il est répertorié dans GitHub.
Vous voudrez peut-être enregistrer les images et les vidéos jointes aux tweets de vos artistes, artistes, athlètes, etc. préférés. Je me suis demandé si je pouvais faire quelque chose à ce sujet par programme.
Spécifiez l'ID utilisateur Twitter, téléchargez les images / vidéos incluses dans les tweets que la personne a aimés, dans un dossier local une fois, puis téléchargez-les dans le dossier spécifié de Google Drive. Cela fonctionne en appuyant sur la commande python à partir de cmd. Il ne prend pas en charge des choses comme se déplacer à intervalles réguliers ou toujours démarrer. J'aimerais y remédier un jour, mais le problème dans Question demeure, alors ...
Nous vous recommandons d'utiliser l'API Twitter et l'API Google Drive. Pour plus de détails, reportez-vous au site dans Reference. C'est très facile à comprendre.
↓ Les paramètres sont résumés. Le haut est la clé API Twitter et le nom d'utilisateur, et le bas est l'ID du répertoire Google Drive à enregistrer. Veuillez saisir la valeur que vous avez obtenue vous-même.
config.py
CONSUMER_KEY = "********************************"
CONSUMER_SECRET = "********************************"
ACCESS_TOKEN = "********************************"
ACCESS_TOKEN_SECRET = "********************************"
USER_ID = "***********"
GOOGLEDRIVE_PICS_DIRECTORY_ID = "********************************"
GOOGLEDRIVE_VIDEOS_DIRECTORY_ID = "********************************"
↓ La partie qui se déplace en tant que principale. Encodé pour la sortie de débogage avec cmd. Il est automatiquement déterminé si les images / vidéos sont incluses. En ce qui concerne les vidéos, il y en a qui ne sont pas .mp4 et d'autres qui sont de petite taille, alors j'essaie d'obtenir celle qui a la plus grande taille.
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()
↓ C'est la partie pour télécharger des images / vidéos dans un dossier local. J'ai créé des dossiers appelés / pics et / vidéos et je les y ai sauvegardés. Le nom du fichier est unique par date et heure.
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)
↓ Enfin, c'est la partie à télécharger sur Google Drive. Il se déplace pour télécharger dans le dossier créé à l'avance sur le lecteur.
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'])
Vous devriez écrire la source plus joliment. Même si je suis nouveau sur Python, je suis plein de remords. Où trouver le nom de la variable ou la taille maximale de la vidéo. .. .. Cependant, j'avais un fort désir de poster un article à M. Qiita, qui m'est toujours redevable comme livrable, et j'ai fait quelque chose qui fonctionne, alors j'ai pris le courage de le publier.
Je voudrais demander à quelqu'un qui est familier avec l'API Twitter, mais sur les restrictions sur les favoris / liste GET utilisés cette fois. Même si vous exécutez réellement cette application ou ce programme
Quand je cherche sur le net
Il semble y avoir une limite comme celle-là, mais je me demande pourquoi elle est respectée. Est-ce parce que l'API n'est pas utilisée correctement ou s'agit-il d'un problème tel qu'un serveur lourd? Je suis un débutant donc je ne suis pas sûr. Je vous serais reconnaissant si vous pouviez me le faire savoir dans les commentaires.
Télécharger des images sur Google Drive avec Python
Recommended Posts