通过JSON获取Youtube信息,以获取Javascript中的单个视频(非Feed)

Fra*_*gio 42 javascript youtube jquery json

所以我试图通过JSON格式从单个YouTube视频中获取信息.像标题描述类别一样,除了评论之外我还能得到什么.我想在Javascript中这样做.我注意到下面的链接,但他们的所有示例都是如何从Feed中获取视频信息.我想从一个视频中获取信息,假设我知道它的ID.

https://developers.google.com/youtube/2.0/developers_guide_json

我也在看这个Stackoverflow问题, 但我有一个问题,它说"test.js(第10行)GET http://gdata.youtube.com/feeds/api/videos/VA770w...v = 2 ALT = JSON-在脚本&回调=列表信息

200 OK 9ms"

简而言之,如果我有一个像VA770wpLX-Q这样的YouTube视频ID,那么网址在JSON中获取视频信息会是什么样的?

谢谢

Ale*_*ufo 63

2018年更新

API v2已弃用.新的youtube api v3仅适用于开发人员令牌,并且对免费连接有限制.

你可以在没有API的情况下获得JSON:

http://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=ojCkgU5XGdg&format=json
Run Code Online (Sandbox Code Playgroud)

或者xml

http://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=ojCkgU5XGdg&format=xml
Run Code Online (Sandbox Code Playgroud)



新的2018年json回应了

{
  "html": "<iframe width=\"480\" height=\"270\" src=\"https://www.youtube.com/embed/ojCkgU5XGdg?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen></iframe>",
  "title": "Creativity and Drugs (Eng Sub)",
  "thumbnail_height": 360,
  "provider_name": "YouTube",
  "author_url": "https://www.youtube.com/user/serebniti",
  "thumbnail_width": 480,
  "height": 270,
  "provider_url": "https://www.youtube.com/",
  "type": "video",
  "width": 480,
  "version": "1.0",
  "author_name": "serebniti",
  "thumbnail_url": "https://i.ytimg.com/vi/ojCkgU5XGdg/hqdefault.jpg"
}
Run Code Online (Sandbox Code Playgroud)

大拇指:

hqdefault.jpg 质量较差但始终存在.

http://img.youtube.com/vi/ojCkgU5XGdg/hqdefault.jpg

http://img.youtube.com/vi/ojCkgU5XGdg/sddefault.jpg

最大尺寸

https://i.ytimg.com/vi/ojCkgU5XGdg/maxresdefault.jpg
Run Code Online (Sandbox Code Playgroud)

迷你拇指:

http://img.youtube.com/vi/ojCkgU5XGdg/0.jpg
http://img.youtube.com/vi/ojCkgU5XGdg/1.jpg
http://img.youtube.com/vi/ojCkgU5XGdg/2.jpg
http://img.youtube.com/vi/ojCkgU5XGdg/3.jpg
Run Code Online (Sandbox Code Playgroud)

注释

http://www.youtube.com/annotations_invideo?cap_hist=1&video_id=ojCkgU5XGdg
Run Code Online (Sandbox Code Playgroud)

解析移动页面16kb

https://m.youtube.com/watch?v=ojCkgU5XGdg
Run Code Online (Sandbox Code Playgroud)

不要忘记更改用户代理 iOS / Safari 7

http://www.youtube.com/get_video_info?html5=1&video_id=ojCkgU5XGdg
Run Code Online (Sandbox Code Playgroud)

如何嵌入youtube直播

https://www.youtube.com/embed/live_stream?channel=UCkA21M22vGK9GtAvq3DvSlA
Run Code Online (Sandbox Code Playgroud)

其中UCkA21M22vGK9GtAvq3DvSlA是您的频道ID.您可以在"我的频道"链接上的youtube帐户中找到它.

直播拇指

https://i.ytimg.com/vi/W-fSCPrYSL8/hqdefault_live.jpg
Run Code Online (Sandbox Code Playgroud)

  • 遗憾的是oembed不支持jsonp(即使用回调),因此在浏览器中使用跨域将是一个问题. (2认同)

ste*_*ewe 39

2015年5月更新:

此解决方案无法正常运行,YouTube API v2正在制作过程中即将停止.

有关详细信息,访问:https: //www.youtube.com/devicesupport


尝试这样的事情:

var video_id='VA770wpLX-Q';

$.getJSON('http://gdata.youtube.com/feeds/api/videos/'+video_id+'?v=2&alt=jsonc',function(data,status,xhr){
    alert(data.data.title);
    // data contains the JSON-Object below
});
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/wqwxg/

返回的JSON如下所示:

{
    "apiVersion": "2.1",
    "data": {
        "id": "VA770wpLX-Q",
        "uploaded": "2011-02-24T22:31:02.000Z",
        "updated": "2012-04-08T21:37:06.000Z",
        "uploader": "drdrevevo",
        "category": "Music",
        "title": "Dr. Dre - I Need A Doctor (Explicit) ft. Eminem, Skylar Grey",
        "description": "Music video by Dr. Dre performing I Need A Doctor featuring Eminem and Skylar Grey (Explicit). © 2011 Aftermath Records",
        "tags": ["Dr", "Dre", "Eminem", "New", "Song", "Skylar", "Grey", "GRAMMYs", "Dr.", "Need", "Doctor", "video", "Eazy", "N.W.A.", "NWA", "easy", "drdre", "and", "em"],
        "thumbnail": {
            "sqDefault": "http://i.ytimg.com/vi/VA770wpLX-Q/default.jpg",
            "hqDefault": "http://i.ytimg.com/vi/VA770wpLX-Q/hqdefault.jpg"
        },
        "player": {
            "default": "http://www.youtube.com/watch?v=VA770wpLX-Q&feature=youtube_gdata_player"
        },
        "content": {
            "5": "http://www.youtube.com/v/VA770wpLX-Q?version=3&f=videos&app=youtube_gdata"
        },
        "duration": 457,
        "aspectRatio": "widescreen",
        "rating": 4.902695,
        "likeCount": "430519",
        "ratingCount": 441253,
        "viewCount": 88270796,
        "favoriteCount": 306556,
        "commentCount": 270597,
        "status": {
            "value": "restricted",
            "reason": "requesterRegion"
        },
        "restrictions": [{
            "type": "country",
            "relationship": "deny",
            "countries": "DE"
        }],
        "accessControl": {
            "comment": "allowed",
            "commentVote": "allowed",
            "videoRespond": "allowed",
            "rate": "allowed",
            "embed": "allowed",
            "list": "allowed",
            "autoPlay": "denied",
            "syndicate": "allowed"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 不再支持"错误":{"code":410,"message":"不再可用"` (6认同)

rsp*_*rsp 18

问题

YouTube API不支持JSONP - 请参阅问题4329:针对JSONP的oEmbed回调.此外,不推荐使用YouTube Data API v2.

您可以使用Noembed服务通过JSONP for YouTube视频获取oEmbed数据.

奖金

  • 不需要API密钥
  • 不需要服务器端代理

对于您的VA770wpLX-Q视频,您可以尝试以下链接:

https://noembed.com/embed?url=http://www.youtube.com/watch?v=VA770wpLX-Q

或者对于JSONP:

https://noembed.com/embed?callback=example&url=http://www.youtube.com/watch?v=VA770wpLX-Q

这些链接具有作为url参数传递的YouTube视频的标准网址.它不仅适用于YouTube,还适用于Vimeo和其他网址,例如:

https://noembed.com/embed?url=https://vimeo.com/45196609

演示

这是一个使用jQuery的简单示例:

var id = 'VA770wpLX-Q';
var url = 'https://www.youtube.com/watch?v=' + id;

$.getJSON('https://noembed.com/embed',
    {format: 'json', url: url}, function (data) {
    alert(data.title);
});
Run Code Online (Sandbox Code Playgroud)

请参阅:JS Bin上的DEMO.

其他选择

更多信息

另见这些问题:


Mar*_*res 10

在第3节:

$.getJSON('https://www.googleapis.com/youtube/v3/videos?id={videoId}&key={myApiKey}&part=snippet&callback=?',function(data){

 if (typeof(data.items[0]) != "undefined") {
     console.log('video exists ' + data.items[0].snippet.title);
   } else {
     console.log('video not exists');
 }   
});
Run Code Online (Sandbox Code Playgroud)

作为对@Jonathan服务器端的回应,使用PHP和CURL:

$url = "https://www.googleapis.com/youtube/v3/videos?id=".$videoId."&key=".$miApikey."&part=snippet";
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$url);
$output=curl_exec($ch);                 
$response = json_decode($output, TRUE);
print_r($response);
Run Code Online (Sandbox Code Playgroud)

  • 像这样展示你的钥匙似乎不是一个好主意。最好通过获取该 url 的 ajax 调用您的服务器端脚本 (2认同)
  • @Jonathan Google 提供了这样的 API 密钥,以便您可以公开进行。这些限制是在 Google 端设置的。这是做需要的正确方法。API 密钥不能在您通过控制台允许的域之外使用。这一切在控制台中都非常清楚。 (2认同)