我正在尝试在此
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
,那么这可以成功工作。非常感谢任何解决此问题的建议或指导。
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 列中生成 追踪号码。