2014-12-31 7 views
0

Пробуя API-интерфейс Content Service, а пример возвращает HTML, когда он должен возвращать JSON, что я делаю неправильно?Служба контента для Google Apps Script, возвращающая HTML вместо JSON

https://developers.google.com/apps-script/guides/content

function doGet(request) { 
    var events = CalendarApp.getEvents(
    new Date(Number(request.parameters.start) * 1000), 
    new Date(Number(request.parameters.end) * 1000)); 
    var result = { 
    available: events.length == 0 
    }; 
    return ContentService.createTextOutput(JSON.stringify(result)) 
    .setMimeType(ContentService.MimeType.JSON); 
} 

GAS из другого файла пытается сделать запрос:

function myFunction() { 
    var url = "published URL"; 
    url+="?start=1325437200&end=1325439000"; 

    var options = { 
    method:"get" 
    } 
    var response = UrlFetchApp.fetch(url,options).getContentText(); 
    response = JSON.parse(response); //error, unexpected token < 
} 
+0

Вы уверены, что неожиданный токен не является веб-страницей, сообщающей о некорректной ошибке, например, отказами. Можете ли вы включить журнал 'response'? – Jonathon

ответ

4

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

https://script.google.com/macros/s/AKfycbzx2L643LHw0oQAq1jBmKQh2ju_znGfmdj78dUypj36iF-s91w/exec

Проблема вы работаете в связан с авторизации или аутентификации, если опубликованный сценарий не авторизован, сообщение об ошибке HTML возвращается.

Чтобы проверить, является ли это вашей проблемой, просто просмотрите опубликованный URL прямо в браузере. Если вы видите JSON, то авторизация не является проблемой. Если вы видите сообщение об ошибке «Авторизация требуется для выполнения этого действия», откройте опубликованный сценарий и выберите «doGet» в меню «Выполнить», затем следуйте инструкциям авторизации.

Скорее всего, проблема связана с тем, как опубликован ваш сценарий. Чтобы получить доступ к опубликованному скрипту из другого сценария, он должен быть опубликован с помощью «Кто имеет доступ к приложению», как «Любой, даже анонимный». Если вы используете любое другое значение, Google возвращает страницу входа в систему HTML вместо вашего ответа JSON, и вы получите сообщение об ошибке, которое вы видите.

Это происходит потому, что запросы, отправленные из скрипта Google Apps через URLFetchApp, не аутентифицированы, они не несут учетные данные пользователя, выполняющего код с ними, и поступают как анонимные запросы.

Если вы не разрешаете «никому, даже анонимному» в настройках публикации, Google перенаправляет неидентифицированные запросы на страницу входа в систему Google.

+0

Моя проблема не в настройке приложения: «Любой, даже анонимный». Спасибо :-) – Jacob

+0

@cameron, возможно ли добавить попытку/улов к аналогичному сценарию приложения Google (возвращающему текстовый вывод Json, такой как OP), и, кроме того, иметь обычный успешный вывод, имеющий ошибку один (что вызывающая функция могла бы работать в функции .onerror)? Большое спасибо! –