如何从videoID youtubube API获取videoCategoryId

问题描述

网站链接,如果您想知道它是如何工作的-https://nerdtube.000webhostapp.com/home.html

我正在建立一个提取分类教育类视频的网站。就像有人在我的搜索栏中输入“猫”一样,我应该只获得类别为“教育”的猫视频/播放列表。我有videoID,但是我似乎在返回的json中找不到类别ID。

function search(id,tit) {
  //console.log(id);

    var key = 'MY API KEY';
     //playlistId = 'PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp';
     var playlistId=id;
    var URL = 'https://www.googleapis.com/youtube/v3/playlistItems';
    //playlistId=document.getElementById('searchTerm').value;
    //console.log(playlistId);
    $('#plname').html(
      `<h1>Playlist : ${tit}</h1>`
    )


    var options = {
        part: 'snippet',key: key,maxResults: 60,playlistId: playlistId,}
    //console.log(playlistId);

    loadVids();

    function loadVids() {
        $.getJSON(URL,options,function (data) {
            var id = data.items[0].snippet.resourceId.videoId;
            console.log(data);
            resultsLoop(data);
            mainVid(id);

        });
    }

    function mainVid(id) {

        document.getElementById('plname').style.display="block";
        $('#video').html(`
                    <iframe src="https://www.youtube.com/embed/${id}" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
                `);
    }


    function resultsLoop(data) {
        document.getElementById('dec').style.display="block";

        $.each(data.items,function (i,item) {

            var thumb = item.snippet.thumbnails.medium.url;
            var title = item.snippet.title;
            var desc = item.snippet.description.substring(0,100);
            var vid = item.snippet.resourceId.videoId;


            $('main').append(`

            <a>
                            <article class="item" data-key="${vid}">

                                <img src="${thumb}" alt="" class="thumb">
                                <div class="details">

                                    <h4>${title}</h4>
                                    <p>${desc}</p>

                                </div>

                            </article>
              </a>
                        `);
        });
    }

        // CLICK EVENT
    $('main').on('click','article',function () {
        var id = $(this).attr('data-key');
        mainVid(id);
    });


}

所以我在做什么(代码未在此处显示),我首先从搜索栏中获取播放列表类型的对象,显示播放列表,然后当有人单击播放列表时,此search(id,tit)函数开始,逐渐获取所有内容该播放列表中的视频。现在我只想过滤教育类别的视频,但是我猜json没有这个部分。

解决方法

编辑:

我可能误解了您的问题和用例。对困惑感到抱歉。但是我认为答案,尤其是评论很有用,所以我决定不删除答案。

感谢@stvar的评论

我的推荐

对我来说,用例听起来更像是使用API​​端点“ serach / list”或“ videos / list”而不是API端点“ playlistItems”。

通过使用端点“搜索/列表”或“视频/列表”,您可以通过在初始请求中指定“ videoCategoryId”来将结果限制为视频类别。

例如:

  • https://www.googleapis.com/youtube/v3/search?videoCategoryId=[YOUR_VIDEO_CATEGORY_ID]&...
  • https://www.googleapis.com/youtube/v3/videos?videoCategoryId=[YOUR_VIDEO_CATEGORY_ID]&...

我建议指定尽可能多的参数,以使您的站点/应用程序获得最佳结果。但是请注意,并非所有组合都是允许的。

使用API​​文档中的“尝试使用此API”来缩小您的请求:

请记住,端点“搜索/列表”的API配额的成本因素显着增加。它提供了更大的灵活性,因此与“视频/列表”相比,您可以包含或排除实时流,并指定更多选项。

替代方法(未经我自己测试验证)

这是不起作用,如注释中所述,因为“ id”和“ videoCategoryId”是互斥参数。

如果这不是您的选择,则可以通过“ playlistItems” API调用的结果为每个视频进行额外的API调用。 指定“视频ID”和“视频类别ID”。如果没有结果,请跳过该视频,不要在您的网站上显示该视频,例如:

https://www.googleapis.com/youtube/v3/videos?id=[YOUR_VIDEO_ID]&videoCategoryId=[YOUR_VIDEO_CATEGORY_ID]&...