Элементы списка Python Google Photos API в альбоме - PullRequest
0 голосов
/ 16 ноября 2018

У меня проблемы с расширением вызовов API, необходимых для отображения идентификаторов альбомов, чтобы можно было перечислять элементы, содержащиеся в альбоме. Пример того, что я сделал для получения идентификаторов альбомов, приведен ниже. Помимо этого примера, я прилагаю попытку расширить этот сценарий, чтобы иметь возможность перечислять элементы, содержащиеся в определенном альбоме.

from httplib2 import Http
from oauth2client import file, client, tools
from apiclient.discovery import build

SCOPES = 'https://www.googleapis.com/auth/photoslibrary.readonly'
store = file.storage('credentials.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
    creds = tools.run_flow(flow, store)
service = build('photoslibrary', 'v1', http=creds.authorize(Http()))

hasNextPageToken = False
nextPageToken = ""

results = service.albums().list(pageSize=10).execute()

if 'nextPageToken' in results:
    hasNextPageToken = True
    nextPageToken = results['nextPageToken']
    for album in results['albums']:
        albumId = album['id']
        print(albumId)

Теперь код, который я пытаюсь изменить из приведенного выше примера, чтобы можно было перечислить элементы в данном альбоме, определенные как albumId:

from httplib2 import Http
from oauth2client import file, client, tools
from apiclient.discovery import build

SCOPES = 'https://www.googleapis.com/auth/photoslibrary.readonly'
store = file.storage('credentials.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
    creds = tools.run_flow(flow, store)
service = build('photoslibrary', 'v1', http=creds.authorize(Http()))

hasNextPageToken = False
nextPageToken = ""
albumId = [albumIdFromPreviousStep]
results = service.mediaItems().search(pageSize=10,albumId=albumId).execute()

Когда я пытаюсь напечатать results, я получаю сообщение об ошибке при получении неожиданного аргумента ключевого слова, albumId.

вызов API отформатирован для поиска по-разному, это https://photoslibrary.googleapis.com/v1/mediaItems:search

Ошибка связана с: mediaItems:search, который делает недействительной переменную в Python? Или это связано с тем, что поисковый вызов - это POST, а не GET? Или что-то еще?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Для mediaitems:search требуется структурированное тело параметров JSON, чтобы ограничить возвращаемые элементы определенным идентификатором альбома.

Изменение второй части кода из исходного сообщения дает желаемый результат.

from httplib2 import Http
from oauth2client import file, client, tools
from apiclient.discovery import build

SCOPES = 'https://www.googleapis.com/auth/photoslibrary.readonly'
store = file.storage('credentials.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
    creds = tools.run_flow(flow, store)
service = build('photoslibrary', 'v1', http=creds.authorize(Http()))

hasNextPageToken = False
nextPageToken = ""
body = {
    "albumId": [AlbumId],
    "pageSize": 10
    }
results = service.mediaItems().search(body=body).execute()
print(results)

Теперь для сбора данных по всем остальным элементам необходимо включить nextPageToken и просмотреть результаты.

0 голосов
/ 16 ноября 2018

я не вижу нигде, где вы определили идентификатор альбома в вашем измененном коде

results = service.mediaItems().search(pageSize=10,**albumId=albumId**).execute()

код, из которого вы скопировали, четко определяет его

for album in results['albums']:
    albumId = album['id']
    print(albumId)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...