Utilisez l'API Flickr de Python

introduction

Aperçu

Un mémo quand j'ai fait un script Python qui fait des photos Flickr dans Photos | PyCon JP 2014 à TOKYO. Selon le tableau ci-dessous

Que veux-tu faire URI de l'API Flickr Arguments de l'API Flickr
Obtenez une liste d'albums flickr.photosets.getList user_id
Récupérez les photos dans l'album flickr.photosets.getPhotos photoset_id
Obtenez l'URL de la photo flickr.photos.getSizes photo_id
  1. Lancez une requête HTTP avec des requêtes
  2. Analysez le XML renvoyé avec xml.dom.minidom

Je fais juste deux choses. C'était un peu surprenant que flickr.photos.getSizes contienne l'URL de la photo pour chaque taille.

Il y avait déjà des articles faisant quelque chose de similaire. Contrairement à cet article, il est utile d'obtenir le résultat en JSON et de configurer directement l'URL au lieu de flickr.photos.getSizes. Si la règle de configuration d'URL est ouverte, il est sage de la configurer vous-même plutôt que de frapper l'API.

supposition

Les prérequis sont les suivants:

De plus, l'article suivant sera utile pour l'introduction et l'utilisation des requêtes.

L'article suivant sera utile pour obtenir la clé API pour Flickr.

code

Quand je l'ai essayé pour la première fois avec Python2, cela n'a pas fonctionné, donc je prends des mesures d'urgence. Cela fonctionne avec Python2 pour le moment, mais je peux le réparer plus tard.

flickr.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
import requests
import xml.dom.minidom as md

class Flickr(object):
    u"""
Utilisation de base

    #Veuillez corriger en conséquence
    api_key = 'ENTER_YOUR_API_KEY'
    
    f = Flickr(api_key)

    #utilisateur pyconjp_id
    print(f.get_photoset_ids_from_user_id('102063383@N02'))
    #Ensemble de photos PyCon JP 2014 Day4 Sprint_id
    print(f.get_photos_from_photoset_id('72157647739640505'))
    #Une des photos de l'ensemble de photos ci-dessus
    print(f.get_url_from_photo_id('15274792845'))
    """

    def __init__(self, api_key):
        self.api_url = 'https://api.flickr.com/services/rest/'
        self.api_key = api_key

    def get_photoset_ids_from_user_id(self, user_id):
        u"""
utilisateur(user_id)Liste des identifiants d'album appartenant à(photset_Liste des identifiants)rends le
Pas nécessaire à cet effet
        """
        #Envoyer une demande
        r = requests.post(self.api_url, {'api_key': self.api_key,
                                         'method': 'flickr.photosets.getList',
                                         'user_id': user_id
                                         })        

        #Analyser XML dans un objet dom
        dom = md.parseString(r.text.encode('utf-8'))

        #photoset de l'objet dom_Trouver un identifiant
        result = []        
        for elem in dom.getElementsByTagName('photoset'):
            result.append(elem.getAttribute('id'))            
        return result

    def get_photos_from_photoset_id(self, photoset_id):
        u"""
ID d'album(photset_id)Liste des photos dans(photo_Liste des identifiants)rends le
        """
        #Envoyer une demande
        r = requests.post(self.api_url, {'api_key': self.api_key,
                                         'method': 'flickr.photosets.getPhotos',
                                         'photoset_id': photoset_id
                                         })  

        #Analyser XML dans un objet dom
        dom = md.parseString(r.text.encode('utf-8'))

        #photo de l'objet dom_Trouver un identifiant
        result = []
        for elem in dom.getElementsByTagName('photo'):
            result.append(elem.getAttribute('id'))            
        return result

    def get_url_from_photo_id(self, photo_id):
        u"""
Photo(photo_id)Renvoie l'URL réellement stockée
        """
        #Envoyer une demande
        r = requests.post(self.api_url, {'api_key': self.api_key,
                                         'method': 'flickr.photos.getSizes',
                                         'photo_id': photo_id
                                         })        

        #Analyser XML dans un objet dom
        dom = md.parseString(r.text.encode('utf-8'))

        #Trouvez l'URL de l'objet dom
        result = None
        for elem in dom.getElementsByTagName('size'):
            #Seulement taille originale
            if elem.getAttribute('label') == 'Original':
                result = elem.getAttribute('source')
                #Pensez à l'original comme un et sautez les autres
                break
            else:
                #Aucun si rien
                pass
        return result

if __name__ == '__main__':
    #Contrôle de fonctionnement
    
    #Veuillez corriger en conséquence
    api_key = 'ENTER_YOUR_API_KEY'

    f = Flickr(api_key)
    
    #utilisateur pyconjp_id
    print(f.get_photoset_ids_from_user_id('102063383@N02'))
    #Ensemble de photos PyCon JP 2014 Day4 Sprint_id
    print(f.get_photos_from_photoset_id('72157647739640505'))
    #Une des photos de l'ensemble de photos ci-dessus
    print(f.get_url_from_photo_id('15274792845'))

Résultat d'exécution

Résultat de l'exécution du code

Réécrivez'ENTER_YOUR_API_KEY'in main dans votre propre clé API

python flickr.py

Vous pouvez obtenir l'URL de l'image ci-dessous en exécutant.

Exemple d'utilisation

Pour obtenir les URL en masse, vous pouvez importer ou copier flickr.py et procédez comme suit: Ici aussi, remplacez la partie ENTER_YOUR_API_KEY par votre propre clé API. De plus, une pause est attachée afin que cela ne prenne pas de temps lors de l'exécution du test, veuillez donc faire une pause lors de l'exécution réelle.

Si vous ne souhaitez pas spécifier de cibles, vous pouvez utiliser get_photoset_ids_from_user_id pour obtenir tous les albums d'un utilisateur spécifique, et vous pouvez l'utiliser. Cela donne l'impression de ramper.

>>> from collections import defaultdict

>>> api_key = 'ENTER_YOUR_API_KEY'     #Veuillez corriger en conséquence

>>> f = Flickr(api_key)

>>> targets = ['72157641092641983',    #Aperçu de PyCon JP 2014- an album on Flickr
...            '72157647111767068',    # PyCon JP 2014 day1 Tutorial - an album on Flickr
...            '72157647184237569',    # PyCon JP 2014 day2 Conference - an album on Flickr
...            '72157647216509890',    # PyCon JP 2014 day3 Conference - an album on Flickr
...            '72157647739640505'     # PyCon JP 2014 day4 Sprint - an album on Flickr
...           ]

>>> d = {}
>>> for elem in targets:               #Créer une liste de photos dans l'ensemble de photos
...     d[elem] = f.get_photos_from_photoset_id(elem)
...     break    #prendre
    
>>> d2 = defaultdict(list)
>>> for k,v in d.items():              #Créer une liste d'URL de données
...     for elem in v:
...         d2[k].append(f.get_url_from_photo_id(elem))
...         break    #prendre
...     break    #prendre
    
>>> for k,v in d2.items():             #Obtenir des fichiers à l'aide de la liste d'URL
...     if not os.path.exists(k):
...         os.mkdir(k)
...     for elem in v:
...         r = requests.get(elem)     #Récupérer les données de l'URL
...         # photoset_id/nom de fichier.Enregistrer au format jpg
...         with open("{0}/{1}".format(k, elem.split("/")[-1]), 'wb') as g:
...             g.write(r.content)

à partir de maintenant

Recommended Posts

Utilisez l'API Flickr de Python
Utilisez l'API e-Stat de Python
Utilisez l'API kabu Station® de Python
Utiliser l'API Google Analytics de Python
Utiliser l'API Google Cloud Vision de Python
Utilisez Thingsspeak de Python
Utiliser fluentd de python
Utilisez MySQL depuis Python
Utiliser MySQL depuis Python
Utilisez BigQuery depuis Python.
Utilisez mecab-ipadic-neologd de Python
Utilisez le module Python nghttp2 de Homebrew de Python de pyenv
Essayez d'accéder à l'API YQL directement depuis Python 3
Utiliser l'API Trello avec python
Utiliser l'API Twitter avec Python
Utiliser MySQL depuis Anaconda (python)
Appelez l'API avec python3.
Utiliser l'API subsonique avec python3
[Python] Récupérez le texte de la loi à partir de l'API e-GOV law
Je voulais utiliser la bibliothèque Python de MATLAB
Utilisons la version Python du module API Confluence.
[Python] Utilisez l'API Face de Microsoft Cognitive Services
Utiliser la PNL Stanford Core à partir de Python
Obtenir l'API arXiv en Python
Obtenez votre fréquence cardiaque à partir de l'API fitbit en Python!
Frappez l'API Sesami en Python
Existence du point de vue de Python
Lire et utiliser des fichiers Python à partir de Python
Utiliser de force Google Translate à partir de python
Accédez à l'API Etherpad-lite avec Python
Accédez à l'API Web en Python
Utiliser Azure Blob Storage à partir de Python
python Obtenez la météo à venir de l'API météo
Exécutez Ansible à partir de Python à l'aide de l'API
Sakura utilisant Python sur Internet
Utiliser le modèle entraîné fastText de Python
Accéder à l'API Twitter avec Python
[Python] Comment utiliser l'API Typetalk
Gérer l'API SOAP depuis Python (Zeep)
[Version septembre 2020] Explique la procédure d'utilisation de l'API Gmail avec Python
Vous pouvez également utiliser virtualenv à partir du plug-in Python d'IntelliJ IDEA
Touchons l'API Vision de Google de Python pour le moment
Collecter des informations sur Twitter avec Python (API Twitter)
[Python] Application Web à partir de 0! Pratique (3) - Mise en œuvre de l'API
Essayez d'utiliser l'API Wunderlist en Python
Essayez d'utiliser l'API Kraken avec Python
Utiliser le type de données PostgreSQL (jsonb) à partir de Python
Python: lecture de données JSON à partir de l'API Web
Utiliser le groupe d'API d'apprentissage automatique A3RT de Python
Notes d'apprentissage depuis le début de Python 1
Tweet à l'aide de l'API Twitter en Python
Je veux utiliser jar de python
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
[Blender] Utilisez OpenGL depuis l'intérieur du script
Lancez l'interpréteur Python depuis Git bash
Utiliser Django à partir d'un script Python local
Depuis Python 3.4, pip devient le programme d'installation standard! ??
Utilisation des fonctions C ++ de python avec pybind11
Explication API pour toucher mastodonte de python