2

例如,我制作了一个 shell 脚本来提取游戏网站上列出的玩家数量。我拿了这个数字并添加了一个时间戳,然后把它放在谷歌电子表格上,这样我就可以随着时间的推移制作一个图表来跟踪数据。唯一的问题是运行它,我需要让我的电脑保持开机状态,我猜你可以用某种谷歌脚本来做到这一点,但我不知道如何开始这样做。

我使用的shell脚本是:

 wget --output-document=- http://runescape.com/title.ws 2>/dev/null \
| grep PlayerCount \
| head -1l \
| sed 's/^[^>]*>//' \
| sed "s/currently.*$/$(date '+%m\/%d\/%Y %H:%M:%S')/" \
| cut -d">" -f 3,4 \
| sed 's/<\/span>//' \
| sed 's/,//' \
| awk '{printf "%s %s,%s,%s\n", $3, $4, $1, $2}'

输出示例:11/21/2012 01:02:22,52833,people

例如,我想要的是让它自动提取该号码并将其存储在一个单元格中,例如每 2 分钟。但我不确定它有多容易或从哪里开始。

然后它看起来像http://i.imgur.com/xRpNy.png

4

2 回答 2

5

如果您在执行此操作时可能会遇到配额限制,则可能是这样。但这就是我的做法。

function pullRuneScape() {
  var page = UrlFetchApp.fetch('http://runescape.com/title.ws').getContentText();
  var number = page.match(/PlayerCount.*>([0-9,]+)</)[1];
  SpreadsheetApp.getActive().getSheetByName('Sheet1').appendRow([new Date(), number]);
}

打开 Google 电子表格,然后单击菜单工具 > 脚本编辑器,粘贴上面的代码并保存。仍然在脚本编辑器上,单击资源 > 当前脚本的触发器。然后将此函数设置为在时间驱动的触发器上运行。

于 2012-11-21T10:40:31.607 回答
1

您可以在 Apps Script 中使用 UrlFetch App 来获取页面内容,并且可以使用正则表达式对其进行解析以获取玩家数量。这是我尝试过的一个小代码。它使用 YQL 和 Apps 脚本来避免正则表达式解析。

function retreiveOnlineUsers(){
  var query = 'select * from html where url="http://runescape.com/title.ws" and xpath=\'//div[@id="PlayerCount"]/p[1]/span\'&format=json';
  var yql = 'http://query.yahooapis.com/v1/public/yql?q=';
  var queryURL = yql+encodeURI(query);
  var jsonString = UrlFetchApp.fetch(queryURL).getContentText();
  var json = Utilities.jsonParse(jsonString);
  var palyerCount = json.query.results.span;
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  l = sheet.getLastRow();
  sheet.getRange(l+1, 1, 1, 3).setValues([[new Date(), palyerCount, 'people']]);
}

参考:

该脚本已经过测试并且可以正常工作。以下是使其与您的电子表格一起使用的步骤。

  1. 创建一个新的空电子表格并用名称保存
  2. 通过单击“工具”菜单打开脚本编辑器,然后选择“脚本编辑器...”。
  3. 复制并粘贴以下脚本
  4. 保存脚本
  5. 在功能组合框中选择功能 retreiveOnlineUsers 并单击“运行”,这将在您的工作表中填充一行。
  6. 现在您可以安排此脚本通过时间驱动的触发器运行。
于 2012-11-21T10:35:29.650 回答