#curl #google-apps-script
Вопрос:
Запрос на завиток в документации:
curl -X POST -d "xls_url=https://kc.kobotoolbox.org/ukanga/forms/tutorial/form.xls" https://kc.kobotoolbox.org/api/v1/forms
Мой скрипт приложений
function patchForm() {
//Other details saved in scriptProperties
var payload = "https://docs.google.com/spreadsheets/d/e/.../pub?
output=xlsx";
//Published spreadsheet, I think this is essentially an xlsx file stored in a url?
var scriptProperties = PropertiesService.getScriptProperties();
var url = "https://kc.kobotoolbox.org/api/v1/forms/...";
var params = {
"method" : scriptProperties.getProperties()["method"],
"headers": {"Authorization" : scriptProperties.getProperties()["Authorization"]},
"xls_url": payload
};
Logger.log(params)
UrlFetchApp.fetch(url, headers = params)
return(UrlFetchApp.fetch(url, headers = params));
}
Как мне преобразовать:
"xls_url=https://kc.kobotoolbox.org/ukanga/forms/tutorial/form.xls"
В документации по api внутри urlfetchapp.
Спасибо, на самом деле я не программист.
Если я не могу заставить urlfetchapp работать, есть ли способ отправить запрос curl через скрипт Google?
Ответ №1:
Я считаю, что ваша цель заключается в следующем.
- Вы хотите преобразовать следующую команду curl в скрипт Google Apps.
curl -X POST -d "xls_url=https://kc.kobotoolbox.org/ukanga/forms/tutorial/form.xls" https://kc.kobotoolbox.org/api/v1/forms
Точки изменения:
- Свойство of
xls_url
не существует вparams
офrlFetchApp.fetch(url, params)
. - Когда я увидел ваш пример команды curl, значение
xls_url=https://kc.kobotoolbox.org/ukanga/forms/tutorial/form.xls
отправляется в виде данных формы. - В этом случае метод является методом POST.
- Когда я увидел ваш сценарий и пример команды curl, URL-адрес и значение отличались.
Когда вышеуказанные пункты будут отражены в скрипте Google Apps, это будет выглядеть следующим образом.
Измененный сценарий:
function patchForm() {
var url = "https://kc.kobotoolbox.org/api/v1/forms";
var params = {
method: "POST", // In this case, even when this line is removed, the POST method is used.
payload: {xls_url: "https://kc.kobotoolbox.org/ukanga/forms/tutorial/form.xls"}
};
var res = UrlFetchApp.fetch(url, params);
Logger.log(res.getContentText())
}
Примечание:
- Если вы хотите использовать
https://docs.google.com/spreadsheets/d/e/.../pub?output=xlsx
вместоhttps://kc.kobotoolbox.org/ukanga/forms/tutorial/form.xls
, пожалуйста, замените его. - В вашей команде curl заголовок запроса не используется. Но в вашем сценарии
"Authorization" : scriptProperties.getProperties()["Authorization"]
используется. Если это необходимо для использования, пожалуйста, включите его в приведенный выше сценарий следующим образом. В этом случае предполагается, что ваше значениеscriptProperties.getProperties()["Authorization"]
является допустимым значением. Пожалуйста, будьте осторожны с этим.var scriptProperties = PropertiesService.getScriptProperties(); var params = { method: "POST", // In this case, even when this line is removed, the POST method is used. payload: {xls_url: "https://kc.kobotoolbox.org/ukanga/forms/tutorial/form.xls"}, headers: {"Authorization" : scriptProperties.getProperties()["Authorization"]}, };
Ссылка:
Комментарии:
1. Я не смог понять этого, даже следуя вашим рекомендациям. ОДНАКО я смог сделать то, что хотел. Использовал форму google вместо KoBo Toolbox для приема файлов, таким образом, мне не пришлось бы преобразовывать запрос curl в скрипт Google 🙂 Спасибо
2. @mbkm Благодарим вас за ответ и добавление дополнительной информации. Я рад, что ваш вопрос был решен. И тебе тоже спасибо.