为什么我的 YQL 查询中据称缺少我的模板变量?

Why are my template variables allegedly missing from my YQL query?

我试图在 YQL 查询中隐藏 API 键。为此,我尝试遵循 this post (also explained by the same author here)。当我尝试 运行 使用 URI 模板的查询时,我收到以下警告:

"warning": "Missing template variables (BungieAPIKey)"

以下是我采取的步骤:

  1. 通过 运行ning insert into yql.storage.admin (value) values ("set BungieAPIKey='YOUR_KEY' on uritemplate;")
  2. yql.storage.admin 中保存 API 密钥
  3. 使用返回的执行密钥将环境加载到控制台中 (https://developer.yahoo.com/yql/console/?env=store://XXXXXXXXXX)
  4. 运行 select * from json where url in (select url from uritemplate where template='http://bungie.net/videos/{BungieAPIKey}/{user}/{page}' and user='foo' and page='bar')

这是返回的JSON:

{
 "query": {
  "count": 0,
  "created": "2015-01-13T16:58:57Z",
  "lang": "en-US",
  "diagnostics": {
   "publiclyCallable": "true",
   "warning": "Missing template variables (BungieAPIKey)",
   "redirect": {
    "from": "http://bungie.net/videos//foo/bar",
    "status": "301",
    "content": "http://www.bungie.net/videos/foo/bar"
   },
   "url": {
    "execution-start-time": "0",
    "execution-stop-time": "573",
    "execution-time": "573",
    "http-status-code": "404",
    "http-status-message": "Not Found",
    "content": "http://bungie.net/videos//foo/bar"
   },
   "error": "Invalid JSON document http://bungie.net/videos//foo/bar",
   "user-time": "574",
   "service-time": "573",
   "build-version": "0.2.212"
  },
  "results": null
 }
}

为了缩小问题范围,我在干净的 YQL 控制台(未设置环境)中尝试了以下查询:

set BungieAPIKey='YOUR_KEY' on uritemplate;
select url from uritemplate where template='http://bungie.net/videos/{BungieAPIKey}/'

Running this 给了我同样的警告。 为什么我的模板变量不是从我设置的环境变量中提取的?

由于某种原因,uritemplate 上的 set x='y' 似乎没有被接受。 在没有这个的情况下,您可以选择使用自定义 table 来接受类型化参数,例如 apiKey。然后你可以有以下内容:

 use 'http://location-of-custom-table' as tablename;
 set apiKey='foo' on tablename;
 select * from tablename; 

在上述情况下,apiKey 将传递给自定义 table,您可以将其附加到 javascript 中并创建您的 url.