KRL и Yahoo Local Search - PullRequest
       1

KRL и Yahoo Local Search

3 голосов
/ 26 декабря 2010

Я пытаюсь использовать Yahoo Local Search в приложении Kynetx.

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 ().

Ответы [ 2 ]

4 голосов
/ 26 декабря 2010

Когда источники данных XML и наборы данных преобразуются в JSON, текстовое значение в узле XML присваивается $ t. Вы можете выбрать текст заголовка, изменив свой оператор выбора в предварительном блоке на

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

Попробуйте и посмотрите, решит ли это вашу проблему.


Дополнительные примечания к вещам, не связанным с вашим вопросом, для рассмотрения:

1) Спасибо, что поделились всем набором правил, с какой проблемой вы столкнулись и чего ожидали. Сделано ответить на ваш вопрос намного проще.

2) Идентификатор набора правил не должен быть изменен по сравнению с тем, что генерирует для вас AppBuilder или гем командной строки. Ваш идентификатор, который в настоящее время

ruleset avogadro {

должно выглядеть примерно как

набор правил a60x304 {

3) Вам не нужен

setting ()

в операторе выбора, если в регулярном выражении нет группы захвата

3 голосов
/ 26 декабря 2010

Оказывается, что выбор ("$ .. Title. $ T") работает.Это выглядит смешно, но это работает.Думаю, это будет не так смешно, как клоунская шляпа.

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

Жаль, что у меня сейчас нет пиццы!

...