SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Zend FrameworkでGoogleアプリケーションを使い倒す

Zend_GDataでYoutube動画検索アプリケーションを作成しよう

Zend FrameworkでGoogleアプリケーションを使い倒す(1)


searchVideo関数

 ここからがZend_Gdataの範囲となってきます。検索用関数のsearchVideo関数を作成します。

[1]サービスオブジェクトの生成

 まずはサービスクラスにあたるZend_Gdata_YouTubeクラスのオブジェクトを生成します。これはZend_Gdata_Mediaというクラスを継承しています。

[リスト4]Zend_Gdata_YouTubeコンストラクタ
Zend_Gdata_YouTube(Zend_Http_Client client, string applicationId, string clientId, string developerKey)

 コンストラクタ引数は次のとおりです。本サンプルでは引数を省略しています。

Zend_Gdata_YouTubeコンストラクタ引数
引数 省略時の値 内容
client Zend_Http_Client null Googleサーバと接続する際のHTTPクライアント。
applicationId string MyCompany-MyApp-1.0 アプリケーションID。「社名-アプリケーション名-バージョン」の形式で指定して、Googleサービス側でどのアプリケーションから接続されたのかを一意に特定するもの。
clientId string null クライアントID。ログの記録やデバッグなどの際にアプリケーションを識別するもの。Developer Registrationにて登録する。
developerKey string null デベロッパーキー。API リクエストを行う YouTube 開発者を識別するためのもの。Developer Registrationにて登録する。

[2]クエリオブジェクトの取得

 サービスオブジェクトであるZend_Gdata_YouTubeから、クエリオブジェクトであるZend_Gdata_YouTube_VideoQueryオブジェクトを取得します。

[リスト5]searchVideo関数の一部
$query = $youtube->newVideoQuery();
->new?

 上記では「$query = $youtube->newVideoQuery();」としてZend_Gdata_YouTubeオブジェクトのメンバ関数を使用しているようにみえますが、実はZend_Gdata_YouTubeにはそのような関数はありません。どういうことなのでしょうか。

 実はZend_Gdata_YouTubeクラスの継承元のZend_Gdata_Mediaクラスのさらに継承元のZend_Gdataクラスのさらに継承元のZend_Gdata_Appクラス。ここに次のような関数があります。

[リスト6]__call関数
public function __call($method, $args)

 これはPHP5から追加された未定義のメソッドを実行する機能です。例えば「$obj->methodA(argA)」とあり、「methodA」が未定義だった場合。__callが引数「$method="methodA"」、「$arg="argA"」として呼び出されそこで定義された処理が実行されます。

 同様に未定義の変数呼び出しについては__get、値設定については__setというものがあります。

 Zend_Gdata_Appでの__callメソッドは簡単に説明すると次のような動作をしています。前提としては「->newクラス名(引数)」として呼ばれることを想定しています。

[リスト7]Zend_Gdata_Appでの__call関数
if(引数$methodが「new」で始まる文字列だった場合に){
Zend_Gdata_App_Extension_クラス名 もしくは Zend_Gdata_App_クラス名で
    定義されたクラスが存在するかどうかチェック

if(クラスが存在する場合) {
        そのクラスのオブジェクトを引数を与えて生成する
if(オブジェクトがZend_Gdata_App_FeedEntryParentのインスタンスである場合) {
            HttpClientを設定する
        }
returnオブジェクト
    } else {
        エラー
    }
} else {
    エラー
}

 要するに「new クラス名(引数)」を使いやすいように実行してくれます。これで開発者はZend_Gdataにおけるお決まりのオブジェクト生成を快適に行えるようになります。

[3]クエリオブジェクトにパラメータを与える

 Zend_Gdata_YouTube_VideoQueryオブジェクトにパラメータを設定します。

[リスト8]searchVideo関数の一部
$query->videoQuery = $keyword;
$query->orderBy = 'viewCount';
$query->MaxResults = 10;

 Zend_Gdata_YouTube_VideoQueryオブジェクトにはさまざまな検索オプションが指定できます。主なものとして以下があります。

Zend_Gdata_YouTube_VideoQueryの主な検索オプション
パラメータ 意味 設定可能な値 意味
Author 投稿者 ユーザー指定値
FeedType 取得するフィード top rated 評価の高い動画
most viewed 人気の動画
recently featured おすすめ
mobile 携帯向け動画
related ある動画に関連づけられた動画
responses 別の動画へのレスポンスとして指定された動画
comments 動画へのコメント
Format 動画のフォーマット 1 モバイル向けRTSPストリーミングURL。H.263
5 埋め込み型プレイヤー(SWF)へのHTTP URL
6 モバイル向けRTSPストリーミングURL。MPEG-4 SP
MaxResult 取得する結果の最大件数 ユーザー指定値 デフォルトは25。最大で50
OrderBy 検索結果の表示順序 relevance デフォルト値。関連度
published 追加日
viewCount 再生回数
rating 評価
Racy 制限付きコンテンツを結果に含めるか include 含める
exclude デフォルト値。除外
StartIndex 結果セットのうち何番目のセットから取得するか ユーザー指定値
Time どの期間にアップロードされた動画を検索対象にするか today 当日
this_week 1週間以内
this_month 1か月以内
all_time デフォルト値。全期間
VideoQuery 検索キーワード ユーザー指定値

 上のようなパラメータを使用して、Youtubeサービスにどのようなリクエストを送信するかを設定します。

次のページ
まとめ

この記事は参考になりましたか?

Zend FrameworkでGoogleアプリケーションを使い倒す連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 森山 絵美(モリヤマ エミ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3695 2009/04/20 11:23

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー