Box Developerドキュメント

BoxWorks 2024でコンテンツとAIの可能性について紹介します。

詳細を表示

Skillsカードのメタデータ

Skillsカードのメタデータ

処理サービスによってファイルのメタデータが特定されたら、アプリケーションはそのデータをBoxに保存されているファイルにメタデータとして書き戻すことができます。

このプロセスには、以下の手順が含まれます。

  1. スキルカードのメタデータの準備
  2. ファイルへのメタデータの書き込み

スキルカードのメタデータの準備

Skillsメタデータは、グローバルに利用可能なboxSkillsCardsという名前のメタデータテンプレートを使用します。このテンプレートは、関連ファイルに保存されるJSON構造の特定の形式に従います。

Boxでは現在、4種類のカードがサポートされています。

キーワードファイルの横にキーワードのリストを表示します。 画像
タイムライン一連のテキスト/画像を表示します。それらの画像がタイムラインに表示される時刻は、クリックすると表示されます。 画像
トランスクリプトトランスクリプトと、それに対応するタイムスタンプを表示します。 画像
ステータスユーザーにステータスを表示します。これは、ファイルの処理中にスキルのステータスをユーザーに通知するために使用できます。

ファイルへのメタデータカードの書き込み

ファイルに1つ以上のカードを書き込むには、POST /files/:id/metadata/global/boxSkillsCards APIを使用して、Box Skill cardsのリストを渡します。

cURL
curl -X POST https://api.box.com/2.0/files/12345/metadata/global/boxSkillsCards \
    -H 'Authorization: Bearer <ACCESS_TOKEN>' \
    -H 'Content-Type: application/json' \
    -d '{
      "cards": [{
        "type": "skill_card",
        "skill_card_type": "keyword",
        "skill_card_title": {
          "code": "license-plates",
          "message": "Licence Plates"
        },
        "skill": {
          "type": "service"
          "id": "license-plates-service"
        },
        "invocation": {
          "type": "skill_invocation"
          "id": "license-plates-service-123"
        },
        "entries": {
          { "text": "DD-26-YT" },
          { "text": "DN86 BOX" }
        }
      }],
    }'

Node
const metadata = {
    cards: [{
        "type": "skill_card",
        "skill_card_type": "keyword",
        "skill_card_title": {
            "code": "license-plates",
            "message": "Licence Plates"
        },
        "skill": {
            "type": "service"
            "id": "license-plates-service"
        },
        "invocation": {
            "type": "skill_invocation"
            "id": "license-plates-service-123"
        },
        "entries": {
            { "text": "DD-26-YT" },
            { "text": "DN86 BOX" }
        }
    }]
}

client.files.addMetadata('12345', 'global', 'boxSkillsCards', metadata)
    .then(metadata => {
      // ...
    })

Python
metadata = {
    cards: [{
        "type": "skill_card",
        "skill_card_type": "keyword",
        "skill_card_title": {
            "code": "license-plates",
            "message": "Licence Plates"
        },
        "skill": {
            "type": "service"
            "id": "license-plates-service"
        },
        "invocation": {
            "type": "skill_invocation"
            "id": "license-plates-service-123"
        },
        "entries": {
          { "text": "DD-26-YT" },
          { "text": "DN86 BOX" }
        }
    }]
}

client.file(file_id='12345').metadata(scope='global', template='boxSkillsCards').create(metadata)

Java
BoxFile file = new BoxFile(api, "12345");
Metadata metadata = new Metadata()
file.createMetadata("global", "boxSkillsCards", metadata);

.NET
var metadataValues = new Dictionary<string, object>()
{
  cards: [{
    "type": "skill_card",
    "skill_card_type": "keyword",
    "skill_card_title": {
      "code": "license-plates",
      "message": "Licence Plates"
    },
    "skill": {
      "type": "service"
      "id": "license-plates-service"
    },
    "invocation": {
      "type": "skill_invocation"
      "id": "license-plates-service-123"
    },
    "entries": {
      { "text": "DD-26-YT" },
      { "text": "DN86 BOX" }
    }
  }]
};
Dictionary<string, object> metadata = await client.MetadataManager
    .CreateFileMetadataAsync(fileId: "12345", metadataValues, "global", "boxSkillsCards");

Box Skillカードがすでにこのファイルに適用されている場合は、このAPIコールによって、HTTPステータスコード409と共にエラーが返されます。

ファイルのメタデータカードの更新

Box Skillカードがすでにファイルに適用されている場合、PUT /files/:id/metadata/global/boxSkillsCards APIを使用して更新することができます。このAPIは、実行する多数の操作 (op) を受け取り、各操作を使用すると、特定の位置 (path) のカードを置き換えることができます。

cURL
curl -X PUT https://api.box.com/2.0/files/12345/metadata/global/boxSkillsCards \
    -H 'Authorization: Bearer <ACCESS_TOKEN>' \
    -H 'Content-Type: application/json-patch+json' \
    -d '[
      "op": "replace",
      "path": "/cards/0",
      "value": {
        "type": "skill_card",
        "skill_card_type": "keyword",
        "skill_card_title": {
          "code": "license-plates",
          "message": "Licence Plates"
        },
        "skill": {
          "type": "service"
          "id": "license-plates-service"
        },
        "invocation": {
          "type": "skill_invocation"
          "id": "license-plates-service-123"
        },
        "entries": {
          { "text": "DD-26-YT" },
          { "text": "DN86 BOX" }
        }
      }
    ]'

Node
const updates = [
    {
        'op': 'replace',
        'path': '/cards/0',
        'value': {
            "type": "skill_card",
            "skill_card_type": "keyword",
            "skill_card_title": {
                "code": "license-plates",
                "message": "Licence Plates"
            },
            "skill": {
                "type": "service"
                "id": "license-plates-service"
            },
            "invocation": {
                "type": "skill_invocation"
                "id": "license-plates-service-123"
            },
            "entries": {
                { "text": "DD-26-YT" },
                { "text": "DN86 BOX" }
            }
        }
    }
]

client.files.updateMetadata('12345', 'global', 'boxSkillsCards', updates)
    .then(metadata => {
      // ...
    })

Python
file_metadata = client.file(file_id='12345').metadata(scope='global', template='boxSkillsCards')

card = {
    "type": "skill_card",
    "skill_card_type": "keyword",
    "skill_card_title": {
        "code": "license-plates",
        "message": "Licence Plates"
    },
    "skill": {
        "type": "service"
        "id": "license-plates-service"
    },
    "invocation": {
        "type": "skill_invocation"
        "id": "license-plates-service-123"
    },
    "entries": {
        { "text": "DD-26-YT" },
        { "text": "DN86 BOX" }
    }
}

updates = file_metadata.start_update()
updates.replace('/cards/0', card)
file_metadata.update(updates)

Java
BoxFile file = new BoxFile(api, "12345");
Metadata metadata = new Metadata()
file.updateMetadata("global", "boxSkillsCards", metadata);

.NET
var card = new Dictionary<string, object>()
{
  "type": "skill_card",
  "skill_card_type": "keyword",
  "skill_card_title": {
    "code": "license-plates",
    "message": "Licence Plates"
  },
  "skill": {
    "type": "service"
    "id": "license-plates-service"
  },
  "invocation": {
    "type": "skill_invocation"
    "id": "license-plates-service-123"
  },
  "entries": {
    { "text": "DD-26-YT" },
    { "text": "DN86 BOX" }
  }
};
var updates = new List<BoxMetadataUpdate>()
{
    new BoxMetadataUpdate()
    {
        Op = MetadataUpdateOp.replace,
        Path = "/cards/0",
        Value = card
    }
};
Dictionary<string, object> updatedMetadata = await client.MetadataManager
    .UpdateFileMetadataAsync("12345", updates, "global", "boxSkillsCards");