【发布时间】:2020-08-19 08:53:43
【问题描述】:
这是我的 Google 脚本 Code.gs:
/* Reddit Scraper written by Amit Agarwal */
var REDDIT = "HomeImprovement";
function run() {
deleteTriggers_();
/* Fetch Reddit posts every 5 minutes to avoid hitting
the reddit and Google Script quotas */
ScriptApp.newTrigger("scrapReddit")
.timeBased().everyMinutes(5).create();
}
function scrapReddit() {
// Process 20 Reddit posts in a batch
var url = "http://www.reddit.com/r/"
+ REDDIT + "/new.xml?limit=100" + getLastID_();
// Reddit API returns the results in XML format
var response = UrlFetchApp.fetch(url).getContentText();
var doc = XmlService.parse(response);
var root = doc.getRootElement();
var entries = root.getChildren("feed")[0].getChildren("entry");
var data = new Array();
for (var i=0; i<entries.length; i++) {
/* Extract post date, title, description and link from Reddit */
var date = entries[i].getChild('updated').getText();
var title = entries[i].getChild('title').getText();
var desc = entries[i].getChild('content').getText();
var link = entries[i].getChild('link').getText();
data[i] = new Array(date, title, desc, link);
}
if (data.length == 0) {
/* There's no data so stop the background trigger */
deleteTriggers_();
} else {
writeData_(data);
}
}
/* Write the scrapped data in a batch to the
Google Spreadsheet since this is more efficient */
function writeData_(data) {
if (data.length === 0) {
return;
}
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var row = sheet.getLastRow();
var col = sheet.getLastColumn();
var range = sheet.getRange(row+1, 1, data.length, 4);
try {
range.setValues(data);
} catch (e) {
Logger.log(e.toString());
}
}
/* Use the ID of the last processed post from Reddit as token */
function getLastID_() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var row = sheet.getLastRow();
var col = sheet.getLastColumn();
var url = sheet.getRange(row, col).getValue().toString();
var pattern = /.*comments\/([^\/]*).*/;
var id = url.match(pattern);
return id ? "&after=t3_" + id[1] : "";
}
/* Posts Extracted, Delete the Triggers */
function deleteTriggers_() {
var triggers = ScriptApp.getProjectTriggers();
for (var i=0; i<triggers.length; i++) {
ScriptApp.deleteTrigger(triggers[i]);
}
}
这是我运行脚本时产生的错误:
TypeError:无法读取未定义的属性“getChildren”(第 29 行,文件“代码”)
这里是网址供稿:https://www.reddit.com/r/HomeImprovement/new.xml?limit=100
有什么帮助吗?
谢谢
更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本更多文本
【问题讨论】:
-
1.Reddit 也提供 json feed。你为什么要解析xml? 2. 为什么不告诉我们第 29 行是哪一行?您希望我们数数并弄清楚吗?
标签: parsing google-apps-script google-sheets xml-parsing