DrupalにZOOMEの動画を埋め込む

MediaFrontモジュールはEmbedded Media Fieldモジュールの機能を使って外部SNSで公開している動画、画像や音楽を自分のブログのOSMPlayerで再生できるようになります。
※もう1つにFileFieldでアップロードした動画ファイルと画像ファイルからOSMPlayerで再生できるようにもなります。

外部SNSはProviderと呼ばれ、それぞれのSNSに対応したProvider用のMediaモジュールを別途追加することで可能になります。
※モジュールごとにサポート機能はことなります。

当サイトで公開しているYouTubeの動画もこのMedia:YouTubeモジュールを導入することで実現しています。
※YouTubeの場合はほぼフルサポートなので、なにができるかの参考になります。

Mediaモジュールは海外の多くのサイトのものが用意されていますが、日本国内のものはありません。
そのためZOOMEのような国内サイトのものは自分で作成しなければなりません。

今回はその方法について検討してみました。

MediaFront+Embedded Media Field+Mediaモジュールでは、YouTubeのものは対応していますが、ZOOMEは未対応です。
YouTubeのモジュールを参考にZOOME用のモジュールを作成しようとも思いましたが、そもそも外部プレイヤーを使って再生させる方法がわからず断念しました。

そこで、ZOOME APIを利用する方法を思いつきましたが、YouTubeの場合のように気にいった動画単位での貼り付けをするのであれば、APIを利用するのはかえって手間がかかるだけで普通にコンテンツ本文に埋め込み用コードを貼り付ければすみます。
動画を単体で埋め込む場合はわざわざAPIを使う必要がないということになります。

なので、タグ検索の機能を使ってユーザ名で検索し、そのユーザが公開している動画をすべて貼り付けることにしました。
これと同時に、YouTubeのほうもタグ検索で得たRSSフィードから動画用ノードを自動作成する方法に変更しました。
※FeedAPI+Feed Element Mapperを導入しました。

あとは、ZOOMEのタグ検索結果からいかにして当サイトに埋め込むかだけです。

ZOOMEはXML-RPCサーバの機能があり、接続のためのAPI情報が公開されています。
XML-RPCサーバ機能はDrupalも同じですが、ZOOMEのXML-RPCサーバへ接続して情報を取得するにはXML-RPCクライアントが必要になります。
Drupalにクライアント機能があるのかどうかがよくわかりませんでしたので、PEARのXML-RPCを導入しました。
PEAR自体の構成は前にすませてあったので、XML-RPCの導入だけですみました。
※PEARの導入方法などはこちらを参照してください。

動画ファイルの情報は以下の手順で取得するようにPHPコードを作成しました。
1.ユーザ名によるタグ検索により、zoomeidやdiaryidを取得
2.取得したzoomeidとdiaryidから動画情報を取得
3.入手した情報から必要な情報だけを抽出
4.取得した動画情報を表示するためのマークアップを生成

1から4を処理することで、ZOOMEのお気に入りユーザが公開している動画を埋め込むことができるようになります。

ZOOME APIのほとんどで必須となるのがzoomeid(数値)やdiaryid(数値)になるので、これを取得しないと始まりません。
その取得のためにタグ検索を使っています。
1~2を対象ユーザすべてに対して繰り返し実行することで、すべての動画情報を取得します。
3で埋め込みに必要な情報(タイトル、公開日時、投稿者、htmlscriptコード)を抽出しています。
あとは、4でそれを表示するようにしているだけです。

現在、3までは完成しましたが、4番で躓いています。
以前はページやノードなどの本文にPHPコードを記述すれば実行結果が表示されていたはずが、今は実行されなくなっているようで原因がわかりません。
そのため、出力をRSSフィードの形式に整形してみたり、HTML形式に整形してみたりしましたが、希望通りの結果になりません。
外部PHPを実行しているため、当サイトのフォーマットとは無関係に表示されてしまいます。

サイト内に都合よく表示するには、ノードにPHPコードを記述して実行するのが楽なのですが、何が悪いのやら・・・
もしかするとBetter Formatterモジュールの影響なのでしょうか・・・

現段階での成果物は以下のようになりました。(途中)


TODO
Drupalシステム内で機能するようにする
投稿日時でソートする。
レイアウトを調整する。


2011.07.18 とりあえず完成



 

方法(概略)

1.ユーザ名をタイトルにしたコンテンツを作成
2.Viewsを作成する。
タイトル名を検索キーにタグ検索+動画情報取得を実行した結果からRSSフィードを生成する。
3.ZOOME動画用のコンテンツタイプを作成する。
次の工程でRSSフィードからノードを作成するためのコンテンツタイプとなる。
4.Feedノードを作成する。
2番で生成したRSSフィードのURLを入力+3番で作成したコンテンツタイプでノードを作成するよう設定する。
5.RSSフィードと作成するノードの紐付けを設定する。
ここで使用するパーサー、RSSフィードの記述、ノードのフィールド構成が影響します。
6.3番で作成したコンテンツタイプのテンプレートを編集する。
テーマ内のディレクトリにノードテンプレートを新規作成しました。
ここで再度動画情報から貼り付け用objectコードを取得しています。
7.ZOOME動画のギャラリを表示するViewsページを作成する
投稿日でソートするように設定する。
ノードをそのままグリッド表示するようにしています。
8.Viewsページのレイアウト調整のためCSSを編集する。

以上で完成です。
 

機能(概略)

登録したユーザ名(ニックネーム)の動画をすべて表示できるようにしています。
ユーザ名でタームを作成するようにしてあります。
Viewsの設定をかえればソート順序も変更できます。
更新間隔は12時間ごと、新たに見つかった動画のみ新規ノードを作成するようにしてあります。
※外部プレイヤーを使う方法が不明だったので貼り付け用objectコードを埋め込んでいます。
※タグ検索の結果次第では全く意図しない動画が表示されてしまう可能性があります。


2011.07.18 負荷の改善

作成したノード自体は実際のObejctコードを保存していないため表示するたびにzoomeへの接続が発生します。
そのため、ルールをつかって新規作成時にobjectコードを保存するように変更しました。
※Feedでobjectコードを渡せればもっとスマートにできるのですが・・・
 

Drupalバージョン

Drupal 6.x テーマ

モジュール

MediaFront