使用 Google Apps 脚本获取和发布 Http 请求

问题描述 投票:0回答:1

我正在尝试在此

webform
中输入
Email
Zip Code 并将结果返回到工作表中。但是以下代码片段没有提供结果:

function submitForm() {
  var formUrl = "https://www.onnit.com/cart/order-tracking.php";
  var email = "[email protected]";
  var zipcode = "59714";

  // Creating payload data
  var payload = {
    email: email,
    zip: zipcode
  };

  // Setting up options for the POST request
  var options = {
    method: "post",
    payload: payload
  };

  var response = UrlFetchApp.fetch(formUrl, options);
  var resultPageContent = response.getContentText();
  Logger.log(resultPageContent);
}

但是,当我在网页上使用inspect element检查成功请求时,此脚本获取所需的数据:

function fetchOrderTrackingData() {
  var apiUrl = "https://api.onnit.com/orders/7229064/shipments?trackingHash=trtxgT0boZziwMnqfxnAlTf8CqxFqODRhzujdQ0RBl5lHgR52C";

  // Set up options for the GET request
  var options = {
    method: "get",
    headers: {
      "user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.107 Mobile Safari/537.36"
    }
  };

  // Send GET request to the API
  var response = UrlFetchApp.fetch(apiUrl, options);
  var content = response.getContentText();
  Logger.log(content); 
}

我在这个网站上找不到任何文档,所以根据我的理解(我可能是错的),如果我们可以从

inspect element
获得
trackingHash
order,那么这可以成功工作。非常感谢任何解决此问题的建议或指导。

http google-apps-script google-sheets webforms
1个回答
0
投票
function getOrderId(email, zipcode) {
  var formData = {
    'email': email,
    'zipcode': zipcode
  }

  var options = {
    'method' : 'post',
    'payload' : formData
  };

  var response = UrlFetchApp.fetch('https://www.onnit.com/cart/order-tracking.php', options);
  var res = response.getContentText();
  try{
  res = res.split("window.orderTrackingContext = ")[1].split("</script>")[0].replace('};', '}')
  res = JSON.parse(res)

  return {
    'orderId': res['orderId'],
    'trackingHash': res['trackingHash']
  } 
}

catch(error){
  return '';
}
  
}


function getTrackingNumber(orderId, trackingHash){
  try{
  var res = UrlFetchApp.fetch(`https://api.onnit.com/orders/${orderId}/shipments?trackingHash=${trackingHash}`);
  res = JSON.parse(res.getContentText());
  return res['shipments'][0]['tracking_number'];
  }
  catch(error){
    return 'Not Found';
  }
}


function main(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Sheet1");

  var rows = sheet.getLastRow();
  for(var i=2; i<=rows; i++){
    var email = sheet.getRange(i, 1).getValue().toString();
    var zipcode = sheet.getRange(i, 2).getValue().toString();

    if(email == "" || zipcode == "")
      continue;
    
    var orderIds = getOrderId(email, zipcode);
    var tracking_number = getTrackingNumber(orderIds['orderId'], orderIds['trackingHash']);

    sheet.getRange(i, 3).setValue(tracking_number);
  }
}

上面的脚本提取

TrackingHash
表单 JSON 响应,然后使用它来获取 Tracking Number,假设您在 A 列和 B 列中分别有
email
zipcode
。当您运行
main
函数时,它将在 C 列中生成 追踪号码

© www.soinside.com 2019 - 2024. All rights reserved.