3

KynetxアプリケーションでYahooローカル検索を使用しようとしています。

ruleset avogadro {
  meta {
    name "yahoo-local-ruleset"
    description "use results from Yahoo local search"
    author "randall bohn"
    key yahoo_local "get-your-own-key"
  }
  dispatch { domain "example.com"}
  global {
    datasource local:XML <- "http://local.yahooapis.com/LocalSearchService/V3/localsearch";
  }

  rule add_list {
    select when pageview ".*" setting ()
    pre {
      ds = datasource:local("?appid=#{keys:yahoo_local()}&query=pizza&zip=#{zip}&results=5");
      rs = ds.pick("$..Result");
    }
    append("body","<ul id='my_list'></ul>");
    always {
      set ent:pizza rs;
    }
  }

  rule add_results {
    select when pageview ".*" setting ()
    foreach ent:pizza setting pizza
    pre {
      title = pizza.pick("$..Title");
    }
    append("#my_list", "<li>#{title}</li>");
  }
}

私が最終的に得たリストは

. [object Object]

そして「タイトル」は

{'$t' => 'Pizza Shop 1'}

タイトルだけを取得する方法がわかりません。元のXMLファイルの「テキストコンテンツ」が{「$t」=>「テキストコンテンツ」}に変わり、「$ t」がpick()に問題を引き起こすように見えます。

4

2 に答える 2

4

XMLデータソースとデータセットがJSONに変換されると、XMLノード内のテキスト値が$tに割り当てられます。preブロックのpickステートメントを次のように変更することで、タイトルのテキストを選択できます。

title = pizza.pick("$..Title.$t");

それを試して、それが問題を解決するかどうかを確認してください。


考慮すべきあなたの質問に関係のないことに関するサイドノート:

1)ルールセット全体、どのような問題が発生し、何を期待していたかを共有していただき、ありがとうございます。質問への回答がはるかに簡単になりました。

2)ルールセット識別子は、AppBuilderまたはコマンドラインgemが生成するものから変更しないでください。現在の識別子

ruleset avogadro {

もっと似ているはずです

ルールセットa60x304{

3)あなたは必要ありません

setting ()

正規表現にキャプチャグループがない限り、selectステートメントで

于 2010-12-26T05:26:19.503 に答える
3

pick( "$ ..Title。$t")が機能することがわかりました。面白そうに見えますが、機能します。私が推測するピエロの帽子よりも面白くない。

name = pizza.pick("$..Title.$t");
city = pizza.pick("$..City.$t");
phone = pizza.pick("$..Phone.$t");
list_item = "<li>#{name}/#{city} #{phone}</li>"

今ピザがあったらいいのに!

于 2010-12-26T05:25:45.433 に答える