我是否需要开发者的钥匙,才能在我的网站中使用oembed for youtube?
问题是,下面的代码不起作用,也不会返回到succes。
$.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}
发布于 2012-10-17 22:45:59
首先,您不需要开发人员密钥就可以使用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端点链接。
发布于 2017-07-03 20:14:41
不,我们不需要任何开发人员密钥来使用任何oEmbed提供者的oEmbed端点。
oEmbed规范支持两种格式,一种是json,另一种是xml类型。oEmbed提供者将以任何一种格式提供对oEmbed api的响应。
根据规范,没有像jsonp这样的格式,这就是为什么你无法从像"youtube“这样的oEmbed提供商那里得到适当的响应。使用type查询param调用url,json应该会产生预期的结果
url: "http://www.youtube.com/oembed?type=json&url=http://www.youtube.com/watch?v=PVzljDmoPVs"您可以在请求中将type值指定为json或xml,否则提供程序将默认使用json进行响应。
oEmbed规范没有提到任何关于JSONP的支持:所以,youtube还没有提供对JSONP的支持。
无论如何,要访问跨站点资源(CORS -交叉源资源共享),响应头必须包含Access-Control-Allow-Origin集,否则我们可以使用默认的jsonp标准,而youtube不支持这种标准。
我希望这个JSONP的小黑客能解决我们的需求。否则,我们可以选择像月图书馆这样的外部库。
https://stackoverflow.com/questions/12929249
复制相似问题