■環境準備:
以下、
①googleアカウント作成する
② プロジェクト作成する
③ 管理画面の「APIとサービス」 」に移動する。
・「ライブラリ」に移動し、「YouTube Data API v3」を追加する
・「認証情報」に移動し、「OAuth 2.0 クライアント ID」を作成する。

④ refresh_token 取得する用の code を取得する。
① 以下をブラウザにて開く
「https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=[client_id]&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube&access_type=offline」
⇒「Google にログイン」⇒表示したコードメモする。
➁上記取得したコードを以下でrefresh_tokenとtokenを取得する
curl –data “code=[code]” –data “client_id=[client_id]” –data “client_secret=[ client_secret ]” –data “redirect_uri=urn:ietf:wg:oauth:2.0:oob” –data “grant_type=authorization_code” –data “access_type=offline” https://www.googleapis.com/oauth2/v4/token
※Linux環境にて確認済み
いかのような値取得できます。
{
“access_token”: “xxxxxxxxxxxxxxx”,
“expires_in”: 3599,
“refresh_token”: “xxxxxxxxxxxxxxxxxxx”,
“scope”: “https://www.googleapis.com/auth/youtube”,
“token_type”: “Bearer”
}
➄ youtube チャンネル作成する。(デフォルト)
■apxコード
※ 上記取得した refresh_token 利用し、実行時に access_tokenを取得し、アップする。
public static String getGoogleApiToken(){
String access_token ='';
HttpRequest req = new HttpRequest();
String client_id = 'xxx';
String client_secret = 'xx';
String refresh_token ='xx';
String endPoint = 'https://accounts.google.com/o/oauth2/token';
req.setHeader('Content-Type', 'application/x-www-form-urlencoded');
req.setEndpoint(endPoint);
req.setMethod('POST');
String body = 'client_id='+EncodingUtil.urlEncode(client_id,'UTF-8')
+'&client_secret='+EncodingUtil.urlEncode(client_secret,'UTF-8')
+'&refresh_token='+EncodingUtil.urlEncode(refresh_token,'UTF-8')
+'&grant_type='+EncodingUtil.urlEncode('refresh_token','UTF-8');
req.setBody(body);
Http http = new Http();
HTTPResponse res = http.send(req);
System.debug('*Resp:' + String.ValueOF(res.getBody()));
if(res.getStatusCode() == 200){
Map<String, Object> requestBody = (Map<String, Object>)JSON.deserializeUntyped(res.getBody());
access_token = String.valueOf(requestBody.get('access_token'));
system.debug('access_token=' + access_token);
}
return access_token;
}
public static String uploadFileToYoutube(String pId){
String access_token = getGoogleApiToken();
List<ContentVersion> cvList = getContentVersionList(pId);
String endPoint = 'https://www.googleapis.com/upload/youtube/v3/videos';
//以下設定方法また不明
/**
+ '&part='+EncodingUtil.urlEncode('snippet','UTF-8')
+ '&snippet.title='+EncodingUtil.urlEncode('test of a title','UTF-8')
+ '&snippet.title='+EncodingUtil.urlEncode('test of a title','UTF-8')
+ '&status.license='+EncodingUtil.urlEncode('creativeCommon','UTF-8')
+ '&snippet.description='+EncodingUtil.urlEncode('test of video description','UTF-8');
***/
HttpRequest req = new HttpRequest();
req.setHeader('Content-Type', 'application/octet-stream');
// req.setHeader('Content-type', 'video/mp4');
req.setHeader('Authorization', 'Bearer '+ access_token);
req.setEndpoint(endPoint);
req.setMethod('POST');
req.setBodyAsBlob(cvList[0].VersionData);
Http http = new Http();
HTTPResponse res = http.send(req);
System.debug('*Resp:' + String.ValueOF(res.getBody()));
if(res.getStatusCode() == 200){
return endPoint;
}
return '';
}
現状、動画アップできましたが、「利用規約とポリシー」で自動的に非公開にしてしまいました。。。
参考:
https://pretagteam.com/question/upload-video-on-youtube-using-curl-and-api-v3