CMS API|HubDB
HubDBは、スプレッドシートと同じようにテーブル(表)の行、列、セルでデータを表現するリレーショナル データ ストアです。データを保存および管理したり、HubSpotのCMSページを強化したりすることができます。HubDBテーブルはHubSpotアカウント内、またはHubDB APIを使用して変更可能です。また、HubLでHubDBテーブルにアクセスし、HubDB内のデータをHubSpotのCMSページで使用したり、プログラマブルEメール(英語)に取り込んだりすることもできます。
注:GET
をサポートするエンドポイントはCORS
もサポートしているため、JavaScriptとアカウントIDを使用してクライアントサイドでテーブルのデータにアクセスすることができます。その他のメソッドと全てのテーブルを取得するエンドポイントは認証が必要なため、CORS
をサポートしていません。
この記事では、HubDBテーブルデータを作成および取得する場合に使用する基本的なエンドポイントについて説明します。利用可能な全てのエンドポイントを確認するには、この記事の上部にある[エンドポイント]タブをクリックしてください。
- テーブルには
name
とlabel
の両方が設定されている必要があります。テーブルの作成後に、この「name」を変更することはできません。「name」には半角の英小文字、数字、アンダースコアのみ含めることができますが、数字で始めることはできません。name
とlabel
は両方ともアカウント内で一意でなければなりません。 - APIでは、URLパスに
id
とname
の両方を含めて使用することができます。 - 行を
GET
するエンドポイントがvalues
フィールドで返すのは、id
ではなくname
です。また、行をPOST
/PUT
/PATCH
するエンドポイントには、values
フィールドでid
ではなくname
を渡す必要があります。 - 行を更新する
PATCH
エンドポイントで、スパース更新を使用できるようになりました。スパース更新とは、更新する必要がある列の値だけを指定できることを意味します(以前のバージョンでは、更新する必要がないものも含め、全ての列の値を指定する必要がありました)。複数選択型の列のように、値のリストを使用して列を更新する場合は、全ての値を含むリストを指定する必要があります。列から値を削除するには、リクエスト内でその列の値をnull
として指定する必要があります。 - 行を更新する
PATCH
エンドポイントを優先し、行のセルに対するget
/update
/delete
リクエストを行うためのエンドポイントを削除しました。 - インポートエンドポイントでは、JSON形式のオプションで既存のフィールドと併せてオプションフィールド
idSourceColumn
を使用できるようになりました。このフィールドを使用すると、行IDが格納されているCSVファイル内の列を指定できます。新しい行を既存の行の新しい値とともにインポートする場合、新しい行の行IDには0
を、既存の行の行IDには有効な行IDを指定します。詳細については、以下の「インポート」セクションをご参照ください。さらに、JSON形式のオプションに含まれる列マッピングのターゲットフィールドで、列の名前またはIDを使用することもできます。 - 複製エンドポイントには新しい名前と新しいラベルが必要です。
HubDBテーブルを作成するには、POST
リクエストを/cms/v3/hubdb/tables
に送信します。
リクエスト本文で、次の必須フィールドを指定します。
フィールド | タイプ | 説明 | 例 |
---|---|---|---|
name
| String | テーブルの内部名。テーブルの作成後に、この「name」を変更することはできません。「name」には半角の英小文字、数字、アンダースコアのみ含めることができますが、数字で始めることはできません。 |
"name": "my_table"
|
label
| String | ユーザーがHubSpotでテーブルを編集するときに表示される、テーブルのラベル。 |
"label":"My table"
|
さらに、次の任意のフィールドを指定できます。
フィールド | タイプ | 説明 | 例 |
---|---|---|---|
useForPages
| Boolean | テーブルを動的ページの作成に使用可能にするかどうかを指定します。 |
"useForPages": false
|
allowPublicAPIAccess
| Boolean | 承認なしでテーブルを読み取り可能にするかどうかを指定します。 |
"allowPublicApiAccess": false
|
allowChildTables
| Boolean | テーブルの子テーブルを作成可能にするかどうかを指定します。 |
"allowChildTables": false
|
enableChildTablePages
| Boolean | 子テーブルを使用してマルチレベルの動的ページ(英語)を作成する必要があるかどうかを指定します。 |
"enableChildTablePages": false
|
columns
| Object | テーブルの列。列プロパティーの詳細については、「テーブル列を追加する」セクションをご参照ください。 |
See "Add table columns" section below
|
列を追加せずにテーブルを作成するためのリクエストは、次のような内容になります。
HubDBテーブルの各列は、次のプロパティーを使用して定義可能です。
フィールド | タイプ | 説明 | 例 |
---|---|---|---|
name
| String | 必須。列の内部名。列の作成後に変更することはできません。 |
"name": "row_name"
|
label
| String | 任意。ユーザーがHubSpotで列を編集するときに表示される、列のラベル。 |
"label": "Row label"
|
type
| String | 列のデータタイプ。次のいずれかにする必要があります。
|
"type": "type"
|
options
| Object | selectタイプとmultiselectタイプの列で使用できるオプションのリスト。各オプションは、 |
"option": [{"name":"Option 1", "type":"option"}, {"name": "Option 2", "type": "option"}]
|
上記のフィールドを使用して新しいHubDBテーブルを作成するためのリクエストは、次のような内容になります。
//example request
{
"label": "Test Table",
"name": "test_table",
"columns": [
{
"name": "text_column",
"label": "Text Column",
"archived": false,
"type": "TEXT"
},
{
"name": "number_column",
"label": "Number Column",
"archived": false,
"type": "NUMBER"
},
{
"name": "multiselect",
"label": "Multi Select Column",
"archived": false,
"type": "multiselect",
"options": [
{
"name": "Option 1",
"type": "option"
},
{
"name": "Option 2",
"type": "option"
}
]
}
],
"useForPages": true,
"allowChildTables": true,
"enableChildTablePages": false,
"dynamicMetaTags": {
},
"allowPublicApiAccess": false
}
テーブルの作成後、列には昇順のIDが割り当てられます。既存の列を更新する際は、入力オブジェクトに列のid
フィールドを含めます。
行を追加するには、APIを使用して手動で行う方法と、CSVファイルから行をインポートする方法があります。
HubDBテーブルに行を追加するには、POST
リクエストを/cms/v3/hubdb/tables/{tableIdOrName}/rows
に送信します。
各テーブル行には、次のフィールドを含めることができます。
フィールド | タイプ | 説明 | 例 |
---|---|---|---|
values
| Object | 列名とその列に追加する値を指定するキーと値のペアのリスト。 |
"values": {
"text_column": "sample text",
"number_column": 76}
|
path
| String | 動的ページが有効なテーブルの場合、 |
"path": "example_url_path"
|
name
| String | 動的ページが有効なテーブルの場合、 |
"name": "Example Title"
|
childTableId
| Number | マルチレベルの動的ページ(英語)を作成する場合、 |
"childTableId": 123456
|
id
| Number | 行のID(昇順)。新しいテーブルに行を追加するとき、必要に応じて行IDを指定できますが、指定しなければHubSpotによって自動的にIDが割り当てられます。既存のテーブルに行を追加するときには、有効なIDを指定する必要があります。 |
"childTableId": 123456
|
上記のフィールドを使用したリクエストの例を以下に示します。
フィールド | Type | Description | Example |
---|---|---|---|
skipRows
| Number | スキップするヘッダー行の数。このフィールドの値は既定で |
"skipRows": 0
|
separator
| String | CSVファイル内で使用されている列の区切り文字。既定では |
"separator": ","
|
idSourceColumn
| Number | 行のID( この列が指定されている場合、インポートするCSVファイルに含まれる、IDが一致する行によって、テーブル内の既存の行が更新されます。任意のフィールドなので、初めてデータをテーブルにインポートするときには無視してもかまいません。 詳細については、以下の「リセットオプション」セクションを参照してください。 |
"idSourceColumn": 1
|
resetTable
| Boolean | 既定では 詳細については、以下の「リセットオプション」セクションを参照してください。 |
"resetTable": true
|
nameSourceColumn
| Number | 動的ページが有効なテーブルの場合、 |
"nameSourcecolumn": 5
|
pathSourceColumn
| Number | 動的ページが有効なテーブルの場合、 |
"pathSourcecolumn": 6
|
childTableSourceColumn
| Number | CSVファイル内で行の |
"childTableSourcecolumn": 3
|
columnMappings
| Array | ソースファイル内の列とインポート先HubDBテーブル内の列とのマッピングのリスト。 各マッピングは次の形式でなければなりません:
ファイルに |
"columnMappings": [{"source":1, "target": 2}, {"source": 2, "target": "column_name"}]
|
primaryKeyColumn
| String | 重複排除に使用する、ターゲットHubDBテーブル内の列の名前。このフィールドで列のIDを使用することはできません。 |
"primaryKeyColumn": "column_name"
|
encoding
| String | ファイルのエンコーディングの種類。例: |
"encoding": "utf-8"
|
format
| String | CSVのみサポートされています。 |
"format": "csv"
|
上記の表を使用したconfig
JSONの例を以下に示します。
データを日付型の列にインポートする際は、さまざまな日付形式を使用できます。
整数
yyyy/mm/dd
yyyy/mm/dd
mm/dd/yyyy
mm/dd/yy
これらの形式では、日付の前に月を指定する必要があります(つまり、dd/mm/yy
の形式は使用できません)。整数の区切り文字には、半角のハイフン(-
)またはスラッシュ(/
)を使用可能です。
準標準の日付形式
整数ベースの日付形式ほど標準化されていない日付形式をインポートすることもできます。例えば、次のような日付形式が対象です。
The 1st of March in the year 2022
Fri Mar 4 2022
March 4th '22
相対日付
HubSpotは、現在の日付を基準とした次の日付形式を解析します。
next Thursday
Today
tomorrow
3 days from now
CSVファイルからHubDBテーブルにデータをインポートするときに、resetTable
フィールドをtrue
またはfalse
(既定)に設定することで、HubDBの行データを上書きするかどうかを管理できます。
resetTable
がtrue
に設定されている場合:
- CSVファイル内の行に、行IDの列(
hs_id
)が存在しない場合、あるいは行IDが0
に指定されている場合、それらの行は、生成された新しい行IDとともに挿入されます。 - CSVファイル内の行IDがターゲットテーブルに既に存在する場合、テーブルの既存の行は入力ファイル内の新しい値で更新されます。
- テーブルに行が存在するものの、入力CSVファイルにその行に対応する行IDがない場合、その行はターゲットテーブルから削除されます。
- 入力CSVファイル内の行IDがターゲットテーブル内に存在しない場合は、生成された新しい行IDとともにそれらの行が挿入され、入力ファイル内で指定されている行IDは無視されます。
- 入力CSVファイル内に行IDの列が1つも含まれていない場合、ターゲットテーブルから全ての行が削除され、入力ファイル内の行が、生成された新しい行IDとともに挿入されます。
- CSVファイル内の行に、行IDの列(
resetTable
がfalse
(既定)に設定されている場合:
- CSVファイル内の行IDがターゲットテーブルに既に存在する場合、テーブルの既存の行は入力ファイル内の新しい値で更新されます。
- テーブルに行が存在するものの、入力CSVファイルにその行に対応する行IDがない場合、その行はターゲットテーブルから削除されずに、変更が加えられないままの状態になります。
- 入力CSVファイル内の行IDがターゲットテーブル内に存在しない場合は、生成された新しい行IDとともにそれらの行が挿入され、入力ファイル内で指定されている行IDは無視されます。
- CSVファイル内の行に行IDの列が存在しない場合、あるいは行IDが
0
に指定されている場合、それらの行は生成された新しい行IDとともに挿入されます。
テーブルの詳細を取得するか、またはテーブルの特定の行を取得するかに応じて、HubDBデータを取得するにはさまざまな方法があります。
- 公開されている全てのテーブルからテーブルの詳細を取得するには、
GET
リクエストを/cms/v3/hubdb/tables
に送信します。 - 公開されている特定のテーブルからテーブルの詳細を取得するには、
GET
リクエストを/cms/v3/hubdb/tables{tableIdOrName}
に送信します。 - 特定のテーブルから全ての行を取得するには、
GET
リクエストを/cms/v3/hubdb/tables{tableIdOrName}/rows
に送信します。 - テーブルから特定の行を取得するには、
GET
リクエストを/cms/v3/hubdb/tables{tableIdOrName}/rows/{rowId}
に送信します。
下書きモードでテーブルからデータを取得するには、この記事の上部にある[エンドポイント]タブを参照してください。
行データを取得する際に、フィルターを適用して結果を絞り込んだり、並べ替えたりできます。
HubDBテーブルデータを取得する際に、特定のデータを取得するためのクエリーパラメーターとしてフィルターを適用できます。フィルター クエリー パラメーターは、columnName__operator
の形式で作成します。
例えば、「bar」という名前の数値列がある場合、「bar」の値が10より大きい行だけを結果に含めるには、&bar__gt=10
とします。
全てのフィルターはAND結合されます(現在のところ、ORフィルターはサポートされていません)。
フィルターを適用する際は、次の点に注意してください。
multiselect
タイプの列の値を渡す場合、各値を半角カンマで区切る必要があります(例:multiselect_column__contains=1,2
)。datetime
フィルターでは、現在の時刻を基準とした値を指定するために、タイムスタンプに代わって相対日付を使用できます。例えば、-3h
は3時間前のタイムスタンプに相当し、10s
は10秒後のタイムスタンプに相当します。サポートされている時間単位は、ms(ミリ秒)、s(秒)、m(分)、h(時間)、d(日)です。現在の時刻を使用するには、値をゼロにします(0s)。
- これらのフィルターを使用するために組み込む
hs_id
列はnumber
タイプ、hs_created_at
列はdatetime
タイプ、hs_path
列およびhs_name
列はtext
タイプです。
以下に、各タイプの列に適用できる演算子について説明します。
演算子 | 名前 | Description |
---|---|---|
eq(またはなし)
| Equals | 全てのタイプの列。 このフィルターは、演算子が使用されていない場合に適用されます。multiselectタイプの列で使用する場合、指定された値と完全に一致する行が返されます。 |
ne
| Not equal to | 全てのタイプの列。 |
contains
| Contains | text、richtext、multiselect。 multiselectタイプの列で使用する場合、指定された値を全て含む行が返されます。 |
lt
| Less than | number、date、datetime。 |
lte
| Less than or equal to | number、date、datetime。 |
gt
| Greater than | number、date、datetime。 |
gte
| Greater than or equal to | number、date、datetime。 |
is_null
| Null | booleanタイプを除く全てのタイプの列。 このフィルターには値は不要です(例: |
not_null
| Not null | booleanタイプを除く全てのタイプの列。 このフィルターには値は不要です(例: |
like
| Like | text、richtext。 |
not_like
| Not like | text、richtext。 |
icontains
| Contains (case sensitive) | text、richtext。 |
startswith
| Starts with | text、richtext。 |
in
| In | number、select、multiselect。 渡されたオプションのうちの1つ以上が列に格納されている行が返されます。クエリーパラメーターに |
HubDBデータを取得するときに、クエリーパラメーターとして並べ替えを適用することで、返されるデータの順序を指定できます。データを並べ替えるには、sort
クエリーパラメーターを追加して、列名を指定します。
&sort=columnName
既定では、列が指定されている順序でデータが返されます。これを逆順で並べ替えるには、列名に-
を追加します。
&sort=-columnName
このパラメーターを複数指定することにより、複数の列を基準に並べ替えができるようになります。
列を基準とした並べ替えに加えて、次の3つの関数を使用可能です。
- geo_distance(location_column_name, latitude, longitude):所在地列の名前と座標を取り、指定の所在地列の値と指定された座標との距離の順で行を返します。
- length(column_name):列の名前を取り、列の値の長さ(文字列として計算される)の順で行を返します。
- random():ランダムな順序で行を返します。
この関数では逆順もサポートされます。例えば、次のgeo_distance
は、返されるアイテムを距離が最も長い順で並べ替えます。
sort=-geo_distance(location_column,42.37,-71.07)
上記のフィールドを使用したconfig
の例を以下に示します。
インポートエンドポイントに対するcurlコマンドの例:
貴重なご意見をありがとうございました。