milviのWebAPIを利用し、ログイン、動画アップロード、アップロードした動画の確認をAPI上で行う方法について説明します。配信者用のWebAPI(VOD API)のその他のAPIについては、VOD APIドキュメントを確認してください。
配信者用のトークンを取得する
配信者用のトークンを取得することで、コンテンツ管理、動画アップロードなどの配信に関わるWebAPIの操作が可能になります。
当APIでは、Bearer Token (OAuth2.0) を採用しています。
リクエスト
shell
curl -v -X POST 'https://${end_point}/distributors/auth/token'
-H 'Content-Type: application/json'
-d '{
"grant_type": "password",
"refresh_token": "exampleToken",
"password": "password",
"contractor_id": "contractorid",
"distributor_id": "distributorid"
}'
Payload
Content type:application/json
{
"grant_type": "password",
"refresh_token": "exampleToken",
"password": "password",
"contractor_id": "contractorid",
"distributor_id": "distributorid"
}
REQUEST BODY SCHEMA: application/json
- grant_type(required):Enum: "password" "refresh_token"
- refresh_token:リフレッシュトークン
- password:配信者用パスワード
- contractor_id:契約者ID
- distributor_id:配信者ID
レスポンス例(200OK)
{
"distributor_id": "distributorid",
"access_token": "exampleAccessToken",
"access_token_expires_at": "2020-01-01T00:00:00.000000+09:00",
"refresh_token": "exampleRefreshToken",
"refresh_token_expires_at": "2020-01-01T00:00:00.000000+09:00"
}
以降、各APIへのリクエスト時には、当該APIで取得したトークンをヘッダーに設定してください。
動画をアップロードする
millviに動画をアップロードするにはいくつかの段階を踏みます。
Step.1 一時アップロードURLの取得
millviにアップロードする際に一時的にテンポラリ環境へのアップロードを実施する必要があります。
curl -v -X GET 'https://${end_point}/file/upload/tmp'
-H 'Authorization: Bearer {access_token}'
レスポンス例(200OK)
{
"url": "https://xxxx.xxx.xxx",
"key": "tmp:xxxxxxxxx",
"expires_at": "2020-01-01T00:00:00.000000+0900"
}
urlとkeyには有効期限(expires_at)が設定されています。※5分
Step.2 ファイルのアップロード
Step1. 一時アップロードURLの取得で返ってきたurlを使ってファイルのアップロードをします。
curl -v -X POST 'https://xxxx.xxx.xxx'
アップロードしたい動画をバイナリーファイルとしてアップロードします。
Step3. コンテンツメタ情報の登録
テンポラリ環境にアップロードされた動画をmillviにメタ情報とともに登録します。
curl -v -X POST 'https://${end_point}/contents'
-H 'Authorization: Bearer {access_token}'
-H 'Content-Type: application/json'
-d '{
"title": "タイトル",
"description": "説明",
"tag": [
"tag1",
"tag2"
],
"recipe_id": "1",
"public_setting": {
"type": "period",
"start": "2022-03-01 00:00:00+09:00",
"end": "2022-04-01 00:00:00+09:00"
},
"is_password_required": false,
"password": "password",
"upload_info": {
"file_name": "{{アップロードするファイル名.mp4}}",
"key": "tmp:xxxxxxxxx",
"is_multipart": true,
"upload_id": "nl5vrMWgBDUFOa9P",
"parts": [
{
"part_number": 1,
"e_tag": "09b435e72bda3820"
}
]
}
}'
レスポンス例(200OK)
{
"content_id": "4ba28124-c54g-83d8-9xxb-5324bddbafc9",
"title": "タイトル",
"status": "CONVERT_COMPLETED",
"created_at": "2022-03-01 00:00:00.000000+09:00",
"updated_at": "2022-04-01 00:00:00.000000+09:00",
"description": "説明",
"origin_file_name": "{{アップロードしたファイル名.mp4}}",
"origin_file_size": 1024,
"public_setting": {
"type": "period",
"start": "2022-03-01T00:00:00.000000+0900",
"end": "2022-04-01T00:00:00.000000+0900"
},
"media_type": "video",
"tag": [
"tag1",
"tag2"
],
"is_password_required": false,
"conversion_rate": 100,
"recipe_id": "1",
"duration": 10,
"subtitles": [
{
"subtitle_id": "1fb76906-9f13-49fe-a13f-46714d81c250",
"label": "日本語",
"srclang": "ja",
"is_default": false,
"is_enabled": false,
"order": 0,
"status": "PROCESSED",
"created_at": "2022-01-01T00:00:00.000000+0900",
"updated_at": "2022-01-01T00:00:00.000000+0900"
}
],
"chapter": {
"label": "第1章",
"is_enabled": false,
"created_at": "2022-01-01T00:00:00.000000+0900",
"updated_at": "2022-01-01T00:00:00.000000+0900"
},
"pdf_info": {
"image_file_path": "a4f648808d00ce7fdc2ccc7477a66620be490c3/4ba28124-c54g-83d8-9xxb-5324bddbafc9/origin_file",
"total_page_count": 1
}
}
アップロードされた動画の情報を取得する
アップロードした動画は、コンテンツ詳細情報取得のWebAPIから確認できます。
curl -v -X GET 'https://${end_point}/contents/{content_id}?thumbnail_url_expires_in_days=1000'
-H 'Authorization: Bearer {access_token}'
レスポンス(200OK)
{
"content_id": "4ba28124-c54g-83d8-9xxb-5324bddbafc9",
"title": "タイトル",
"status": "CONVERT_COMPLETED",
"created_at": "2022-03-01 00:00:00.000000+09:00",
"updated_at": "2022-04-01 00:00:00.000000+09:00",
"description": "説明",
"origin_file_name": "origin_file.mp4",
"origin_file_size": 1024,
"public_setting": {
"type": "period",
"start": "2022-03-01T00:00:00.000000+0900",
"end": "2022-04-01T00:00:00.000000+0900"
},
"media_type": "video",
"tag": [
"tag1",
"tag2"
],
"is_password_required": false,
"conversion_rate": 100,
"recipe_id": "1",
"duration": 10,
"subtitles": [
{
"subtitle_id": "1fb76906-9f13-49fe-a13f-46714d81c250",
"label": "日本語",
"srclang": "ja",
"is_default": false,
"is_enabled": false,
"order": 0,
"status": "PROCESSED",
"created_at": "2022-01-01T00:00:00.000000+0900",
"updated_at": "2022-01-01T00:00:00.000000+0900"
}
],
"chapter": {
"label": "第1章",
"is_enabled": false,
"created_at": "2022-01-01T00:00:00.000000+0900",
"updated_at": "2022-01-01T00:00:00.000000+0900"
},
"pdf_info": {
"image_file_path": "a4f648808d00ce7fdc2ccc7477a66620be490c3/4ba28124-c54g-83d8-9xxb-5324bddbafc9/origin_file",
"total_page_count": 1,
"thumbnail_url": "https://example.com/a4f648808d00ce7fdc2ccc7477a66620be490c3/4ba28124-c54g-83d8-9xxb-5324bddbafc9/origin_file.0000000.jpg"
},
"thumbnail_info": [
{
"path": "https://example.com/a4f648808d00ce7fdc2ccc7477a66620be490c3/4ba28124-c54g-83d8-9xxb-5324bddbafc9/origin_file.0000000.jpg",
"id": "1",
"is_active": true,
"thumbnail_url": "https://example.com/a4f648808d00ce7fdc2ccc7477a66620be490c3/4ba28124-c54g-83d8-9xxb-5324bddbafc9/origin_file.0000000.jpg"
}
]
}