防止YQL对URL进行编码

时间:2010-11-01 07:58:37

标签: urlencode yql url-encoding

我想知道是否可以阻止YQL对数据表的密钥进行URL编码?

示例:
当前的监护人API使用ID如下:

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

这些ID的问题在于它们包含斜杠(/),并且这些字符不应该在API调用中进行URL编码,而是保持不变。

所以如果我现在有这个查询

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 个答案:

答案 0 :(得分:1)

YQL中的URI模板扩展(例如{item_id})仅遵循version 3规范。使用版本4,可以简单地(仅稍微)更改扩展以执行您想要的操作,但目前还没有使用YQL。

所以,一个解决方案。您可以使用非常非常基本的 <execute>块:一个根据需要将item_id值添加到路径中。

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

最后,请参阅diff against your table(进行一些其他的小调整以允许上述工作)。