Почему отсутствуют переменные моего шаблона?

Я пытаюсь скрыть ключ API в запросе YQL. Чтобы сделать это, я попытался следовать этому посту (также объясненный тем же автором здесь). Когда я пытаюсь выполнить запрос, используя шаблон URI, я получаю следующее предупреждение:

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

Вот шаги, которые я предпринял:

  1. Сохраните ключ API в yql.storage.admin запустив 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 (без env set):

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

Запуск этого дает мне то же самое предупреждение. Почему мои переменные шаблона не извлекаются из того, что я установил в качестве переменных среды?

1 ответ

Решение

Похоже, что set x='y' на uritemplate почему-то не соблюдается. В отсутствие этого у вас есть возможность иметь собственную таблицу, которая принимает типизированный параметр, скажем, apiKey. Вы могли бы тогда иметь следующее:

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

В приведенном выше случае apiKey будет передан в пользовательскую таблицу, и вы можете добавить его в javascript и создать свой URL.

Другие вопросы по тегам