我正在尝试开发一款Android应用,用户可以在该应用中将视频从设备上传到我的YouTube频道。
我使用Youtube Data API v3坚持使用OAuth2身份验证。我找到了允许用户选择自己的帐户并用于验证的代码,但这不是我想要的。
怎么做?
提前致谢。
答案 0 :(得分:2)
如果您的意思是从用户上传'移动/浏览器客户端直接直接到Youtube服务器,是的,它可以完全完成。我花了不少时间来弄清楚这些技巧。
这一步有点复杂。
步骤1.您需要注册一个" YouTube Data API v3" Google上的应用。
https://console.developers.google.com/project
到达那里并创建一个项目。然后去" APIS"并启用" YouTube Data API v3"。
您还需要为下一步获取客户ID和客户端密码。
并且不要忘记设置" redirect_uri" on" YouTube Data API v3" API控制台指向" http://YOURWEBSITE.com/get_refresh_token.php"。
步骤2.您需要来自youtube的刷新令牌。在大多数" youtube上传客户端"教程,他们教你如何上传到用户的频道,而不是你自己的频道。为了实现这个棘手的功能,您需要的是刷新令牌。
为了获得刷新令牌,您需要将此php文件放在您自己的服务器/网站上,并运行一次。将文件命名为" get_refresh_token.php"并把它放在你的网站上。它的网址必须与" redirect_uri"匹配。在最后一步中提到。
<?php
if(isset($_GET['code'])) {
$code = $_GET['code'];
$url = 'https://accounts.google.com/o/oauth2/token';
$params = array(
"code" => $code,
"client_id" => "CLIENT ID GET FROM GOOGLE",
"client_secret" => "CLIENT SECRET GET FROM GOOGLE",
"redirect_uri" => "http://YOURWEBSITE.com/get_refresh_token.php",
"grant_type" => "authorization_code"
);
echo getOnlineData($url, $params);
} else {
$params = array(
"response_type" => "code",
"client_id" => "CLIENT ID GET FROM GOOGLE",
"redirect_uri" => "CLIENT SECRET GET FROM GOOGLE",
"scope" => "https://www.googleapis.com/auth/youtube",
"access_type" => "offline"
);
$request_to = "https://accounts.google.com/o/oauth2/auth?".http_build_query($params);
header("Location: " . $request_to);
}
function getOnlineData($url, $post_arr) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
if($post_arr) {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_arr));
}
$temp_data = curl_exec($ch);
curl_close($ch);
return $temp_data;
}
?>
使用您频道的帐户登录。最后你会得到一个长串。找到&#34; refresh_token&#34;并安全地将其保存在您的数据库中。
步骤3.现在你有了refresh_token吗?然后,每当用户需要将视频上传到您的频道时,您的应用都需要为您的服务器调用access_token。您需要做的就是转换&#34; refresh_token&#34;通过以下代码进入多汁刷新access_token。
<?php
$url = "https://accounts.google.com/o/oauth2/token";
$params = array(
"client_id" => "CLIENT ID GET FROM GOOGLE",
"client_secret" => "CLIENT SECRET GET FROM GOOGLE",
"refresh_token" => "REFRESH TOKEN STORED IN DATABASE A LONG TIME AGO",
"grant_type" => "refresh_token"
);
$temp_data = getOnlineData($url, $params);
$temp_json = json_decode($temp_data);
echo $temp_json->access_token;
?>
步骤4.好了,现在你有#34; access_token&#34;,然后你需要做的就是把它传递到客户端(你的应用程序)。
现在你已经拥有了所需的一切。让魔法发生(javascript part)
var file = $('#VIDEO').get(0).files[0];
var token = 'THE TOKEN RETRIEVED FROM SERVER SIDE"
var metadata = {
snippet: {
title: "TITLE OF THE VIDEO",
description: "DESCR OF THE VIDEO",
categoryId: 22
},
status: {
privacyStatus: "public",
license: "youtube"
}
};
$.ajax({
url: 'https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet,status',
method: 'POST',
contentType: 'application/json',
headers: {
Authorization: 'Bearer ' + token,
'x-upload-content-length': file.size,
'x-upload-content-type': file.type
},
data: JSON.stringify(metadata)
}).done(function(data, textStatus, jqXHR) {
resumableUpload({
url: jqXHR.getResponseHeader('Location'),
file: file,
start: 0
});
})
function resumableUpload(options) {
$.ajax({
url: options.url,
method: 'PUT',
contentType: options.file.type,
headers: {
'Content-Range': 'bytes ' + options.start + '-' + (options.file.size - 1) + '/' + options.file.size
},
xhr: function() {
var xhr = $.ajaxSettings.xhr();
if(xhr.upload) {
xhr.upload.addEventListener('progress', function(e) {
if(e.lengthComputable) {
var bytesTransferred = e.loaded;
var totalBytes = e.total;
var percentage = Math.round((100*bytesTransferred/totalBytes));
if(percentage >= 100) percentage = 99;
$('#td_submit').text("Video Uploading on "+percentage+"%");
}
}, false);
}
return xhr;
},
processData: false,
data: options.file
}).done(function(response) {
alert("Your video's URL is https://www.youtube.com/watch?v="+response.id);
})
}
之后,您可以在
上看到所有处理视频