Youtube api v3 获取用户视频列表

问题描述 投票:0回答:13

使用 Youtube api v2,可以轻松获取视频。只需发送这样的查询:

http://gdata.youtube.com/feeds/mobile/videos?max-results=5&alt=rss&orderby=published&author=OneDirectionVEVO

Youtube api v2 还有一个用于构建查询的交互式演示页面: http://gdata.youtube.com/demo/index.html

用Youtube api v3,不知道对应的方式。请用 api v3 给我指路。

谢谢!

youtube youtube-api youtube-data-api
13个回答
134
投票

channels#list 方法将返回一个 JSON,其中包含有关频道的一些信息,包括“上传”播放列表的播放列表 ID:

https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=OneDirectionVEVO&key={YOUR_API_KEY}

通过播放列表 ID,您可以使用 playlistItems#list 方法获取视频:

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=UUbW18JZRgko_mOGm5er8Yzg&key={YOUR_API_KEY}

您可以在文档页面末尾测试这些内容。


25
投票

这应该可以。此代码仅获取并输出标题,但您可以获得任何您想要的详细信息

// Get Uploads Playlist
$.get(
   "https://www.googleapis.com/youtube/v3/channels",{
   part : 'contentDetails', 
   forUsername : 'USER_CHANNEL_NAME',
   key: 'YOUR_API_KEY'},
   function(data) {
      $.each( data.items, function( i, item ) {
          pid = item.contentDetails.relatedPlaylists.uploads;
          getVids(pid);
      });
  }
);

//Get Videos
function getVids(pid){
    $.get(
        "https://www.googleapis.com/youtube/v3/playlistItems",{
        part : 'snippet', 
        maxResults : 20,
        playlistId : pid,
        key: 'YOUR_API_KEY'},
        function(data) {
            var results;
            $.each( data.items, function( i, item ) {
                results = '<li>'+ item.snippet.title +'</li>';
                $('#results').append(results);
            });
        }
    );
}


<!--In your HTML -->
<ul id="results"></ul>

5
投票

如果考虑配额成本,遵循这个简单的算法可能会有所帮助。

首先从 https://www.youtube.com/feeds/videos.xml?channel_id= 获取数据...这是一个简单的 XML feed,它将为您提供视频 ID,但您无法指定更多“部分” '(统计数据等)。

使用该列表中的视频 ID,在 /videos API 端点上进行查询,该端点允许以逗号分隔的视频 ID 列表,这只会导致 1 配额成本,加上任何其他部分参数的 0-2。正如 @chrismacp 指出的,使用 /search 端点更简单,但配额成本为 100,这可以快速增加。

当您进行第二次调用时,这里需要考虑资源(CPU、内存等),但我相信在很多情况下这可能是一个有用的方法。


4
投票

API V3 中发生了很大变化。这是一个视频,可引导您完成获取给定频道中上传的视频列表所需的 v3 API 调用,并使用 API Explorer 进行现场演示。

YouTube 开发者直播:在 v3 中获取频道的上传内容 - https://www.youtube.com/watch?v=RjUlmco7v2M


3
投票

如果它对这里的任何人有帮助,这就是我发现的,到目前为止似乎对我来说效果很好。 在发出此请求之前,我将通过 OAuth 2.0 对会员进行身份验证,这将为我提供经过身份验证的会员视频。 与往常一样,您的个人里程可能会有所不同:D

curl https://www.googleapis.com/youtube/v3/search -G \
-d part=snippet \
-d forMine=true \
-d type=video \
-d order=date \
-d access_token={AUTHENTICATED_ACCESS_TOKEN}

2
投票

相当于你发布的请求实际上是3.0 api中的搜索,而不是播放列表请求。这样做也更容易。不过,您确实需要将用户名替换为频道 ID。

例如。获取 https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=UUGhCVGZ0ZSpe5hJHWyiLwHA&key={YOUR_API_KEY}


1
投票

这里是一些使用官方 Google API Node 库的代码 (https://github.com/google/google-api-nodejs-client)

const readJson = require("r-json");
const google = require('googleapis');
const Youtube = google.youtube('v3');

// DONT store your credentials in version control
const CREDENTIALS = readJson("/some/directory/credentials.json");

let user = "<youruser>";
let numberItems = 10; 

let channelConfig = {
  key: CREDENTIALS.youtube.API_KEY,
  part: "contentDetails",
  forUsername: user
};

Youtube.channels.list(channelConfig, function (error, data) {

  if (error) {
    console.log("Error fetching YouTube user video list", error);
    return;
  }

  // Get the uploads playlist Id
  let uploadsPlaylistId = data.items[0].contentDetails.relatedPlaylists.uploads;

  let playlistConfig = {
    part : 'snippet',
    maxResults : size,
    playlistId : uploadsPlaylistId,
    key: CREDENTIALS.youtube.API_KEY
  };

  // Fetch items from upload playlist
  Youtube.playlistItems.list(playlistConfig, function (error, data) {

    if (error) {
      console.log("Error fetching YouTube user video list", error);
    }

    doSomethingWithYourData(data.items);
  });
});

0
投票

另一种方法可能是通过以下方式获取当前经过 oauth 身份验证的用户的播放列表:属性mine=true

在身份验证后检索 oauth access_token: https://developers.google.com/youtube/v3/guides/authentication

https://www.googleapis.com/youtube/v3/playlists?part=id&mine=true&access_token=ya29.0gC7xyzxyzxyz

0
投票

如果您想获取播放列表中超过 300 个视频的视频,请不要使用 playlistitems.list。您可以在“尝试”部分中的 Google 链接“https://developers.google.com/youtube/v3/docs/playlistItems/list”中实时尝试。它返回未定义。

我也在我的项目中使用过。它仅返回未定义。


0
投票

在 PHP 中: 我使用 pageToken 属性转到播放列表的所有页面。希望它可以帮助您。

//step 1: get playlist id

 $response = file_get_contents("https://www.googleapis.com/youtube/v3/channels?key={$api_key}&forUsername={$channelName}&part=contentDetails");
 $searchResponse = json_decode($response,true);
 $data = $searchResponse['items'];
 $pid =  $data[0]['contentDetails']['relatedPlaylists']['uploads'];

//step 2: get all videos in playlist

 $nextPageToken = '';
 while(!is_null($nextPageToken)) {
     $request = "https://www.googleapis.com/youtube/v3/playlistItems?key={$api_key}&playlistId={$pid}&part=snippet&maxResults=50&pageToken=$nextPageToken";

    $response = file_get_contents($request);
    $videos = json_decode($response,true);

    //get info each video here...

   //go next page
    $nextPageToken = $videos['nextPageToken'];
}

0
投票

在node.js中,可以通过以下代码实现。

需要

authKey
channelId
作为
options
对象参数。

cb
获取数据后调用回调。

async function fetchChannelInfo(options) {
  const channelUrl = `https://www.googleapis.com/youtube/v3/channels?part=contentDetails,statistics&id=${
    options.channelId
  }&key=${options.authKey}`;
  const channelData = await axios.get(channelUrl);

  return channelData.data.items[0];
}
function fetch(options, cb) {
  fetchChannelInfo(options).then((channelData) => {
    options.playlistId = channelData.contentDetails.relatedPlaylists.uploads;
    const paylistUrl = `https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=${
      options.playlistId
    }&key=${options.authKey}`;

    axios
      .get(paylistUrl)
      .then((response) => {
        const payloadData = ;

        const videoList = [];
        response.data.items.forEach((video) => {
          videoList.push({
            publishedAt: video.snippet.publishedAt,
            title: video.snippet.title,
            thumbnails: thumbnails,
            videoId: video.snippet.resourceId.videoId,
          });
        });

        cb(null, videoList);
      })
      .catch((err) => {
        cb(err, null);
      });
  });
}

注意:axios 用于 RESTful 请求。安装

npm install axios

0
投票
$.get(
    "https://www.googleapis.com/youtube/v3/channels",{
      part: 'snippet,contentDetails,statistics,brandingSettings',
      id: viewid,
      key: api},
      function(data){

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


          channelId = item.id;
          pvideo = item.contentDetails.relatedPlaylists.uploads;
          uploads(pvideo);
});

      });

上传功能即可

function uploads(pvideo){


       $.get(
        "https://www.googleapis.com/youtube/v3/playlistItems",{
          part: 'snippet',
          maxResults:12,
          playlistId:pvideo,
          key: api},
          function(data){


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

                 videoTitle = item.snippet.title;
             videoId = item.id;
            description = item.snippet.description;
            thumb = item.snippet.thumbnails.high.url;
            channelTitle = item.snippet.channelTitle;
            videoDate = item.snippet.publishedAt;
            Catagoryid = item.snippet.categoryId;
            cID = item.snippet.channelId;

            })
          }
        );
     }

0
投票
function tplawesome(e, t) {
    res = e;
    for (var n = 0; n < t.length; n++) {
        res = res.replace(/\{\{(.*?)\}\}/g,
                    function (e, r) { return t[n][r] })
    }
    return res
}

$(function () {

    $(".form-control").click(function (e) {

        e.preventDefault();

        // prepare the request
        var request = gapi.client.youtube.search.list({
            part: "snippet",
            type: "video",
            q: encodeURIComponent($("#search").val()).replace(/%20/g, "+"),
            maxResults: 20,
            order: "viewCount",
            publishedAfter: "2017-01-01T00:00:00Z"
        });

        // execute the request
        request.execute(function (response) {

            var results = response.result;

            $("#results").html("");

            $.each(results.items, function (index, item) {

                $.get("tpl/item.html", function (data) {

                    $("#results").append(tplawesome(data, [{
                        "title": item.snippet.title,
                        "videoid": item.id.videoId,
                        "descrip": item.snippet.description,
                        "date": item.snippet.publishedAt,
                        "channel": item.snippet.channelTitle,
                        "kind": item.id.kind,
                        "lan": item.id.etag
                    }]));
                });
            });
            resetVideoHeight();
        });
    });

    $(window).on("resize", resetVideoHeight);
});

function resetVideoHeight() {
    $(".video").css("height", $("#results").width() * 9 / 16);
}

function init() {
    gapi.client.setApiKey("YOUR API KEY .... USE YOUR KEY");

    gapi.client.load("youtube", "v3", function () {
        // yt api is ready
    });
}

在此处检查完整代码:

https://thecodingshow.blogspot.com/2018/12/youtube-search-api-website.html

© www.soinside.com 2019 - 2024. All rights reserved.