Почему отсутствуют переменные моего шаблона?
Я пытаюсь скрыть ключ API в запросе YQL. Чтобы сделать это, я попытался следовать этому посту (также объясненный тем же автором здесь). Когда я пытаюсь выполнить запрос, используя шаблон URI, я получаю следующее предупреждение:
"warning": "Missing template variables (BungieAPIKey)"
Вот шаги, которые я предпринял:
- Сохраните ключ API в
yql.storage.admin
запустивinsert into yql.storage.admin (value) values ("set BungieAPIKey='YOUR_KEY' on uritemplate;")
- Загрузите среду в консоль, используя возвращенный ключ выполнения (
https://developer.yahoo.com/yql/console/?env=store://XXXXXXXXXX
) - Бежать
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.