为什么我的模板变量丢失了?

时间:2015-01-13 17:02:08

标签: environment-variables yql api-key uritemplate

我正在尝试在YQL查询中隐藏API密钥。为此,我尝试了this post(也由同一作者here解释)。当我尝试使用URI模板运行查询时,我收到以下警告:

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

以下是我采取的步骤:

  1. 通过运行yql.storage.admin
  2. 将API密钥保存在insert into yql.storage.admin (value) values ("set BungieAPIKey='YOUR_KEY' on uritemplate;")
  3. 使用返回的执行密钥(https://developer.yahoo.com/yql/console/?env=store://XXXXXXXXXX
  4. 将环境加载到控制台中
  5. 运行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')
  6. 这是返回的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控制台中尝试了以下查询(没有env集):

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

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

1 个答案:

答案 0 :(得分:1)

看起来uritemplate上的set x ='y'由于某种原因没有被尊重。 如果没有这个,您可以选择使用自定义表来接受类型参数apiKey。然后,您可以拥有以下内容:

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

在上面的例子中,apiKey会被传递到自定义表格中,您可以将其附加到javascript中并创建您的网址。