2

从Google Photo API (使用 Go 和 Google Photo REST API)获取媒体项目列表和相册列表后,将项目添加到相册会返回错误。

(注意:使用 Web 界面将项目添加到相册可以正常工作)。

将媒体项添加到相册的代码:

func (a Album) AddItems(items ...MediaItem) error {
    rel := &url.URL{Path: fmt.Sprintf("/v1/albums/%s:batchAddMediaItems", a.ID)}
    u := a.service.baseURL.ResolveReference(rel)
    for len(items) > 0 {
        ids := []string{}
        for i := 0; i < 50 && i < len(items); i++ {
            ids = append(ids, items[i].ID)
        }
        items = items[len(ids):]
        toAdd := map[string]interface{}{
            "mediaItemIds": ids,
        }
        bodyData, err := json.Marshal(toAdd)
        if err != nil {
            return err
        }
        req, err := http.NewRequest("POST", u.String(), bytes.NewBuffer(bodyData))
        if err != nil {
            return err
        }
        resp, err := a.service.client.Do(req)
        if err != nil {
            return err
        }
        defer resp.Body.Close()
        respErr := struct {
            Error ServerError `json:"error"`
        }{}
        body, err := ioutil.ReadAll(resp.Body)
        if err != nil {
            return err
        }
        err = json.Unmarshal(body, &respErr)
        if err != nil {
            return err
        }
        err = respErr.Error.Error()
        if err != nil {
            return err
        }
    }
    return nil
}

服务器返回以下错误:

error 400: Request contains an invalid media item id. (INVALID_ARGUMENT). 

媒体项 ID 是从搜索请求返回的媒体项的JSON 表示的 ID 字段复制而来的。媒体项目的其他字段似乎是有效的(例如 ProductURL)。

这个batchAddMediaItems请求有什么问题?或者如何获得适合的有效媒体项目 ID batchAddMediaItems

谢谢你。

4

1 回答 1

6

根据指南(https://developers.google.com/photos/library/guides/manage-albums),不幸的是,您只能将您的应用程序上传的媒体项目添加到您的应用程序创建的相册中。媒体项目也必须在用户的库中。

这是 issuetracker 组织现有媒体项的功能请求 ( https://issuetracker.google.com/issues/109505022 ),但开发人员只允许使用应用程序的照片/相册。但是现在它存在关于我们的问题的新功能请求,所以让我们一起为它加注星标(https://issuetracker.google.com/issues/132274769

于 2019-07-05T06:27:27.077 回答