[PYTHON] Recevez des tweets avec la fonction Google Cloud et enregistrez automatiquement les images dans Google Photos

introduction

Récemment, il est difficile de télécharger des images Twitter une par une tout en travaillant et de les apporter à Google Photos. C'est un record que si vous êtes ingénieur, vous pouvez l'automatiser.

Je veux juste une image d'une idole qui veut télécharger une image Twitter. Cela n'a pas d'autre but.

Objectif final

Recevez régulièrement des tweets → Téléchargez s'il y a une image → Téléchargez l'image téléchargée sur Google Photo.

environnement

Google Cloud Functions https://cloud.google.com/functions/?hl=ja

Un service qui exécute une fonction spécifique. Cela ressemble plus à un petit programme qu'à l'exécution d'un grand programme. Cette fois, le programme compte environ 120 lignes, j'ai donc choisi celui-ci.

Si le prix n'est pas bon, il ne dépassera pas le cadre libre permanent (je pense que même si vous faites pas mal de fonctions, cela ne le dépassera pas). Étant donné que ce programme provoque une communication en dehors de l'API Google (acquisition de Tweet et téléchargement d'image), nous prenons des mesures pour réduire la fréquence d'exécution. Cependant, comme nous ne savons pas où regarder l'utilisation du réseau, il est difficile de savoir combien de communication se produit réellement, même maintenant que nous avons commencé à fonctionner.

Le langage défini pour la fonction cette fois est python. La raison en est que je l'utilise récemment pour mon entreprise. Il y a d'autres langages qui peuvent être utilisés, donc vérifions avant de commencer le développement (je ne l'écrirai pas ici car cela peut changer)

La liste de prix est ici.

Google Cloud Scheduler https://cloud.google.com/scheduler/?hl=ja

Il est facile de se connecter à Google Cloud Functions, je vais donc laisser à ce type le soin de s'exécuter régulièrement. Les frais sont déterminés par le nombre d'emplois, mais c'est un service bon marché et facile à utiliser même s'il dépasse la limite gratuite.

La liste de prix est ici.

Avant de développer

Cette fois, nous utiliserons GCP, Google API (Photos), Twitter API et diverses API, nous allons donc définir divers paramètres.

Liés à GCP

https://cloud.google.com/?hl=ja

Ce n'est pas particulièrement gênant à mettre en place, donc ça se termine rapidement.

Google Photos API https://developers.google.com/photos

Vous devez activer l'API à partir de l'URL ci-dessus. L'activation elle-même est facile, mais vous devez autoriser l'utilisation d'OAuth pour appeler l'API. Ici Doit être obtenu jusqu'à ce que le jeton de rafraîchissement soit obtenu, alors faisons-le à l'avance.

Twitter API https://developer.twitter.com/content/developer-twitter/ja.html

C'était le plus gênant. L'opération est simple, mais comme l'explication de l'application en anglais est requise lors de l'inscription en tant que développeur, l'explication doit être rédigée en anglais sur une certaine longueur. J'ai l'impression que la politique lors de la création d'une application change considérablement, alors soyez prudent lorsque vous travaillez.

Il y avait des informations selon lesquelles le japonais allait bien, mais à partir de janvier 2020, l'anglais était obligatoire.

Même si vous n'avez pas beaucoup d'anglais, vous pouvez percer en traduisant du japonais simple vers Google, pour ne pas avoir à réfléchir trop fort. C'est certainement plus gênant que d'écrire en japonais.

L'examen lui-même s'est terminé en un instant. Cela dépend peut-être de la façon dont vous choisissez vos options, donc cela peut être différent pour chaque personne.

la mise en oeuvre

Le programme lui-même est répertorié sur github, veuillez donc le voir pour la version complète. Si vous créez une variable d'environnement ou .env, vous pouvez l'exécuter localement.

En termes de traitement, j'utilise simplement python-twitter pour obtenir le tweet de USER_LIST défini dans la variable d'environnement et le télécharger à partir du téléchargement s'il y a une image.

En raison des spécifications de l'API Google Photo, il n'y a pas de problème même si vous donnez la même image (probablement jugée par le nom du fichier), donc s'il y a une image dans le tweet que vous avez, vous l'avez téléchargée avec la même procédure. C'est une communication inutile, mais je le fais parce que je ne suis pas en difficulté pour le moment. Si c'est vrai, il serait préférable de faire en sorte que le programme enregistre l'id quelque part et le récupère à partir de là, mais j'ai donné la priorité à la publication car cela semble prendre du temps.

Il est recommandé de l'enregistrer dans Firebase car il peut être exécuté localement car il est souvent fait gratuitement à l'aide du système GCP.

Officiel est extrêmement facile à comprendre comment utiliser Firebase à partir de code python, veuillez donc vous y référer. Veuillez vous référer à l 'Article pour savoir comment tester localement.

Cloud SQL n'a pas Always Free, j'ai donc abandonné cette fois.

Post-scriptum 2020/02/01 En raison des spécifications de Twitter, si vous ne définissez pas tweet_mode = "extended", vous obtiendrez du texte haché. Veuillez noter que vous devez définir tweet_mode = "extended" car le média ne sera pas défini correctement pour un tel Tweet.

La source de Github a été mise à jour.

Précautions de mise en œuvre

Notez que les déclencheurs d'événements nécessitent un argument pour la fonction de départ.

pub/sub => event, context http => request, response

est. J'ai oublié et je suis devenu un peu accro. De plus, comme seuls deux fichiers, MAIN.PY et REQUIREMENTS.TXT, peuvent être définis, il doit être implémenté dans cette plage. Ecrire un programme compliqué est douloureux.

Si vous avez besoin d'un journal, l'impression est bonne, alors préparons-le.

tester

Si tout peut être fait localement, je pense qu'il est plus facile de confirmer que cela fonctionne localement. Il semble que cela puisse être fait sur Cloud Functions, mais comme mentionné ci-dessus, il n'est pas possible de rencontrer une erreur mystérieuse.

2020/04/17 PostScript Le test sur Cloud Functions était dû au fait que le paramètre de délai d'expiration était défini par défaut. Pour les programmes de longue durée, le test ici entraînera une erreur. Cependant, il semble que l'exécution elle-même soit terminée, vous pouvez donc vérifier dans le journal si vous pouvez exécuter complètement.

Paramètres de Google Cloud Functions

Les paramètres de mémoire changent en fonction du programme, mais avec ce programme, 256 Mo suffisaient. Les déclencheurs sont créés dans Cloud Pub / Sub. Vous pouvez définir un délai maximum de 518 secondes, vous pouvez donc être assuré que vous définissez le maximum pour le moment. Cette fois, le programme a pris environ 200 secondes, donc je l'ai fait en 60 secondes et j'ai expiré.

Paramètres de Google Cloud Scheduler

Définissez simplement le déclencheur sur pub / sub et le sujet sur la valeur définie dans Google Cloud Functions. Le temps d'exécution est écrit par la méthode cron. Je ne le configure qu'occasionnellement, donc je n'ai pas envie d'apprendre à l'écrire, mais il existe un site comme celui-ci, alors utilisons-le.

Si vous voulez l'exécuter tout de suite, appuyez sur le bouton et il fonctionnera, alors assurez-vous qu'il réussit.

finalement

Il est facile d'exécuter régulièrement de petits programmes sur le serveur, c'est donc idéal pour automatiser de petites choses. Cette fois, il a fallu environ 3 heures pour la mise en œuvre et 1 heure pour la mise en place, il était donc très significatif de pouvoir faire des passe-temps, des avantages pratiques et étudier en peu de temps.

Il y a encore des problèmes autour des tests Firebase et Cloud Functions, mais nous y travaillerons dès que nous les connaîtrons. Je pense que j'écrirai un article quand ce sera fini.

Recommended Posts

Recevez des tweets avec la fonction Google Cloud et enregistrez automatiquement les images dans Google Photos
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2 2
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2
Importez et supprimez des fichiers dans Google Cloud Storages avec django-storage
Obtenez des réponses à des tweets spécifiques avec tweepy
Fonction pour enregistrer les images par date [python3]
Ajouter des images à des photos iOS avec Pythonista
Télécharger des images sur Google Drive avec Python
Comment rechercher à l'aide de l'Astroquery de Python et obtenir des images ajustées avec Skyview
Enregistrez automatiquement les images et les vidéos touchées par la recherche Twitter sur l'iPhone à l'aide de Pythonista3
Enregistrez automatiquement les images de vos personnages préférés à partir de la recherche d'images Google avec Python
Enregistrez le Tweet de Twitter avec Geo au format CSV et tracez-le sur Google Map.
Obtenez des étiquettes de données en les associant à l'API Google Cloud Vision lors de la prévisualisation d'images avec Rails
[Notes] ① Obtenez et enregistrez des tweets ~ Je veux identifier les tweets d'actualité qui seront diffusés ~
Obtenez des images et des vidéos de la chronologie des médias avec Python + Tweepy
Obtenez des tweets Twitter, des followers, des followers, des likes, avec urllib et beautifulSoup
Recevez des tweets avec Tweepy
API Nifty Cloud facile à utiliser avec botocore et python
LGTM --Composez des images LGTM avec des vidéos et des photos et produisez une animation GIF
Cloud Functions pour redimensionner les images à l'aide d'OpenCV avec le déclencheur Cloud Storage
Créez un bot Mastodon avec une fonction pour répondre automatiquement avec Python
kobitonote.py --Synchroniser les éléments de sauvegarde modifiés avec Kobito vers Evernote
Convertissez des images numérisées déformées en PDF avec Pillow et PyPDF
Obtenez une adresse IP globale et exportez-la vers des feuilles de calcul Google
Essayez de juger des photos de plats à l'aide de l'API Google Cloud Vision
Enregistrer des images sur le Web sur un lecteur avec Python (Colab)
Obtenez des données supplémentaires vers LDAP avec python (Writer et Reader)
[Introduction à Python] Comment obtenir des données avec la fonction listdir
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Télécharger automatiquement des images avec grattage
Enregistrez des images avec le web scraping
Enregistrez le résultat de l'exploration avec Scrapy dans Google Data Store
Apache Beam 2.0.x avec Google Cloud Dataflow commençant par IntelliJ et Gradle
Analyse de correspondance des phrases avec l'API COTOHA et sauvegarde dans un fichier
Comment se connecter à Cloud Firestore à partir de Google Cloud Functions avec du code Python
Essayez d'afficher la carte google et la carte géographique avec python
La meilleure façon d'utiliser MeCab et CaboCha avec Google Colab
Obtenez les conditions de simulation OCTA à partir d'un fichier et enregistrez avec les pandas
J'ai essayé de collecter automatiquement des images de Kanna Hashimoto avec Python! !!
Le moyen le plus rapide d'obtenir régulièrement des images de caméra avec opencv de python
[Python] Essayez de reconnaître les caractères des images avec OpenCV et pyocr
Téléchargez les images et vidéos contenues dans les tweets que vous avez aimés sur Twitter et téléchargez-les sur Google Drive