Oembed for youtube

我是否需要开发人员的密钥才能在我的网站上使用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}

首先,不,您不需要开发人员密钥即可使用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); } }); 

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

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

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

根据规范,没有类似jsonp格式,这就是为什么你无法从像“youtube”这样的oEmbed提供者那里得到适当的响应。 使用type查询参数调用url作为json应该产生预期的结果

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

您可以在请求中将type值指定为jsonxml – 否则提供程序将默认情况下使用json响应提供程序。

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

无论如何访问跨站点资源(CORS – Cross Origin资源共享)响应头必须包含Access-Control-Allow-Origin设置,否则我们可以选择应该使用youtube不支持的默认jsonp标准。

我希望JSONP的这个小小的攻击可以解决我们的需求。 另外,我们可以去像yuilibrary这样的外部图书馆。