【问题标题】:Playlistitems batch insert YouTube API v3播放列表项批量插入 YouTube API v3
【发布时间】:2013-09-20 00:53:06
【问题描述】:

我正在尝试在 PHP 中使用 curl_multi 创建播放列表并添加播放列表项。我需要使用多请求的原因是该过程似乎需要很长时间才能添加(最多)200 个播放列表项目并在我们的平台上达到 30 秒超时(我无法更改)。

多卷曲请求工作正常,而且速度非常快,但我从 YouTube 得到的响应显示播放列表项正在相互覆盖 - YouTube 生成的 id 参数对于多个项目是相同的,并且位置属性对于不同的要求。因此,从 200 个请求中,我在我的播放列表中获得了大约 130 个成功的播放列表项。

为了尝试解决方法,我在构建请求时设置了 sn-p.position 但这也不起作用,因为我怀疑我无法将项目添加到不是现有播放列表位置增量的位置。

我一直在寻找解决方案,这似乎是一个已知问题

https://groups.google.com/forum/#!msg/google-api-javascript-client/9Qdf0LCYSZs/MOcYxFKtWMQJ https://stackoverflow.com/questions/14310562/how-to-correctly-use-google-api-python-clients-batchhttprequest

我想要实现的是:

  • v3 中的一个选项(我可能错过了)将多个播放列表项批量插入到播放列表中。似乎可以在 v2 中添加多个条目,但不能在 v3 中添加。
  • 一种确保我的多卷曲请求不会相互覆盖的方法
  • 添加播放列表项作为构建播放列表的一部分

任何指针将不胜感激。

干杯

【问题讨论】:

  • 请按如下所述提交功能请求,以便将其绑定到内部请求

标签: php youtube-api


【解决方案1】:

这是 API 的“已知”问题,过去已作为缺陷提交。但是,它不再是一个开放的缺陷问题。但是问题并没有得到解决,而是通过减少失败而略有改善。也许将其归档为您提出可能更好的结果的增强功能。 (例如,API 必须 100% 确保所有有效的 videoId 确实存在于播放列表中,方法是通过内部检索进行“验证”。这比你可以做的更快,因为你不必发送额外的请求.) 在每个请求之间添加延迟应该会减少失败。 您可以在此处提交改进或缺陷(检查后,如果尚未提交): https://code.google.com/p/gdata-issues/issues/list?q=label:API-YouTube

【讨论】:

    【解决方案2】:

    作为一种解决方法,我将视频分批分组,其中包含来自每个播放列表的视频。因此,如果您有 5 个播放列表,则第一批将包含 5 个视频,每个播放列表中的第一个视频,依此类推。这不是一个很好的解决方案,但总比没有批处理要好。

    对于分组到 40 个播放列表中的约 1000 个视频,插入操作的速度提高了 6 倍。 这里还有为 Youtube API 团队提交的issue

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      您看到的问题与播放列表位置有关。由于插入请求是异步的,因此以下请求会覆盖先前的请求。

      我正在尝试通过处理请求瀑布来解决此问题(等待上一个请求完成)。

      【讨论】:

        【解决方案4】:

        在 javascript 中,递归函数有效,请参阅以下答案。 https://stackoverflow.com/a/39687078/4254357

        基于该答案,我可以通过调用此函数一次在播放列表中添加多个视频(60 个项目)。值得尝试递归函数。

            function AddSong(addingVideoIds, idx, addingPlaylist_id) {
        
                gapi.client.request({
        
                    path: '/youtube/v3/playlistItems?part=snippet',
                    method: 'POST',
                    body:JSON.stringify({
                        snippet: {
                            playlistId: addingPlaylist_id,
                            position: 0,
                            resourceId: {
                                videoId: addingVideoIds[idx],
                                kind: 'youtube#video'
                            }
                        }
                    })
        
                }).then(function(response) {
        
                    jsonObj = response.result;
        
                    $(".status").append("<span style='font-weight:bold;'>" + jsonObj.snippet.title + "</span><br/>");
        
                    if (idx < addingVideoIds.length) {
                        AddSong(addingVideoIds, ++idx, addingPlaylist_id);
                    } else {
                        $(".status").append("idx: " + idx);
                    }
        
                }, function(reason) {
                    $(".error").append("[" + addingVideoIds[i] + "]" + reason.statusText + "<br/>");
                    if (idx < addingVideoIds.length) {
                        AddSong(addingVideoIds, ++idx, addingPlaylist_id);
                    } else {
                        $(".status").append("idx: " + idx);
                    }
                });
        
            }
        

        https://github.com/konbuerimaki/text2playlist

        【讨论】:

          猜你喜欢
          • 2016-09-17
          • 2014-01-06
          • 1970-01-01
          • 2015-08-18
          • 2015-04-23
          • 2021-03-24
          • 2014-07-02
          • 2018-06-11
          • 1970-01-01
          相关资源
          最近更新 更多