インベントリを定義する

🚧

コンテンツ識別子について

JS SDKでの組み込みにおいては、基本的なキーフィールド名として使用している[url]をコンテンツ識別子として使用することを推奨します。代替としてコンテンツ識別子として[id]を使うこともできますが、キーフィールド名の変更を我々に連絡する必要があります。

コンテンツの識別子には[文字列]を使用してください。この値に数値を用いることはできません。

📘

タイトルとタグフィールド

識別子の[url]以外に、[title]のフィールド名をコンテンツタイトル名に使用することを推奨します。このフィールドは、意味的な類似性を比較する際に参照されます。

リコメンデーションの候補対象となるお客様の[インベントリアイテム]には、[title]、[description]、[subtitle]、[author、[tags]などのたくさんのフィールドが存在するかもしれません。これらのフィールドを我々に提供していただくのは、下記の3つの理由があります:

  • フィールドの値を、リコメンデーションに表示するため。
  • フィールドの値をもとにルールを作成するため。
  • フィールドの値をModelの学習に活用するため。

フィールドを送るには、WebページのHTMLソースにそのフィールドを含める必要があります。これには2つの方法があります:

  • Open Graphタグ: これらのタグは既に設定されている可能性が高く、インテグレーションの手間が省ける利点があります。
  • カスタムLiftIgniter JSONオブジェクト: 新しいフィールドを渡して、Open Graphタグに設定された値を上書きすることができます。

**これらのフィールドは、お客様の[インベントリアイテム]に関連したもので、ユーザのコンテキストに関連するものではありません。例えば、これらのフィールドは、記事のタイトルや、商品の価格などの情報を渡すことに使用できます。しかし、このフィールドは現在のユーザやコンテキストに関する情報を渡すことには使用しません。ユーザコンテキストに関する情報を渡すためには、registerコールのoptsを使用してください。

これらのフィールドはすべてスクレープされますが、クエリでそれらのフィールドをリクエストしない限り、我々からは標準のリストにあるフィールド以外のフィールドを返すことはありません。

Open Graphタグ

どのWebページにおいても、すべての[Open Graphタグ]をスクレープします。これは、[og:]で始まるタグと、[article:]、[music:]、[video:]、[book:]のタグを含みます。一般的なOpen Graphタグに関する詳細は、Open Graph protocolのWebサイトを参照してください。

それぞれのタグに対してストアするフィールド名は、[og:](article:やその他の最初のprefix)に続く部分を使用します。例えば、お客様のWebページが下記のようなHTMLを使用しているとすると:

<meta property="og:title" content="sample-title"/>
<meta property="og:url" content="http://xyz.com/sample-url"/>
<meta property="article:author" content="http://xyz.com/sample-author"/>

このアイテムがリコメンデーションとして返された場合、このアイテムに対するJSONオブジェクトは、titleのフィールドの値がsample-titleになります。

{
  "url": "http://xyz.com/sample-url",
  "title": "sample-title",
  "author": "http://xyz.com/sample-author"
  ...
}

📘

Open Graphについて

Open Graph protocolでは、[article:author]のフィールドを使用して著者のprofileのページを指定し、その著者のprofileページのprofileタグに著者のさらに詳細な情報を追加するような使用方法をサポートしています。我々は現時点ではこのようなprofilesタグの機能をサポートしていません。著者に関する追加の情報をリコメンデーションの情報として含めたい場合は、その記事のページに個別に含めるようにしてください。

LiftIgniter JSON オブジェクト

📘

liftigniter-metadata JSONの定義

エレメントのテキストコンテンツはJSONとして解析します。エレメントのテキストコンテンツは、DOMが提供されるまでに、JSONの文字列バージョンを使用するようにしてください。

フィールドにカスタムLiftIgniter JSONオブジェクトを使用するのは、2つの理由があります。

  • 標準のOpen Graphのフレームワークに適合しないフィールドを使用したい場合。
  • フィールド名を変更したい場合、Facebookでは、シェアリング機能を簡易化するために、og:titleの値が使用されています。しかし、我々のリコメンデーションウィジェットでは異なる使用方法を用いています。よくある問題として、[og:title]の値はページタイトルとサイト名を含めているのに、リコメンデーションにはサイト名を見せたくない場合があります。

お客さまのページソースを参照する際には、Open GraphタグよりもLiftIgniter JSONオブジェクトにある値を優先します。

これは、LiftIgniter JSONオブジェクトの例です。

<script id="liftigniter-metadata" type="application/json">
{
    "reviewCount": 158,
    "rating" : 4.2
}
</script>

[script id]は[liftigniter-metadata]、script typeは[application/json]を使用し、フィールドにはJSONのフォーマットを使用してください。各フィールドには文字列、数字、連続する文字列を使用できます。その以外のデータフォーマットはサポートしていません。

これは、JSONオブジェクトのフィールドとOpen Graphのフィールドを併用した場合の例です。

<script id="liftigniter-metadata" type="application/json">
{
    "title" : "5 Cool Ways to Eat an Apple",
    "tags" : ["apple", "cool", "nutrition"]
}
</script>
<meta property="og:title" content="These 5 Cool Ways to Eat An Apple Left Me Salivating. You'd NEVER Think of #3."/>
<meta property="og:url" content="http://viral-website.com/eating-apples/">
<meta property="og:description" content="Boy, was I wrong to think I knew how to eat an apple!"/>
<meta property="og:image" content="http://cdn.viral-website.com/winking-apple.jpg"/>

配列について

Open Graphで配列を指定する際は、それぞれのフィールドを個別に指定してください。例えば、articleで、women、feminism、politicsのタグを使っていた場合、Open Graphに適合したタグの使用方法は下記のとおりになります:

<meta property="article:tag" content="women"/>
<meta property="article:tag" content="feminism"/>
<meta property="article:tag" content="politics"/>

Open Graph protocolはページを解析して、women、feminism、politicsの3つのタグを認識して配列を作成します。LiftIgniterでも同じように動作します。

ただし、LiftIgniter JSONオブジェクトの中で指定する値(文字列または文字列配列)は、その他で指定される値よりも優先されます。例えば下記のとおりに値を指定した場合:

<script id="liftigniter-metadata" type="application/json">
{
  ...
  "tag" : ["men", "women"],
  ...
}
</script>
<meta property="article:tag" content="women"/>
<meta property="article:tag" content="feminism"/>
<meta property="article:tag" content="politics"/>

JSONタグの値が優先され、["men", "women"]の配列がストアされます。

単純にカンマで区切られた文字列の値ではなく、正しいフォーマットの文字列配列を使用することが重要です。

"tag" : "men,women" // これは"men,women"という、2つのタグではなくひとつのタグとして認識されます。
"tag" : ["men", "women"] // これは、本来の意図と同じように、2つのタグの配列として認識されます。

LiftIgniter JSONオブジェクトにおいて空(値のない)の配列を指定すると、Open Graphタグで指定された配列を上書きします。

タイムスタンプのフィールド

どのフィールドにおいても、タイムスタンプのフォーマットの値を渡すことができます。ただし、いくつかのフィールドにおいてのみ、タイムスタンプ特有のルールを適用することができます。他のフィールドにおいては、タイムスタンプを文字列として扱います。

すべてのタイムスタンプは、Open Graph ProtocolのWebサイトに説明されているISO 8601のフォーマットで渡してください。

timezoneを含むフィールド名を使用することが必要です。

ここに、正常に解析されるフォーマットの例を示します。

フォーマット

yyyy-MM-dd'T'HH:mm:ssZ

2017-01-21T09:56:36-08:00

yyyy-MM-dd HH:mm:ssZ

2017-01-21 09:56:36-08:00

yyyy-MM-dd'T'HH:mm:ss.SSSZ

2017-01-21T09:56:36.321-08:00

フィールド

  • `[published_time]Open Graphのフレームワークでは、プロパティ名は[article:published_time]です。[article:]のプレフィクスを削除して[published_time]としてフィールドをストアします。カスタムLiftIgniter JSONオブジェクトで渡す場合は、[published_time]を使用してください。
  • `[modified_time]: Open Graphのフレームワークでは、プロパティ名は[article:modified_time]です。[article:]のプレフィクスを削除して[modified_time]としてフィールドをストアします。カスタムLiftIgniter JSONオブジェクトで渡す場合は、[modified_time]を使用してください。
  • `[expiration_time]:: Open Graphのフレームワークでは、プロパティ名は[article:expiration_time]です。[article:]のプレフィクスを削除して[expiration_time]としてフィールドをストアします。カスタムLiftIgniter JSONオブジェクトで渡す場合は、[expiration_time]を使用してください。

最後に記事がスクレープされた際に認識されたexpiration_timeを過ぎると、その記事の表示を自動的に停止します。

Note on devices (desktop versus mobile)

Keep in mind that we are collecting inventory from both your desktop and mobile site, so if the same URL has different inventory metadata on desktop and mobile, then we might at any given point in time have metadata for either the desktop or the mobile site. Therefore, you should make sure either than your inventory metadata for the same url is consistent across desktop and mobile, or disable inventory collection on the device where the metadata is inaccurate. For instance, of mobile inventory metadata is inaccurate or incomplete, you can disable inventory collection specifically on mobile by setting inventory.collect = false as described in our $p("init") documentation.