0

我试图在 YQL 查询中隐藏 API 密钥。为此,我尝试关注这篇文章(也由同一作者在这里解释)。当我尝试使用 URI 模板运行查询时,我收到以下警告:

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

以下是我采取的步骤:

  1. yql.storage.admin通过运行将 API 密钥保存在其中insert into yql.storage.admin (value) values ("set BungieAPIKey='YOUR_KEY' on uritemplate;")
  2. https://developer.yahoo.com/yql/console/?env=store://XXXXXXXXXX使用返回的执行键 ( )将环境加载到控制台
  3. 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}/'

运行它给了我同样的警告。为什么我的模板变量不是从我设置为环境变量的内容中提取的?

4

1 回答 1

1

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

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

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

于 2015-01-13T19:45:10.973 回答