Преобразование @filename в curl в скрипт google apps

#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 Благодарим вас за ответ и добавление дополнительной информации. Я рад, что ваш вопрос был решен. И тебе тоже спасибо.