Предотвращение YQL от URL, кодирующего ключ - PullRequest
0 голосов
/ 01 ноября 2010

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

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

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

1 Ответ

1 голос
/ 01 ноября 2010

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

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

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

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

...