Предотвращение YQL от кодирования URL-адреса ключа

Мне интересно, можно ли запретить YQL кодировать URL-адрес ключа для таблицы данных?

Пример.
Текущий API-интерфейс Guardian работает с такими идентификаторами:

item_id = "environment/2010/oct/29/biodiversity-talks-ministers-nagoya-strategy"

Проблема с этими идентификаторами заключается в том, что они содержат косую черту (/), и эти символы не должны быть закодированы в URL-адресе в вызове API, а вместо этого должны оставаться такими, какие они есть.

Итак, если у меня теперь есть этот запрос

SELECT * FROM guardian.content.item WHERE item_id='environment/2010/oct/29/biodiversity-talks-ministers-nagoya-strategy'

при использовании следующего определения url в моей таблице данных

<url>http://content.guardianapis.com/{item_id}</url>

то это приводит к этому вызову API

http://content.guardianapis.com/environment%2F2010%2Foct%2F29%2Fbiodiversity-talks-ministers-nagoya-strategy?format=xml&order-by=newest&show-fields=all

Вместо этого API-интерфейс хранителя ожидает, что вызов будет выглядеть следующим образом:

http://content.guardianapis.com/environment/2010/oct/29/biodiversity-talks-ministers-nagoya-strategy?format=xml&order-by=newest&show-fields=all

Так что проблема в том, что символы / кодируются как %2F, чего я не хочу в данном случае.

Любые идеи о том, как этого можно достичь?

Вы также можете проверить полную таблицу данных, которую я использую:

http://github.com/spier/yql-tables/blob/master/guardian/guardian.content.item.xml


person spier    schedule 01.11.2010    source источник


Ответы (1)


Расширения шаблона URI в YQL (например, {item_id}) соответствуют только версии 3 спец. В версии 4 можно было бы просто (лишь немного) изменить расширение, чтобы оно делало то, что вы хотите, но, увы, в настоящее время это невозможно с YQL.

Итак, решение. Вы можете ввести в игру очень-очень простой блок <execute>: тот, который добавляет значение item_id к пути по мере необходимости.

<execute><![CDATA[
    response.object = request.path(item_id).get().response;
]]></execute>

Наконец, посмотрите разницу с вашей таблицей (с несколькими другими незначительными изменениями, позволяющими вышеописанному работать) .

person salathe    schedule 01.11.2010
comment
Отлично, работает идеально. +1 и принять. Я обновил таблицу данных YQL соответственно. Если кому-то это нужно: github.com/spier/yql-tables/tree/ master/guardian Также результаты можно увидеть прямо в консоли YQL: y.ahoo.it/YWeXQA3h - person spier; 03.11.2010