0

我是否需要开发人员的密钥才能在我的网站中使用 oembed for youtube?

问题是以下代码不起作用,它不会返回成功

 $.ajax({
                    url: "http://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=PVzljDmoPVs",
                    dataType: "jsonp",
                    timeout: 15000,
                    success: function (jo) {
                        if (jo) {
                            setIMg(jo.thumbnail_url);
                            setTitle(jo.title);
                        }
                    }
                });

但是当我在浏览器中触发 url 时,它给了我 json:

{"provider_url": "http:\/\/www.youtube.com\/", "thumbnail_url": "http:\/\/i1.ytimg.com\/vi\/PVzljDmoPVs\/hqdefault.jpg", "title": "David Guetta - She Wolf (Falling To Pieces) ft. Sia", "html": "\u003ciframe width=\"480\" height=\"270\" src=\"http:\/\/www.youtube.com\/embed\/PVzljDmoPVs?fs=1\u0026feature=oembed\" frameborder=\"0\" allowfullscreen\u003e\u003c\/iframe\u003e", "author_name": "davidguettavevo", "height": 270, "thumbnail_width": 480, "width": 480, "version": "1.0", "author_url": "http:\/\/www.youtube.com\/user\/davidguettavevo", "provider_name": "YouTube", "type": "video", "thumbnail_height": 360}

4

2 回答 2

1

首先不,您不需要开发人员密钥即可使用 YouTube 的 oembed 端点。

其次,YouTube 在其 oEmbed 端点上不支持 JSONP,这就是您的呼叫失败的原因。为了修复它,您可以使用第三方 oEmbed 提供商,例如reEmbed.me

这是示例代码:

var serviceUrl = "http://reembed.me/api/v1/OEmbed?url=";
var url = "http://www.youtube.com/watch?v=PVzljDmoPVs";
$.getJSON(serviceUrl + encodeURIComponent(url) + "&callback=?", null, function (jo) {
    if (jo) {
        setIMg(jo.thumbnail_url);
        setTitle(jo.title);
    }
});

请注意,传递的链接是实际的视频 url,而不是 oembed 端点链接。

于 2012-10-17T22:45:59.847 回答
0

不,我们不需要任何开发人员密钥来使用任何 oEmbed 提供商的 oEmbed 端点。

oEmbed规范支持两种格式,一种是json,另一种是xml。oEmbed 提供者将以任何一种格式提供对 oEmbed api 的响应。

没有像jsonp规范那样的格式,这就是为什么您无法从像“youtube”这样的 oEmbed 提供者那里得到正确的响应。type使用查询参数调用 urljson应该会产生预期的结果

url: "http://www.youtube.com/oembed?type=json&url=http://www.youtube.com/watch?v=PVzljDmoPVs"

您可以在请求中指定typejsonxml在请求中指定值 - 否则提供者将提供者json默认响应。

oEmbed 规范没有提到任何关于 JSONP 支持的内容:所以,我猜 youtube 没有提供对 JSONP 的支持。

无论如何,要访问跨站点资源(CORS - 跨源资源共享),响应标头必须包含Access-Control-Allow-Origin我们可以使用的集合,否则我们应该使用jsonpyoutube 不支持的默认标准。

我希望这个关于 JSONP 的小技巧可以解决我们的需求。否则,我们可以使用yuilibrary等外部库。

于 2017-07-03T20:14:41.880 回答