2015-01-13 4 views
0

Я пытаюсь скрыть ключ API в запросе YQL. Для этого я пробовал следующее this post (также объяснено тем же автором here). Когда я пытаюсь выполнить запрос, используя шаблон 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. Run 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 дает такое же предупреждение. Почему мои шаблонные переменные не вытягиваются из того, что я установил в качестве переменных среды?

ответ

1

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

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

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

+0

Спасибо за ответ! Теперь ваше решение должно будет работать, я попытаюсь провести дополнительное расследование, почему SET не сотрудничает. – JohnB

Смежные вопросы