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して利用するようにしました。




