共通のおすすめを送信する
アプリを起動すると、Fire App Builderはメディアフィードから共通のおすすめのリストを読み取り、Fire TVのホーム画面の [ダウンロード済みアプリからのおすすめ] 行に送信します。この記事では、共有のおすすめを設定する手順について詳しく説明します。
簡単にまとめると、フィードにglobalRecommendations
要素を追加します。次に、新しいレシピでこのglobalRecommendations
要素をターゲットにします。そのレシピとデータローダーを参照するセクションをNavigator.jsonファイルに追加します。
おすすめに関する全般的な情報については、おすすめ機能の概要を参照してください。
共通のおすすめの構成
-
フィード内に、そのフィード全体に対する1つの
globalRecommendations
プロパティを追加して、コンテンツID文字列の配列を指定します。コンテンツID文字列の配列は、おすすめのメディアに関連している必要があります。たとえば、フィードがJSON形式の場合、
globalRecommendations
プロパティは次のようになります。{ "items": [ { "id": "162270", "title": "Thai Recipes - Thai Chicken Noodles Recipe", "description": "Thai Recipes - Thai Chicken Noodles Recipe", "duration": "355", "thumbURL": "http:\/\/l2.cdn01.net\/\_thumbs\/0000162\/0162270\/0162270__015f" type="jpg", "imgURL": "http:\/\/l2.cdn01.net\/\_thumbs\/0000162\/0162270\/0162270__015f" type="jpg", "videoURL": "http:\/\/media.cdn01.net\/802E1F\/process\/encoded\/video_1880k\/0000162\/0162270\/D8HFLX0AC.mp4?source=firetv&channel_id=6341", "categories": [ "International Cuisine" ], "channel_id": "6341", "recommendations": [ "162269", "162266", "162265", "162264" ] }, ... ], "globalRecommendations": [ "99605", "99551", "99570", "99580", "112683" ] }
フィードがXML形式の場合は、次のようになります。
... <item> <title>サンプルタイトル</title> <pubDate>Wed, 26 Oct 2016 20:34:22 PDT</pubDate> <link>https://example.com/myshow/episodes/110</link> <author>サンプル作者名</author> <category>テクノロジー</category> <category>ガジェット</category> <recommendations> <guid>162269</guid> <guid>162266</guid> <guid>162265</guid> <guid>162264</guid> </recommendations> </item> <globalrecommendations> <guid>99605</guid> <guid>99551</guid> <guid>99570</guid> <guid>99580</guid> <guid>112683</guid> </globalrecommendations> ...
注: 共通のrecommendationsオブジェクトを特定のアイテムの詳細に含めることはできません。共通のおすすめは、フィード全体に対して1セットのみ作成します。各アイテムには、その特定のコンテンツが視聴されたときに送信される、関連のおすすめを含めることができます。ただし、このトピックのタスクで構成するのは、(特定のビデオが視聴されたときではなく、アプリの起動時に送信される)共通のおすすめです。共通のrecommendationsプロパティは、フィード内の任意の場所に記述でき、
globalRecommendations
以外の名前を使用することもできます。ただし、コンテンツは文字列の配列である必要があります。以降の手順では、この要素を対象にするクエリをレシピに記述します。iTunesの仕様に準拠するMRSSフィードでは、XMLで使用するカスタム名前空間を定義する必要があるため、カスタム要素を追加するには、より多くのコーディングが必要になる可能性があります(XMLにカスタム名前空間を追加する手順については、このドキュメントでは説明しません)。
-
Navigator.jsonで、次のように、
globalRecipes
オブジェクトの後にrecommendationRecipes
オブジェクトを追加します。... "globalRecipes": [ { "categories": { "dataLoader": "recipes/LightCastDataLoaderRecipe1.json", "dynamicParser": "recipes/LightCastCategoriesRecipe.json" }, "contents": { "dataLoader": "recipes/LightCastDataLoaderRecipe1.json", "dynamicParser": "recipes/LightCastContentsRecipe.json" } } ], "recommendationRecipes": [ { "contents": { "dataLoader": "recipes/LightCastDataLoaderRecipe1.json", "dynamicParser": "recipes/LightCastGlobalRecParserRecipe.json" } } ], ...
(コードサンプル内の省略記号(
...
)は、これが抜粋であり、残りのコードが省略されていることを示しています。省略記号はコードにコピーしないでください。)dynamicParser
プロパティで参照されるファイルでは、フィード内の共通のおすすめを特定して処理するレシピを指定します。 recommendationRecipes
オブジェクトで、dataLoader
の値を、globalRecipes
オブジェクト内で使用した同じデータローダーファイルへの参照に置き換えます。たとえば、recipes/AcmeDataLoaderRecipe1.json
のように指定します(詳細については、メディアフィードを読み込むを参照してください)。recommendationRecipes
オブジェクトで、dynamicParser
の値を、カスタム名を持つ新しいレシピファイルへの参照に置き換えます。たとえば、recipes/AcmeGlobalRecParserRecipe.json
のように指定します。その後、このファイルをアプリのassets > recipesフォルダに作成します。-
(任意)アプリから送信する共通のおすすめの数を制限するには、次のように、Navigator.jsonで
numberOfGlobalRecommendations
プロパティ(config
内)を使用して制限を指定します。"config": { "showRelatedContent": true, "useCategoryAsDefaultRelatedContent": true, "searchAlgo": "basic", "numberOfGlobalRecommendations": 3, "numberOfRelatedRecommendations": 3 }
この数が、アプリから送信できる共通のおすすめの合計数の上限になります。おすすめがこの数に達すると、更新のタイミング(6時間ごと、またはアプリが再起動されたとき)まで、アプリはそれ以上の共通のおすすめを送信しなくなります。
Fire TVに [ダウンロード済みアプリからのおすすめ] 行が表示されるには、すべてのアプリを合わせて5件以上のおすすめが送信される必要があります。ここで共通のおすすめの数を指定しなかった場合は、デフォルトで5が使用されます。
-
手順4で作成した共通のおすすめの解析レシピ(AcmeGlobalRecParserRecipe.jsonなど)を開き、次のレシピを挿入します。
{ "cooker": "DynamicParser", "format": "json", "model": "java.lang.String", "modelType": "array", "query": "$.globalRecommendations[*]", "matchList": [ "StringKey@ModelValue" ] }
このレシピについて、以下に少し詳しく説明します。
- このレシピで想定されている
format
はjson
です(フィードがXML形式の場合は、format
の値をjson
からxml
に変更します)。 - このレシピで想定されている
model
はString
です。 modelType
がarray
に設定されているため、Fire App Builderは、このレシピから文字列配列が返されることを想定します。query
から文字列のリストが返されると、matchList
パラメーターにより、StringKey
を使用して文字列が直接マッチングされます。Fire App Builderは、これらの文字列をモデルにマッピングします。
(これらの設定は、共通のおすすめのクエリがJSON形式の文字列配列に一致する限り重要ではありません。一致しない場合は、レシピの設定を適宜調整できます。詳細については、レシピ構成の概要を参照してください。)
- このレシピで想定されている
-
query
の値をカスタマイズして、フィード内のrecommendationsプロパティをターゲットにします。JSONを使用している場合は、クエリにJayway JsonPath(英語のみ)の構文を使用します。フィードがXMLの場合は、XPath式(英語のみ)を使用します。
これらのクエリを作成する方法については、カテゴリーレシピをセットアップするのqueryパラメーターのセクションを参照してください。
上に示したサンプルの
query
の場合、$.globalRecommendations[*]
というクエリは、ルートディレクトリからglobalRecommendations
配列を検索し、配列内のすべての要素を選択します(前述のXMLフィードを使用した場合のクエリは、//globalrecommendations/guid/text()
のようになります)。 すべての階層から再帰的にglobalRecommendations
オブジェクトを検索するクエリが必要な場合は、$..globalRecommendations[*]
を使用します。 -
クエリで
globalRecommendations
要素が正しくターゲットになっていることを確認するには、オンラインのエバリュエーターでクエリをテストします。- JSONフィードの場合は、Jayway JsonPath Evaluator(英語のみ)を使用してクエリをテストします。
- XMLフィードの場合は、XPath Evaluator(英語のみ)を使用してクエリをテストします。
クエリの結果がコンテンツID文字列のリストになっている必要があります。Fire App Builderは、これらのコンテンツIDを使用しておすすめを作成します。
アイテムにAmazonエクストラ(年齢レーティングなど)が含まれている場合は、それらのエクストラがおすすめと共に送信されます。
共通のおすすめは、アプリの起動時に1回送信されるほか、アプリを開いているときにフィードが更新されたタイミングでも送信されます。フィードの更新間隔は、DataLoadManagerConfig.jsonファイル(アプリのassets > configurationsフォルダ内)にある値に関連付けられています。このファイル内でのプロパティは
"data_updater.duration": 14400
(4時間)です。また、12時間ごとにデバイスのスリープを解除し、おすすめを更新するアラームも設定されています。
共通のおすすめのテスト
おすすめをテストする一般的な手順については、Fire TVのドキュメントの おすすめ機能をテストする方法を参照してください。
Fire TVの [ダウンロード済みアプリからのおすすめ] 行は、Fire App Builderアプリでは制御できません。ただし、Android Studioのログを確認すれば、アプリがおすすめを作成して送信していることがわかります。
アプリを起動した後、Android Studioで画面の下部にある [Android Monitor] をクリックし、「recommendation」という単語でフィルターを適用します。共通のおすすめが作成され、送信されていることをログで確認できます。以下に例を示します。
03-24 18:39:09.365 18717-18757/com.amazon.android.calypso D/RecommendationTable: record updated in database: RecommendationRecord{mContentId='99570', mRecommendationId=4, mType='Global'}
03-24 18:39:09.368 18717-18757/com.amazon.android.calypso D/RecommendationSender: Built recommendation - Consuming Passions Chips Recipe | Belgian Style
mType='Global'
は、送信されたおすすめが共通のおすすめであることを示します。
テストでは、Navigator.jsonファイルで設定した上限を超えておすすめが送信されることはありません。たとえば、Navigator.jsonで次のように指定されているとします。
"numberOfGlobalRecommendations": 3
この場合、globalRecommendations
のリストに5つのコンテンツIDが含まれていたとしても、送信されるおすすめは3つだけです。
古いおすすめの削除
ユーザーが [ダウンロード済みアプリからのおすすめ] 行のビデオをクリックして最後まで(一部ではなく)視聴すると、Fire App Builderはそのビデオを視聴済みとしてマークし、対応するアイテムをおすすめから削除します。この履歴はFire App Builderのデータベースに保存されます。
ただし、6時間が経過してFire App Builderが更新されると、ユーザーがそのコンテンツを視聴済みの場合でも、同じ共通のおすすめが再度送信されます。より高度なロジックを実装するには、共通のおすすめをフィードで管理し、定期的に調整する必要があります。
次のステップ
次のトピックの関連のおすすめを送信するに進みましょう。関連のおすすめでは、ユーザーが視聴したメディアごとに固有のおすすめを送信します。