如何修改商品Feed解析脚本 仅提取有库存商品的URL与分类信息
修改方案
标准商品贸易Feed中会用<g:availability>字段标识库存状态,有库存的商品该字段值通常为in_stock,你只需要在原有解析逻辑中新增库存状态的判断,仅保留符合有库存条件的商品即可。
修改后的完整代码
// 注意如果之前没有全局声明output变量,先添加以下这行 var output = []; // 提前定义好你的Feed地址、表格地址、工作表名常量 const FeedURL = "替换为你的Feed实际地址"; const SPREADSHEET_URL = "替换为你的谷歌表格实际地址"; const SHEET_NAME = "替换为你的目标工作表名称"; function main() { // 每次运行先清空上次的输出结果,避免数据重复 output = []; getURLs(); pushToSheet(); } function getURLs() { var FeedXML = UrlFetchApp.fetch(FeedURL).getContentText(); var items = FeedXML.split('<item>'); var len = items.length; for(var key = 0; key < len; key++){ var url_temp = items[key].split('<g:link>')[1]; var url = undefined; if (typeof(url_temp) !== "undefined"){ url = url_temp.split('</g:link>')[0]; } var cat_temp = items[key].split('<g:product_type>')[1]; var cat = undefined; if(cat_temp !== undefined){ cat = cat_temp.split('</g:product_type>')[0]; } // 新增:提取库存状态字段 var availability_temp = items[key].split('<g:availability>')[1]; var isInStock = false; if(availability_temp !== undefined){ var availability = availability_temp.split('</g:availability>')[0].trim().toLowerCase(); // 判断是否为有库存状态,如果你家Feed的有库存标识不是in_stock,替换成对应值即可 isInStock = availability === 'in_stock'; } // 新增库存判断条件,只有有库存的商品才写入输出数组 if(url !== undefined && isInStock){ output.push([url, cat]); } } } function pushToSheet(){ var sheetURL = SpreadsheetApp.openByUrl(SPREADSHEET_URL); var sheet2 = sheetURL.getSheetByName(SHEET_NAME); sheet2.clearContents(); sheet2.appendRow(['URL', 'Custom label']); // 加判空逻辑,避免没有符合条件的商品时报错 if(output.length > 0){ sheet2.getRange(sheet2.getLastRow()+1, 1, output.length, output[0].length).setValues(output); } }
核心修改点说明
- 新增了库存状态字段
<g:availability>的提取逻辑,自动去除取值前后空格并转小写,避免大小写格式差异导致的判断失效 - 优化了变量声明逻辑,避免循环中变量提升导致的异常值
- 写入输出数组的判断条件新增了有库存校验,仅保留有库存的商品
- 新增了写入表格前的输出数组判空逻辑,避免没有符合条件的商品时脚本报错
- 新增了运行前清空上次输出的逻辑,避免多次运行数据重复
内容的提问来源于stack exchange,提问作者Дмитрий Громко
相关产品推荐
相关产品推荐

