Youtube API を使用して、公開、非公開、非公開にかかわらず、ユーザーが所有するキャプションなしのすべての動画を一覧表示するスクリプトを作成しようとしています。まず、ユーザーの資格情報を使用して認証します。
require_once 'Zend/Loader.php'; // the Zend dir must be in your include_path
Zend_Loader::loadClass('Zend_Gdata_YouTube');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
try {
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
$username = $Youtube_Login["Username"],
$password = $Youtube_Login["Password"],
$service = 'youtube',
$client = null,
$source = 'NAME', // a short string identifying your application
$loginToken = null,
$loginCaptcha = null,
$authenticationURL);
$yt = new Zend_Gdata_YouTube($httpClient, $applicationId, $clientId, $developerKey);
} catch ( Exception $e ) {
$err[] = $e->getMessage();
return false;
}
次に、2 つの方法でリストを返そうとします。最初にクエリを使用して、データベースからキャプションなしのビデオだけを取得しようとします。
try{
$query = $yt->newVideoQuery();
$query->setParam('caption', 'false');
$query->setParam('author', $Youtube_Login["Username"]);
$query->orderBy = 'viewCount';
$videoFeed = $yt->getVideoFeed($query);
} catch (Zend_Gdata_App_Exception $e) {
$err[] = $e->getMessage();
end_script(false);
}
ただし、非公開および限定公開の動画は結果に表示されません。2 回目の試行では、getUserUploads() 関数を使用してすべての動画を取得し、キャプションがないかどうかを確認します。
try{
$videoFeed = $yt->getuserUploads($Youtube_Login["Username"]);
} catch (Zend_Gdata_App_Exception $e) {
$err[] = $e->getMessage();
end_script(false);
}
foreach ($videoFeed as $videoEntry) {
foreach ($videoEntry->link as $link) {
if($link->rel == "http://gdata.youtube.com/schemas/2007#video.captionTracks"){
if($link->extensionAttributes['http://gdata.youtube.com/schemas/2007:hasEntries']['value'] == 'false'){
// Video has no caption entries, print entry info
}
}
}
}
これは正しい結果を返しますが、効率、速度、およびデータ転送が犠牲になります。Google が許可する 1 日のデータ転送量は非常に多く、動画の量が多い (そして増加している) ため、これは標準以下のソリューションです。
クライアントがリストする必要がある未公開および非公開のビデオを見つけるために、最初の試行を正しく認証する方法はありますか? または、ビデオのリスト全体をダウンロードしてトラバースする必要のない完全に別の方法ですか?
ありがとうございました!
アップデート:
これについては雇用主と話し合いましたが、OAuth はオプションではありません。
では、newVideoQuery() 関数を認証する方法はまったくないのでしょうか? 動画の所有者であっても、動画の個人データを取得できないように意図的に妨げられていますか?