誰でも自分のサイトに登録して、自分の YouTube ユーザー チャンネルに動画をアップロードできるようにしたいと考えています。
動画や、独自のログイン資格情報を必要とするものにコメントしてほしくありません。
使用する必要があります: ClientLogin 認証?
もしそうなら、自分のサイトが自分の YouTube チャンネル アカウントとやり取りできるようにするには、どうすればトークンを取得できますか?
私はここでちょっと迷っているので、ここのライトは大歓迎です。
誰でも自分のサイトに登録して、自分の YouTube ユーザー チャンネルに動画をアップロードできるようにしたいと考えています。
動画や、独自のログイン資格情報を必要とするものにコメントしてほしくありません。
使用する必要があります: ClientLogin 認証?
もしそうなら、自分のサイトが自分の YouTube チャンネル アカウントとやり取りできるようにするには、どうすればトークンを取得できますか?
私はここでちょっと迷っているので、ここのライトは大歓迎です。
ClientLogin を使用してこれを達成しました。基本的なクラスは次のとおりです。このクラスは、認証されたリクエストを行う準備ができている Zend HTTP クライアントのインスタンスを返します。
<?php
class GoogleAuthenticator {
public static function authenticate($logger) {
$tokenObj = new Token();
try {
$token = $tokenObj->get($token_name);
if(!empty($token)) {
//load a new HTTP client with our token
$logger->info('Using cached token: ' . $token);
$httpClient = new Zend_Gdata_HttpClient();
$httpClient->setConfig(array(
'maxredirects' => 0,
'strictredirects' => true,
'useragent' => 'uploader/v1' . ' Zend_Framework_Gdata/' . Zend_Version::VERSION
)
);
$httpClient->setClientLoginToken($token);
//attempt to use our token to make an authenticated request. If the token is invalid
// an exception will be raised and we can catch this below
$yt = new Zend_Gdata_YouTube($httpClient, 'uploader/v1', '', $youtube_api_key);
$query = new Zend_Gdata_YouTube_VideoQuery();
$query->setFeedType('top rated');
$query->setMaxResults(1);
$yt->getPlaylistListFeed(null, $query); //ignore the response!
} else {
$logger->info('Generating new HTTP client');
// Need to create a brand new client+authentication
$authenticationURL= 'https://www.google.com/youtube/accounts/ClientLogin';
$httpClient =
Zend_Gdata_ClientLogin::getHttpClient(
$username = YOUTUBE_USERNAME_PROD,
$password = YOUTUBE_PASSWORD_PROD,
$service = 'youtube',
$client = null,
$source = 'uploader/v1',
$loginToken = null,
$loginCaptcha = null,
$authenticationURL);
// get the token so we can cache it for later
$token = $httpClient->getClientLoginToken();
$tokenObj->destroy($token_name);
$tokenObj->insert($token, $token_name);
}
return $httpClient;
}catch(Zend_Gdata_App_AuthException $e) {
$tokenObj->destroy($token_name);
die("Google Authentication error: " . $e->getMessage());
}catch(Exception $e) {
$tokenObj->destroy($token_name);
die("General error: " . $e->getMessage());
}
} // authenticate()
} // GoogleAuthenticator
?>
これらの定数を定義する必要があります。
YOUTUBE_USERNAME_PROD
YOUTUBE_PASSWORD_PROD
または、それらを渡すようにクラスを変更します。トークンは期限切れになる可能性があるため、try/catch が必要です。トークンを更新する方法が必要です。また、トークンを作成した後でもトークンが有効であることを確認するために、ダミーのリクエストを行う必要があります。
YouTube (まあ、2 年ほど前の時点) では、10 分ごとより多くの動画をアップロードすることはできませんでした。これにより、ユースケースがかなり難しくなっています。つまり、1 つのアカウントに代わって複数の動画を 10 分以上アップロードすることを許可することはできません。しかし、それ以降、YouTube はこれを解除した可能性があります。幸運を
ドキュメントに API V3 の完全な解決策が見つからなかったので、インターネットで解決策を探していました。最後に、私は Python の例を PHP に移植し、同じ問題を抱えている他の人々のためにブログ投稿を書きました。
PHP で API バージョン 3 を使用して YouTube に動画をアップロードする
このブログ投稿では、OAuth2 で Youtube V3 API を使用しているため、非推奨になることを心配する必要はありません。V2 の他のすべての機能 (ClientLogin、AuthSub、および OAuth 1.0) は、2012 年 4 月 20 日に廃止されました。