#javascript #api #post #google-apps-script #qualtrics
#javascript #API #Публикация #google-apps-script #qualtrics
Вопрос:
Моя цель — экспортировать ответы из опроса, который я сделал на Qualtrics, используя Google Apps Script. Я пытаюсь заставить свой код работать с POST API, и я получил код для пинга, но что бы это ни было, он возвращается с ошибкой «HttpStatus: 400-Неверный запрос».
Я новичок как в Google Apps Script, так и в использовании API, но понимаю суть этого. Я использовал Postman для получения кода JavaScript Jquery ajax и заставил его работать с GAS. Что меня смущает, так это то, что когда я использую тот же код с GET API и вручную набираю идентификаторы (предоставленные мне с помощью POSTMAN), он отлично пингуется. При запуске его через Postman он показывает, что все проходит, поэтому не уверен, что я делаю не так с вызовом POST.
var option = {
async: true,
crossDomain: true,
//url:"https://ousurvey.ca1.qualtrics.com/API/v3/surveys/SV_8dK8AKUFyAH8qyN//export-responses/",
method: "POST",
"headers": {
"X-API-TOKEN": "**************************",
"Content-Type": "application/json",
"cache-control": "no-cache",
"Postman-Token": "7a148b75-fa03-4f45-9782-08791c2f1c35"
},
processData: false,
data : '{"format": "csv}',
muteHttpExceptions: true //muted to check Logger
};
var qUrl='https://ousurvey.ca1.qualtrics.com/API/v3/surveys/SV_8dK8AKUFyAH8qyN/export-responses/'
var getSurvey = UrlFetchApp.fetch(qUrl, option);
Мне нужно заставить POST работать, чтобы получить JSON для получения идентификатора опроса, чтобы я мог использовать этот идентификатор с GET API для загрузки информации на Google диск и преобразования информации в GoogleDocs.
Вот текущая ошибка из журнала:
{"meta":{"httpStatus":"400 - Bad Request","error":{"errorMessage":"Error decoding json body:
com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-inputn at
[Source: akka.util.ByteIterator$ByteArrayIterator$$anon$1@71f9c2bb; line: 1, column: 0]"}}}
После изменения «Content-Type» на «ContentType» я получаю эту ошибку:
""meta":{"requestId":"62b3a313-b1ba-4939-83b7-ee73e65b4e3e","httpStatus":"400
- Bad Request","error":{"errorCode":"QVAL_1","errorMessage":"Json type request body is expected.""
Комментарии:
1. Ваши данные, вероятно, должны быть просто объектом, т. Е.
{ "format" : "csv" }
, а не строкой.2. Не повезло, я пытался это сделать и все еще выдает неверный запрос
3. У вас есть сообщение об ошибке / код? Что-то вроде «Ожидал _ но получил _»?
4. Я обновил сообщение об ошибке, которое я получаю, вместе с изменением формата данных.
5. Можете ли вы предоставить документ API? И я подумал, что эта информация может быть полезна для вас. developers.google.com/apps-script/reference/url-fetch/… Но если это было бесполезно, я прошу прощения.
Ответ №1:
- Вы хотите использовать «Создать экспорт ответа» API.
Из вашего вопроса и ответного комментария я мог понять, как указано выше. Когда я увидел предоставленный вами документ, я нашел образец команды curl следующим образом.
curl -X POST
-H 'X-API-TOKEN: yourapitokenhere'
-H 'Content-Type: application/json'
-d '{"format": "csv"}'
'https://yourdatacenterid.qualtrics.com/API/v3/surveys/SV_012345678912345/export-responses'
Я преобразовал этот пример в скрипт Google Apps Script. Пример сценария выглядит следующим образом.
Пример сценария:
var qUrl = "https://ousurvey.ca1.qualtrics.com/API/v3/surveys/SV_8dK8AKUFyAH8qyN/export-responses/";
var option = {
method: "post",
headers: {"X-API-TOKEN": "###"},
contentType: "application/json",
payload: JSON.stringify({"format": "csv"}),
muteHttpExceptions: true,
};
var getSurvey = UrlFetchApp.fetch(qUrl, option);
Logger.log(getSurvey)
Примечание:
- Приведенный выше пример сценария — это тот же запрос с примером команды curl. Но если при запуске скрипта возникает ошибка, пожалуйста, подтвердите значение
X-API-TOKEN
, URL и другие параметры, которые необходимы в вашей ситуации.
Ссылки:
Комментарии:
1. Вы — благословение. Спасибо.
2. @nguyenJEN Спасибо за ответ. Я рад, что ваша проблема была решена.