mediaItems.search无法使用AlbumId

时间:2018-09-29 04:10:08

标签: python google-photos-api

运行以下代码时,出现此错误。

  

{'错误':{'代码':400,'消息':'接收到无效的JSON有效负载。未知名称“ album_id”:原型字段未重复,无法启动列表。”,“状态”:“ INVALID_ARGUMENT”,“详细信息”:[{'@ type”:“ type.googleapis.com/google.rpc.BadRequest” ,'fieldViolations':[{'description':'接收到无效的JSON有效负载。未知名称“ album_id”:原始字段未重复,无法启动列表。'}]}]}}}

如果我删除“ albumId”:[“相册代码”],它将正常工作并返回

  

10个新项目,共10个

def _actually_list_media_items(session):
    ret = []
    params = {
        'fields': 'mediaItems(id,baseUrl,filename,mimeType,productUrl),nextPageToken',
    }
    search_json = {
        "pageSize": 10,
        "albumId": ["<albumid code>"],
        "filters": {
            "includeArchivedMedia": False,
            "contentFilter": {
                "excludedContentCategories": [
                    "DOCUMENTS",
                    "RECEIPTS",
                    "SCREENSHOTS",
                    "UTILITY",
                    "WHITEBOARDS",
                ]
            },
            "mediaTypeFilter": {
                "mediaTypes": [
                    "PHOTO",
                ],
            },
        },
    }

    tmp = 0    
    while tmp < 1:
        rsp = session.post(
            'https://photoslibrary.googleapis.com/v1/mediaItems:search',
            params=params,
            json=search_json,
        ).json()
        if 'error' in rsp:
            print(rsp)

        cur = [m for m in rsp.get('mediaItems', [])]
        ret += cur
        print(f'{len(cur)} new items, total {len(ret)}')

        pageToken = rsp.get('nextPageToken')
        if pageToken is None:
            break
        params['pageToken'] = pageToken
        tmp = tmp + 1
    return ret

2 个答案:

答案 0 :(得分:2)

有关albumId和过滤器互斥的注释是正确的,因此您需要选择其中一个。但是,假设您想单独使用AlbumId,则需要删除您的Albumid代码周围的方括号,这是我代码中的一个剪辑:

searchbody = {
    "albumId": album_id,
    "pageSize": 10
}
print(searchbody)

mediaresults = gAPIservice.mediaItems().search(body=searchbody).execute()
mediaitems = mediaresults.get('mediaItems', [])
for item in mediaitems:
    print(u'{0} ({1})'.format(item['filename'], item['id']))

答案 1 :(得分:0)

编辑: 显然,您不能同时使用albumIdfilterssource

  

filtersobject(Filters)

     

要应用于请求的过滤器。不能与albumId一起设置。


除此之外,albumId应该是string而不是数组:source

"albumId": "<albumid code>",