使用 Youtube api v2,可以轻松获取视频。只需发送这样的查询:
Youtube api v2 还有一个用于构建查询的交互式演示页面: http://gdata.youtube.com/demo/index.html
用Youtube api v3,不知道对应的方式。请用 api v3 给我指路。
谢谢!
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}
您可以在文档页面末尾测试这些内容。
这应该可以。此代码仅获取并输出标题,但您可以获得任何您想要的详细信息
// 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>
如果考虑配额成本,遵循这个简单的算法可能会有所帮助。
首先从 https://www.youtube.com/feeds/videos.xml?channel_id= 获取数据...这是一个简单的 XML feed,它将为您提供视频 ID,但您无法指定更多“部分” '(统计数据等)。
使用该列表中的视频 ID,在 /videos API 端点上进行查询,该端点允许以逗号分隔的视频 ID 列表,这只会导致 1 配额成本,加上任何其他部分参数的 0-2。正如 @chrismacp 指出的,使用 /search 端点更简单,但配额成本为 100,这可以快速增加。
当您进行第二次调用时,这里需要考虑资源(CPU、内存等),但我相信在很多情况下这可能是一个有用的方法。
API V3 中发生了很大变化。这是一个视频,可引导您完成获取给定频道中上传的视频列表所需的 v3 API 调用,并使用 API Explorer 进行现场演示。
YouTube 开发者直播:在 v3 中获取频道的上传内容 - https://www.youtube.com/watch?v=RjUlmco7v2M
如果它对这里的任何人有帮助,这就是我发现的,到目前为止似乎对我来说效果很好。 在发出此请求之前,我将通过 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}
相当于你发布的请求实际上是3.0 api中的搜索,而不是播放列表请求。这样做也更容易。不过,您确实需要将用户名替换为频道 ID。
例如。获取 https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=UUGhCVGZ0ZSpe5hJHWyiLwHA&key={YOUR_API_KEY}
这里是一些使用官方 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);
});
});
另一种方法可能是通过以下方式获取当前经过 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
如果您想获取播放列表中超过 300 个视频的视频,请不要使用 playlistitems.list。您可以在“尝试”部分中的 Google 链接“https://developers.google.com/youtube/v3/docs/playlistItems/list”中实时尝试。它返回未定义。
我也在我的项目中使用过。它仅返回未定义。
在 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'];
}
在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
$.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;
})
}
);
}
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