Google应用脚本用于从网站提取文字

时间:2012-11-21 06:05:48

标签: javascript google-apps-script

我有一个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

2 个答案:

答案 0 :(得分:4)

如果你这样做可能会达到配额限制。但这就是我要做的。

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]);
}

打开Goog​​le电子表格,然后点击菜单工具&gt;脚本编辑器,粘贴上面的代码并保存。仍然在脚本编辑器上,单击“资源”&gt;当前脚本的触发器。然后将此功能设置为在时间驱动的触发器上运行。

答案 1 :(得分:1)

您可以在Apps脚本中使用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. 保存脚本
  6. 在功能组合框中选择retreiveOnlineUsers函数,然后单击“运行”,这将填充工作表中的一行。
  7. 现在,您可以安排此脚本运行time driven triggers