レシピ構成のトラブルシューティング
カテゴリーレシピまたはコンテンツレシピの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回クリックして、ブレークポイントを設定します。
JsonParser.javaにブレークポイントを設定 赤い点が表示され、その位置にブレークポイントが設定されたことを示します。アプリをデバッグモードで実行すると、そのブレークポイントでコードが停止し、カテゴリーレシピとコンテンツレシピの内容が表示されます。
-
[Debug 'app'] ボタン
をクリックします。デバッガーで、Gradleによるアプリのビルドが実行されます。 -
ビルドが完了したら、Android Studioのウィンドウのフッターにある [Debug] タブをクリックし、上のペインで [Debugger] タブをクリックして、詳細を表示します。
アプリが実行された後、[Variables] で、変数に設定された値を確認します(後の手順のスクリーンショットを参照)。変数がまったく設定されない場合は、レシピで
formatプロパティの値がjsonになっていることを確認してください。そうなっていない場合、JsonParser.javaは使用されません。 -
カテゴリーレシピでターゲットになったカテゴリーを確認するには、result変数を展開します。返されたカテゴリーがすべて表示されます。

queryパラメーターの結果の表示 上のスクリーンショットで、
query変数は(カテゴリーレシピで)実行中のクエリを示します。この場合は$..categories[*]です。結果では、
resultのアイテムはフィード内のカテゴリーになり、Costa Rica IslandsやCosta Rica Underwaterなどが含まれます。 - コンテンツレシピでターゲットになったコンテンツを確認するには、[Resume Program] ボタン
をクリックします([Debugger] タブの左側に表示されます)。コードが次のレシピ(コンテンツレシピ)まで反復処理され、結果が表示されます。 -
[Variables] ペインでmapをクリックし、配列のいずれかのアイテム(0など)を展開します。コンテンツレシピでターゲットになったプロパティがすべて表示されます。

matchListパラメーターの結果の表示 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回クリックして、ブレークポイントを設定します。
XmlParser.javaにブレークポイントを設定 赤い点が表示され、その位置にブレークポイントが設定されたことを示します。アプリをデバッグモードで実行すると、そのブレークポイントでコードが停止し、カテゴリーレシピとコンテンツレシピの内容が表示されます。
-
[Debug 'app'] ボタン
をクリックします。 -
Android Studioのウィンドウのフッターにある [Debug] タブをクリックし、上のペインで [Debugger] タブをクリックして、詳細を表示します。デバッガーで、Gradleによるアプリのビルドが実行されます。
アプリが実行された後、[Variables] で、変数に設定された値を確認します(後の手順のスクリーンショットを参照)。変数がまったく設定されない場合は、レシピで
formatプロパティの値がxmlになっていることを確認してください。そうなっていない場合、XmlParser.javaは使用されません。 -
queryパラメーターでターゲットになったカテゴリーを確認するには、map変数を展開し、配列のいずれかのアイテム(0 > Valueなど)を展開します。返されたカテゴリーがすべて表示されます。
queryパラメーターの結果の表示 queryパラメーターは、(カテゴリーレシピで)実行中のクエリを示します。この場合は//item/category/text()です。結果には、
Technology、Ham Radio、Technologyなどのカテゴリーが表示されます。 - コンテンツレシピでターゲットになったコンテンツを確認するには、[Resume Program] ボタン
をクリックします([Debugger] タブの左側に表示されます)。コードが次のレシピ(コンテンツレシピ)まで反復処理され、結果が表示されます。 -
map > valueの順にクリックし、配列のいずれかのアイテム(0など)を展開します。コンテンツレシピでターゲットになったプロパティがすべて表示されます。

matchListパラメーターの結果の表示 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は各要素を調べ、特別な構文を適用してこれらの値を解析します。以下に例を示します。

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がマッピングされます。
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", ... ] }

