CM制作など動画を扱っているクライアント様から「Vimeoに登録している約4,000件の動画を自社のデータベースに取り込み、自社サイトで検索させたい」というご相談が御座いました。BtoB取引が主で、営業マンが営業先で参考としてお見せする動画を探したり、自社サイトにアクセスした一般ユーザーが予算を条件として検索するなどの機能が必要とのことでした。
現在は動画クリエイターがVimeoに納品し、顧客との紐付けや公開設定、タグ管理などはSalesforceで行うため、検索用のデータは手作業で登録していました。これをVimeo及びSalesforceから必要なデータをAPIでデータベースに取り込み、一列のレコードとするまでを自動化することで効率化しました。
今回はこのViemoからの動画の取り込みについて書きたいと思います。
Vimeo SDKのダウンロード
https://developer.vimeo.com/api/libraries
プラットフォームはPHPなので、該当するSDKをダウンロードし設置し、読み込みます。
require 'vimeo_sdk/autoload.php'; |
トークンの取得
$client = new Vimeo(client_id, client_secret, access_token); |
https://developer.vimeo.com/apps
client_id, client_secret, access_tokenはVimeoでAPPを作成した際に発行されます。
Vimeo動画を取得する
$result = $client->request('/me/videos'); |
とりあえずオプション無しで動画を取得すると、以下のような値が戻ってきます。
[next] => /me/videos?page=2 |
[first] => /me/videos?page=1 |
[last] => /me/videos?page=240 |
[uri] => /videos/*************** |
[name] => *********************** |
ここで注目するのはpageです。全動画を一気に取得することは出来ず、25件づつ分割されています。
ページを指定してVimeo動画を取得する
$result = $client->request('/me/videos', array('page' => 1, 'per_page' => 5, 'sort'=>'date', 'direction'=>'asc' )); |
動画を日付昇順に5件づつに分割し、1ページ目を取得します。CRONで5分毎にpageを進めながら全動画を取得することにしました。
特定のフォルダーに入っている動画を取得する
$result = $client->request('/me/folders/{フォルダーID}/videos', array('page' => 1, 'per_page' => 5, 'sort'=>'date', 'direction'=>'asc' )); |
/manage/folders/12345
フォルダーIDはVimeo管理パネルで動画フォルダーへ移動した際のURL末尾の数字がフォルダーのIDになります。これを設定することでVimeoフォルダー内の動画のみを取得することが出来ます。
なお、フォルダーIDはフォルダー一覧から得られます。
$result = $client->request('/me/folders', array()); |
実行結果
string(25) "2020-06-08T01:35:09+00:00" |
string(25) "2020-10-05T03:28:30+00:00" |
["last_user_action_event_date"]=> |
string(25) "2020-10-05T03:28:30+00:00" |
string(40) "***************************" |
string(32) "/users/FolderID/projects/2024842" |
その他、プロジェクト一覧やアルバム一覧なども取得可能ですが、ここでは省略いたします。
動画の取得自体は特に難しくはなく、それらをデータベースにインサート、次回は更新があった場合のみアップデートという自動処理を日に数回走らせました。詳細は省きますが、SalesforceからもAPIで動画管理データをSOQLで取得しデータベースにインサートし、VimeoのデータとJoinして利用するようにしました。