Verwenden Sie die Flickr-API von Python

Einführung

Überblick

Ein Memo, als ich ein Python-Skript erstellt habe, mit dem Flickr-Fotos in [Fotos | PyCon JP 2014 in TOKYO] erstellt werden (https://pycon.jp/2014/reports/photos/). Nach der folgenden Tabelle

Was willst du tun Flickr API URI Flickr-API-Argumente
Holen Sie sich eine Liste der Alben flickr.photosets.getList user_id
Holen Sie sich die Fotos in das Album flickr.photosets.getPhotos photoset_id
Holen Sie sich die URL des Fotos flickr.photos.getSizes photo_id
  1. Wirf eine HTTP-Anfrage mit Anfragen
  2. Analysieren Sie das zurückgegebene XML mit xml.dom.minidom

Ich mache nur zwei Dinge. Es war ein wenig überraschend, dass flickr.photos.getSizes die URL des Fotos für jede Größe enthielt.

Es gab bereits einige Artikel, die etwas Ähnliches taten. Im Gegensatz zu diesem Artikel ist es hilfreich, das Ergebnis in JSON abzurufen und die URL anstelle von flickr.photos.getSizes direkt zu konfigurieren. Wenn die URL-Konfigurationsregel geöffnet ist, ist es ratsam, sie selbst zu konfigurieren, anstatt auf die API zuzugreifen.

Annahme

Die Voraussetzungen sind wie folgt:

Darüber hinaus ist der folgende Artikel hilfreich für die Einführung und Verwendung von Anforderungen.

Der folgende Artikel ist hilfreich beim Erwerb von Flickr-API-Schlüsseln.

Code

Als ich es zum ersten Mal mit Python2 ausprobiert habe, hat es nicht funktioniert, daher ergreife ich einige Notfallmaßnahmen. Es funktioniert vorerst mit Python2, aber ich kann es später beheben.

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"""
Grundlegende Verwendung

    #Bitte entsprechend korrigieren
    api_key = 'ENTER_YOUR_API_KEY'
    
    f = Flickr(api_key)

    #pyconjp Benutzer_id
    print(f.get_photoset_ids_from_user_id('102063383@N02'))
    #PyCon JP 2014 day4 Sprint Photoset Fotoset_id
    print(f.get_photos_from_photoset_id('72157647739640505'))
    #Eines der Fotos im obigen Fotoset
    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"""
Nutzer(user_id)Liste der Album-IDs von(photset_Liste der IDs)Gib es zurück
Nicht notwendig für diesen Zweck
        """
        #Anfrage senden
        r = requests.post(self.api_url, {'api_key': self.api_key,
                                         'method': 'flickr.photosets.getList',
                                         'user_id': user_id
                                         })        

        #Analysieren Sie XML in ein Dom-Objekt
        dom = md.parseString(r.text.encode('utf-8'))

        #Fotoset vom Dom-Objekt_ID finden
        result = []        
        for elem in dom.getElementsByTagName('photoset'):
            result.append(elem.getAttribute('id'))            
        return result

    def get_photos_from_photoset_id(self, photoset_id):
        u"""
Album-ID(photset_id)Liste der Fotos in(photo_Liste der IDs)Gib es zurück
        """
        #Anfrage senden
        r = requests.post(self.api_url, {'api_key': self.api_key,
                                         'method': 'flickr.photosets.getPhotos',
                                         'photoset_id': photoset_id
                                         })  

        #Analysieren Sie XML in ein Dom-Objekt
        dom = md.parseString(r.text.encode('utf-8'))

        #Foto vom dom Objekt_ID finden
        result = []
        for elem in dom.getElementsByTagName('photo'):
            result.append(elem.getAttribute('id'))            
        return result

    def get_url_from_photo_id(self, photo_id):
        u"""
Foto(photo_id)Gibt die tatsächlich gespeicherte URL zurück
        """
        #Anfrage senden
        r = requests.post(self.api_url, {'api_key': self.api_key,
                                         'method': 'flickr.photos.getSizes',
                                         'photo_id': photo_id
                                         })        

        #Analysieren Sie XML in ein Dom-Objekt
        dom = md.parseString(r.text.encode('utf-8'))

        #Suchen Sie die URL aus dem dom-Objekt
        result = None
        for elem in dom.getElementsByTagName('size'):
            #Nur Originalgröße
            if elem.getAttribute('label') == 'Original':
                result = elem.getAttribute('source')
                #Stellen Sie sich das Original als eines vor und überspringen Sie die anderen
                break
            else:
                #Keine wenn nichts
                pass
        return result

if __name__ == '__main__':
    #Funktionsprüfung
    
    #Bitte entsprechend korrigieren
    api_key = 'ENTER_YOUR_API_KEY'

    f = Flickr(api_key)
    
    #pyconjp Benutzer_id
    print(f.get_photoset_ids_from_user_id('102063383@N02'))
    #PyCon JP 2014 day4 Sprint Photoset Fotoset_id
    print(f.get_photos_from_photoset_id('72157647739640505'))
    #Eines der Fotos im obigen Fotoset
    print(f.get_url_from_photo_id('15274792845'))

Ausführungsergebnis

Ergebnis der Codeausführung

Schreiben Sie'ENTER_YOUR_API_KEY'in main in Ihren eigenen API-Schlüssel

python flickr.py

Sie können die URL des Bildes unten durch Ausführen erhalten.

Anwendungsbeispiel

Um die URLs in großen Mengen zu erhalten, können Sie flickr.py entweder importieren oder kopieren und Folgendes tun: Ändern Sie auch hier den Teil ENTER_YOUR_API_KEY in Ihren eigenen API-Schlüssel. Außerdem wird eine Pause angehängt, damit beim Ausführen des Tests keine Zeit benötigt wird. Machen Sie daher bei der tatsächlichen Ausführung eine Pause.

Wenn Sie keine Ziele angeben möchten, können Sie get_photoset_ids_from_user_id verwenden, um alle Alben eines bestimmten Benutzers abzurufen, und Sie können dies verwenden. Dadurch sieht es aus wie Krabbeln.

>>> from collections import defaultdict

>>> api_key = 'ENTER_YOUR_API_KEY'     #Bitte entsprechend korrigieren

>>> f = Flickr(api_key)

>>> targets = ['72157641092641983',    #PyCon JP 2014 Vorschau- 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:               #Erstellen Sie eine Liste mit Fotos im Fotoset
...     d[elem] = f.get_photos_from_photoset_id(elem)
...     break    #nehmen
    
>>> d2 = defaultdict(list)
>>> for k,v in d.items():              #Erstellen Sie eine URL-Liste mit Daten
...     for elem in v:
...         d2[k].append(f.get_url_from_photo_id(elem))
...         break    #nehmen
...     break    #nehmen
    
>>> for k,v in d2.items():             #Holen Sie sich Dateien mithilfe der URL-Liste
...     if not os.path.exists(k):
...         os.mkdir(k)
...     for elem in v:
...         r = requests.get(elem)     #Daten von URL abrufen
...         # photoset_id/Dateiname.Als jpg speichern
...         with open("{0}/{1}".format(k, elem.split("/")[-1]), 'wb') as g:
...             g.write(r.content)

von jetzt an

Recommended Posts

Verwenden Sie die Flickr-API von Python
Verwenden Sie die e-Stat-API von Python
Verwenden Sie die kabu Station® API von Python
Verwenden Sie die Google Analytics-API von Python
Verwenden Sie die Google Cloud Vision-API von Python
Verwenden Sie thingspeak aus Python
Verwenden Sie fließend Python
Verwenden Sie MySQL aus Python
Verwenden Sie MySQL aus Python
Verwenden Sie BigQuery aus Python.
Verwenden Sie mecab-ipadic-neologd von Python
Verwenden Sie das nghttp2 Python-Modul von Homebrew aus pyenvs Python
Versuchen Sie, direkt von Python 3 aus auf die YQL-API zuzugreifen
Verwenden Sie die Trello-API mit Python
Verwenden Sie die Twitter-API mit Python
Verwenden Sie MySQL von Anaconda (Python)
Rufen Sie die API mit python3 auf.
Verwenden Sie die Unterschall-API mit Python3
[Python] Ruft den Gesetzestext aus der e-GOV-Gesetz-API ab
Ich wollte die Python-Bibliothek von MATLAB verwenden
Verwenden wir die Python-Version des Confluence-API-Moduls.
[Python] Verwenden Sie die Face-API von Microsoft Cognitive Services
Verwenden Sie Stanford Core NLP von Python
Abrufen der arXiv-API in Python
Holen Sie sich Ihre Herzfrequenz von der Fitbit-API in Python!
Klicken Sie in Python auf die Sesami-API
Existenz aus Sicht von Python
Lesen und verwenden Sie Python-Dateien aus Python
Verwenden Sie zwangsweise Google Translate aus Python
Klicken Sie mit Python auf die Etherpad-Lite-API
Klicken Sie auf die Web-API in Python
Verwenden Sie Azure Blob Storage aus Python
Python Holen Sie sich das kommende Wetter von der Wetter-API
Führen Sie Ansible über Python mithilfe der API aus
Sakura Verwenden von Python im Internet
Verwenden Sie das von fastText trainierte Modell von Python
Greifen Sie mit Python auf die Twitter-API zu
[Python] Verwendung der Typetalk-API
Behandeln Sie die SOAP-API von Python (Zeep)
[Version September 2020] Erläutert das Verfahren zur Verwendung der Google Mail-API mit Python
Sie können virtualenv auch über das Python-Plug-In von IntelliJ IDEA verwenden
Lassen Sie uns vorerst Googles Vision API von Python berühren
Sammeln von Informationen von Twitter mit Python (Twitter API)
[Python] Webanwendung von 0! Hands-on (3) -API-Implementierung-
Versuchen Sie es mit der Wunderlist-API in Python
Versuchen Sie, die Kraken-API mit Python zu verwenden
Verwenden Sie den PostgreSQL-Datentyp (jsonb) von Python
Python: Lesen von JSON-Daten von der Web-API
Verwenden Sie die API-Gruppe A3RT für maschinelles Lernen aus Python
Notizen vom Anfang von Python 1 lernen
Tweet mit der Twitter-API in Python
Ich möchte ein Glas aus Python verwenden
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
[Blender] Verwenden Sie OpenGL aus dem Skript heraus
Starten Sie den Python-Interpreter über Git Bash
Verwenden Sie Django aus einem lokalen Python-Skript
Ab Python 3.4 wird pip zum Standardinstallationsprogramm! ??
Verwenden von C ++ - Funktionen aus Python mit pybind11
API-Erklärung zum Berühren von Mastodon aus Python