レシピ構成のトラブルシューティング
カテゴリーレシピまたはコンテンツレシピのquery
パラメーターやmatchList
パラメーターの構文が適切かどうかを確認できない場合は、Javaファイルにブレークポイントを設定し、アプリをデバッグモードで実行すると、query
パラメーターによって定義されたコンテンツを特定することができます。このデバッグ方法を使用すると、query
によってフィードから何が選択されているかを正確に把握できるため、matchList
パラメーターを構成しやすくなります。この方法は、属性などの複雑な構文を使用して要素をマッチさせようとしている場合はもちろん、query
パラメーターから何が返されるかをよく理解するためにも役立ちます。ここで説明する方法を使用すると、Fire App Builderのレシピで構成したクエリによって何が返されるかを正確に確認できます。
使用しているフィードの形式に対応するタブを選択してください。
JSONフィードのカテゴリーレシピとコンテンツレシピから返される内容を確認するには、次の手順を実行します。
- [Android] ビューで、Gradle Scriptsを展開し、build.gradle (Module: app)をダブルクリックします。
-
debug
オブジェクトを見つけて、次のようにtestCovergeEnabled
をfalse
に変更します。debug { testCoverageEnabled false }
- Shiftキーを2回押して [Search Everywhere] ダイアログボックスを開き、「JsonParser.java」と入力してこのファイルを検索します。
-
144行目の「
return result;
」という行で、左側のガター(「144」という行番号のすぐ右側にある空白の領域)を1回クリックして、ブレークポイントを設定します。赤い点が表示され、その位置にブレークポイントが設定されたことを示します。アプリをデバッグモードで実行すると、そのブレークポイントでコードが停止し、カテゴリーレシピとコンテンツレシピの内容が表示されます。
-
[Debug 'app'] ボタンをクリックします。デバッガーで、Gradleによるアプリのビルドが実行されます。
-
ビルドが完了したら、Android Studioのウィンドウのフッターにある [Debug] タブをクリックし、上のペインで [Debugger] タブをクリックして、詳細を表示します。
アプリが実行された後、[Variables] で、変数に設定された値を確認します(後の手順のスクリーンショットを参照)。変数がまったく設定されない場合は、レシピで
format
プロパティの値がjson
になっていることを確認してください。そうなっていない場合、JsonParser.javaは使用されません。 -
カテゴリーレシピでターゲットになったカテゴリーを確認するには、result変数を展開します。返されたカテゴリーがすべて表示されます。
上のスクリーンショットで、
query
変数は(カテゴリーレシピで)実行中のクエリを示します。この場合は$..categories[*]
です。結果では、
result
のアイテムはフィード内のカテゴリーになり、Costa Rica Islands
やCosta Rica Underwater
などが含まれます。 - コンテンツレシピでターゲットになったコンテンツを確認するには、[Resume Program] ボタンをクリックします([Debugger] タブの左側に表示されます)。コードが次のレシピ(コンテンツレシピ)まで反復処理され、結果が表示されます。
-
[Variables] ペインでmapをクリックし、配列のいずれかのアイテム(0など)を展開します。コンテンツレシピでターゲットになったプロパティがすべて表示されます。
query
パラメーターは、(コンテンツレシピで)実行中のクエリを示します。この場合は$[?(@.categories[0] in [Costa Rica Islands])]
です。ただし、実際のレシピでは、カテゴリー名にパラメーター([$par0$$]
)が使用されています。結果では、
itunes:summary
、itunes:episode
、guid
、link
などのフィールドが識別されます。
XMLフィードのカテゴリーレシピとコンテンツレシピから返される内容を確認するには、次の手順を実行します。
- [Android] ビューで、Gradle Scriptsを展開し、build.gradle (Module: app)をダブルクリックします。
-
debug
オブジェクトを見つけて、次のようにtestCovergeEnabled
をfalse
に変更します。debug { testCoverageEnabled false }
- Shiftキーを2回押して [Search Everywhere] ダイアログボックスを開き、「XmlParser.java」と入力してこのファイルを検索します。
-
190行目の「
if (map.size() > 1) {
」という行で、左側のガター(「190」という行番号のすぐ右側にある空白の領域)を1回クリックして、ブレークポイントを設定します。赤い点が表示され、その位置にブレークポイントが設定されたことを示します。アプリをデバッグモードで実行すると、そのブレークポイントでコードが停止し、カテゴリーレシピとコンテンツレシピの内容が表示されます。
-
[Debug 'app'] ボタンをクリックします。
-
Android Studioのウィンドウのフッターにある [Debug] タブをクリックし、上のペインで [Debugger] タブをクリックして、詳細を表示します。デバッガーで、Gradleによるアプリのビルドが実行されます。
アプリが実行された後、[Variables] で、変数に設定された値を確認します(後の手順のスクリーンショットを参照)。変数がまったく設定されない場合は、レシピで
format
プロパティの値がxml
になっていることを確認してください。そうなっていない場合、XmlParser.javaは使用されません。 -
query
パラメーターでターゲットになったカテゴリーを確認するには、map変数を展開し、配列のいずれかのアイテム(0 > Valueなど)を展開します。返されたカテゴリーがすべて表示されます。query
パラメーターは、(カテゴリーレシピで)実行中のクエリを示します。この場合は//item/category/text()
です。結果には、
Technology
、Ham Radio
、Technology
などのカテゴリーが表示されます。 - コンテンツレシピでターゲットになったコンテンツを確認するには、[Resume Program] ボタンをクリックします([Debugger] タブの左側に表示されます)。コードが次のレシピ(コンテンツレシピ)まで反復処理され、結果が表示されます。
-
map > valueの順にクリックし、配列のいずれかのアイテム(0など)を展開します。コンテンツレシピでターゲットになったプロパティがすべて表示されます。
query
パラメーターは、(コンテンツレシピで)実行中のクエリを示します。この場合は//item[./category='Technology']
です。ただし、実際のレシピでは、カテゴリー名にパラメーター([$par0$$]
)が使用されています。結果では、
itunes:summary
、itunes:episode
、guid
、link
などの要素が識別されます。 -
必要に応じてそれぞれの要素を展開して、テキスト、属性、CDATAの各プロパティを識別する構文を確認します。
matchList
パラメーターで何が選択されるかを理解することが重要です。このパラメーターでは、XPathを使用するのではなく、独自のカスタム構文を使用して選択します。特に、テキスト、属性、CDATAセクションの選択方法が異なります。詳細については、matchListパラメーターのトピックで、特に [XML] タブの「テキストをターゲットにする方法」、「属性をターゲットにする方法」、「CDATAをターゲットにする方法」を参照してください。この動作をデバッガーで確認してみましょう。たとえば、フィードから返されたアイテムに次の要素が含まれているとします。
<enclosure url="http://www.podtrac.com/pts/redirect.mp4/cdn.twit.tv/video/hn/hn0362/hn0362_h264m_1280x720_1872.mp4" length="870155893" type="video/mp4"/>
Fire App Builderは各要素を調べ、特別な構文を適用してこれらの値を解析します。以下に例を示します。
enclosure
要素には2つの属性(length
とtype
)があるため、それらに何が選択されているかを確認できます。#text
セレクターは要素のテキストを選択します。enclosure
タグには値がなく、属性しか含まれていないため、#text
セレクターの値は""
(空白)です。#attributes
セレクターは属性を取得します。#attributes/type
は、この属性が返す値を示します(video/mp4
)。#attributes/length
は、その値である692813434
を示します。#attributes/url
は、その値であるhttp://www.podtrac.com/pts/redirect.mp4/cdn...
を示します。matchList
パラメーターを構成すれば、これらの要素と属性を識別する方法を把握しやすくなります。たとえば、matchList
パラメーターでurl
の値をFire app BuilderのmUrl
プロパティ(Fire App Builderのコンテンツモデル)にマッピングするには、次のように記述します。"matchList" : [ ... enclosure/#attributes/url@mUrl ... ]
(上記のコードサンプルは、1つのプロパティマッピングだけを示したものです。省略記号はコンテンツが省略されていることを示します。)
ただし、Fire App BuilderのTWITサンプルフィードでは、
enclosure
の属性(RSS仕様に関連する属性)は使用されていません。代わりに、MRSSプロパティであるmedia:content
のurl
がマッピングされます。フィードでは、この要素は次のようになっています。
<media:content url="http://www.podtrac.com/pts/redirect.mp4/cdn.twit.tv/video/hn/hn0362/hn0362_h264m_1280x720_1872.mp4" fileSize="870155893" type="video/mp4" medium="video">
上のFire App Builderの画面は、この
media:content
要素が選択されているところです。そのサブ要素(media:title
やmedia:category
など)も確認できます。media:content
の属性は#attributes
セレクターで示されます。属性には、type
、medium
、fileSize
、url
があります。したがって、コンテンツレシピのmatchList
パラメーターでurl
をターゲットにするには、次のように記述します。"matchList": [ ... "media:content/#attributes/url@mUrl", ... ] }