Vimeo SDKを使い動画を取得する
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'; use Vimeo\Vimeo;
トークンの取得
$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');
とりあえずオプション無しで動画を取得すると、以下のような値が戻ってきます。
Array ( [body] => Array ( [total] => 5997 [page] => [per_page] => 25 [paging] => Array ( [next] => /me/videos?page=2 [previous] => [first] => /me/videos?page=1 [last] => /me/videos?page=240 ) [data] => Array ( [0] => Array ( [uri] => /videos/*************** [name] => *********************** [description] => [type] => video [link] => https://vimeo.com/********* [duration] => 543 [width] => 1920 [language] => [height] => 1080
ここで注目するのは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());
実行結果
[0]=> array(10) { ["created_time"]=> string(25) "2020-06-08T01:35:09+00:00" ["modified_time"]=> string(25) "2020-10-05T03:28:30+00:00" ["last_user_action_event_date"]=> string(25) "2020-10-05T03:28:30+00:00" ["name"]=> string(1) "FolderName" ["privacy"]=> array(1) { ["view"]=> string(6) "nobody" } ["resource_key"]=> string(40) "***************************" ["uri"]=> string(32) "/users/FolderID/projects/2024842" ["link"]=> NULL
その他、プロジェクト一覧やアルバム一覧なども取得可能ですが、ここでは省略いたします。
動画の取得自体は特に難しくはなく、それらをデータベースにインサート、次回は更新があった場合のみアップデートという自動処理を日に数回走らせました。詳細は省きますが、SalesforceからもAPIで動画管理データをSOQLで取得しデータベースにインサートし、VimeoのデータとJoinして利用するようにしました。