PHP: Youtube Data API v3にて動画情報をJSONで取得して表示する part2 キーワードで検索する

前回、PHPにて自分がデータ化しておいた動画IDの配列で、Youtubeの動画をチェックして出力し、すでに削除されているであろう動画IDを見つけるようなことをしました。

前回の記事中にも書きましたが、今回はキーワードから検索する方法を書いてみたいと思います。タイトルにPHPとありますがjQueryも使います

PHP: Youtube Data API v3にて動画情報をJSONで取得して表示する
以前、Youtube Data API v2の時にfeedを取得して動画を表示するというスクリプトを書いたんですが、v2のサービスが終了しv...

前回のスクリプトから変更する部分

前回は、すでに動画IDのデータ(配列)があったので、そこから検索しましたが、今回のキーワードで検索すると言うことから、そのキーワードをどう設定するかが、まずAPIを動作させるきっかけづくりになります。

方法として、

  • 何かしらのキーワードを予め用意しておく
  • ページのタイトル部分から抽出する
  • ファイル名などから抽出する
  • フォームパーツから入力

など、色々な方法が考えられます。このようなものは、PHPで取得しても良いのですが、jQueryでajaxを利用したりすると更に応用が効いたりしますし、セレクタの中のテキストを送れば良いので比較的簡単にphpにキーワードを送ることが可能になります。

例えば、フォームパーツから入力と言うのにしても以前のようにフォームを用意して、その中にinputフォームを用意する必要もありません。

このような感じでいきなり使えるわけです。
PHPの場合、データが送られているかどうかを判別するために、やはりフォームを利用して、submitボタン等が必要になってくるかも知れません。ここらは便宜選択して下さい。

jQueryの場合は以下のような極簡単なスクリプトで取得することができます。
inputフォームに何かしらテキストを入れてエンターを入力した時に、変数keywordにinputフォームの値が入り、それをclass=”check”のブロックに表示しています。

このスクリプトだと表示なわけですが、ajaxであればこれで値が取れるのでその値をPHPに送れば良いことになります。従来のフォームを利用した書き方の場合は、GETで送信するかPOSTで送信するかを考えておき、PHPで対応する$_GETか$_POSTで受けます。これはajaxも同じですが、基本的にajaxの場合は裏で動作する(※)ので何でも良いです。

※ ページの遷移が行われない、ブラウザのアドレス欄にgetの場合でもクエリが表示されないなどです。

ひとまず何らかの方法でPHPにキーワードを送るという手段を選択しなくてはいけません。

「何かしらのキーワードを予め用意しておく」この場合は、単純にPHPに変数を用意しておくだけでそれをキーワードとして利用すればよいです。

このような感じですね。

受け取ったキーワードからAPIを叩く

GETなりPOSTなりでPHPに送られたキーワードは、

で拾えますが、何かしらあると面倒なので、PHPでhtmlspecialcharsを使って処理しておきます。

もし、何かしらの送信がなく、予め必要なキーワードを用意しておく場合は、先にも書いたように$word = “カワサキ Ninja”;のようにしておくだけで良いです。この後、キーワードはurlencodeすることになるので、思いっきり手を書けた特別な処理は必要ないのではないかと思ったりも。

仮にNG wordを設定したい場合は、

このようにしておけばよいのではないでしょうか。$wordsに設定されている文字列を、implodeにより半角スペースで連結すると言う感じです。そしてurlencodeします。

いろいろ試してみたのですが、目的の動画を見つける時に、除外キーワード(-キーワード)を入れ過ぎると結果的にあまりよい感じの結果が得られない場合が多かったです。どのようなキーワードにするべきかは、予めYoutubeでテストしておく必要がありそうです。

APIを叩くアドレスを作る

前回のアドレスは、動画IDで検索していたため以下のようになりました。

今回のアドレスはキーワードで検索になるので、

このような感じになります。

idではなくsearchでクエリを送ります。またいくつデータを取得するかと言うことで、maxResults、どんな形式の動画を取得するかでvideoを設定しています。

前回同様、file_get_contentsが利用できる方はfile_get_contentsを、利用できない方は、前回を参考にcURLでAPIを叩きます。
ここではcUrlを利用して、それら取得部分を関数化したcuGet_contents()を利用します(前回記事参照)。

こうすることで、APIからjsonを取得して、それをデコードし配列化できます。

取得したデータを整形・出力

前回の動画IDから検索する方法では、その動画があるかないかはjsonのデータと、元々自分が作成しておいた動画IDのデータとを比較してないものを検出していましたが、今回のキーワードで検索の場合は、そのキーワードの組み合わせによって何も動画データが返ってこない場合があります。

何も検索結果のデータがない場合は、$getData[‘pageInfo’][‘totalResults’]が0になって返ってくるので、それで判別します。

データがある時の処理は、

このような感じで配列を作っておくと、

このような感じで、サムネイルが拾えたり、$dat_s[‘xx’]のxxを変更するだけで、様々な情報を取り出すことができるようになります。

前回は、aタグをクリックした時、そのhrefに仕込んだ動画IDを利用して、jQueryなどでプレイヤーを埋め込むような事をしましたが、例えば以下のように書いても画像(サムネイル)一覧でクリックしたら新しいウィンドウで動画IDのページにイケるんじゃなかろうかと思います。

どのように書き出すかは、人それぞれだと思うので、他に動画の再生回数とかそういうものを配列に入れておいて画像に重ねて表示しておくとか、マウスオーバーで画像タイトルを表示するというようなこともできると思うので、どんな情報が欲しいのかを明確にして、APIにその設定をし、取得したAPIから配列を作り便利に使う。

そういう感じでうまく利用できるのではないかと思います。

おまけ: JSONデコードした配列の中身をさっくり確認するために

前にどこかの記事に書いた気もするんですが、僕がいつも配列の中身はどうなってんだ?と言う場合に確認するために利用するのが以下の関数です。

これを書いておくと、例えば、

とすると、その中身が整理されて表示されます。配列の確認用にどうぞ。

スポンサーリンク

シェアする

フォローする

コメント

  1. […] YouTubeから自動的に動画の情報(URL、タイトル)を取得する http://www.imamura.biz/blog/google/youtube/15676 ; […]