[flickr] add support for user authentication (#16)

Call '$ gallery-dl oauth:flickr' to get an access_token
and access_token_secret for your account.
This commit is contained in:
Mike Fährmann
2017-06-12 09:36:14 +02:00
parent d5a70f2580
commit 9a620784f9
2 changed files with 140 additions and 24 deletions

View File

@@ -10,6 +10,7 @@
from .common import Extractor, Message
from .. import text, util, exception
from . import oauth
class FlickrExtractor(Extractor):
@@ -213,14 +214,23 @@ class FlickrFavoriteExtractor(FlickrExtractor):
class FlickrAPI():
"""Minimal interface for the flickr API"""
api_url = "https://api.flickr.com/services/rest/"
formats = [("o", "Original"), ("k", "Large 2048"),
API_URL = "https://api.flickr.com/services/rest/"
API_KEY = "ac4fd7aa98585b9eee1ba761c209de68"
API_SECRET = "3adb0f568dc68393"
FORMATS = [("o", "Original"), ("k", "Large 2048"),
("h", "Large 1600"), ("l", "Large")]
def __init__(self, extractor, api_key="ac4fd7aa98585b9eee1ba761c209de68"):
self.session = extractor.session
def __init__(self, extractor):
token = extractor.config("access-token")
token_secret = extractor.config("access-token-secret")
if token and token_secret:
self.session = oauth.OAuthSession(
extractor.session,
self.API_KEY, self.API_SECRET, token, token_secret)
self.API_KEY = None
else:
self.session = extractor.session
self.subcategory = extractor.subcategory
self.api_key = api_key
def favorites_getPublicList(self, user_id):
"""Returns a list of favorite public photos for the given user."""
@@ -285,10 +295,11 @@ class FlickrAPI():
def _call(self, method, params):
params["method"] = "flickr." + method
params["api_key"] = self.api_key
params["format"] = "json"
params["nojsoncallback"] = "1"
data = self.session.get(self.api_url, params=params).json()
if self.API_KEY:
params["api_key"] = self.API_KEY
data = self.session.get(self.API_URL, params=params).json()
if "code" in data and data["code"] == 1:
raise exception.NotFoundError(self.subcategory)
return data
@@ -310,7 +321,7 @@ class FlickrAPI():
yield obj
if params["page"] == obj["pages"]:
if params["page"] >= obj["pages"]:
break
params["page"] += 1
@@ -321,7 +332,7 @@ class FlickrAPI():
yield photo
def _extract_format(self, photo):
for fmt, fmtname in self.formats:
for fmt, fmtname in self.FORMATS:
key = "url_" + fmt
if key in photo:
# generate photo info