R 编程:抢勺子的书

这是2年前写就的一篇帖子。一直藏在草稿箱里至今没有发,是因为里边提到的方案一直没能实施:勺子先生两年来一直不搞赠书活动了。

前两天,我又去勺子的博客调侃道:

勺子好久不搞赠书活动了哦,我一直在等。

勺子很大方地回复:

过去一段时间以及未来一段时间,没太有时间来打理博客了,赠书活动就。。。你如果在等的话,你在这里选一个吧

我只想说:其实你不懂我的心。

原文略作改动,比如把justyy改成chenghouwen等等。毕竟,2年之内发生的事情够多了。

正如文中所述:遵守规则的永远玩不过制订规则的。

本文里使用的R代码,可以作为学习R中字符串处理和弹窗设置的示例。

下面是这篇雪藏两年的博文。

enter image description here


有个爱读书的博主名叫勺子,逢年过节给读者发福利,在他博客上发布第 n 条评论的网友会获得赠书,附赠勺子的亲笔签名。这个 n 就像在 ebay 上拍,我一次也没抢到过,于是开玩笑地说要抵制这个活动。勺子说,可以雇人在电脑前不断刷屏。这个抵制方法太贵,我想到了万能的 R。琢磨了多次,终于笑逐颜开。

用 R 抢勺子的书,思路是这样的:用 R 每隔一段时间就查一次博客的评论数目,一旦发现到了 n-1,立刻触发一个抢书动作。这个思路相当于IFTTT,不仅可以用来抢书,举一反三,我就不多说了。

我写的 R 代码贴在下面。运行后,如果当前评论数距离目标尚远,就查得懒一些,以便减轻服务器负担;如果越接近目标值,就查得越勤。直到当前评论数达到 n-1,触发的抢书动作是弹出对话框,提示你去发抢书评论。

如果弹出对话框时,你碰巧不在电脑前呢?其实还有另一段代码,触发的动作是自动打开网页发评论,这样就实现整个抢书过程全自动完成。这段代码暂不公布。

勺子用他的方式,把爱读书的火种洒遍世界。跟他一样,我不是为了抢书,只是以抢书为诱饵,希望能有更多的人对 R 产生兴趣(有兴趣的请读 R 菜鸟入门)。另外,抢书代码不可滥用,抢一次玩玩就适可而止,一旦勺子为此一怒之下更改发书规则或者干脆不发书了,或者封了你我的ip,我们就没的玩了。遵守规则的永远玩不过制订规则的。

########  设置 ########
aim <- 10974 # 目标评论数
y <- 'http://justyy.com/' #目标网页
i <- 1320 # 在网页搜索包含评论数的初始行号。如果不知道,则设为 1 。
rt <- 600 # 查看网页的间隔时间,单位为秒。
######### 开始 #########
print(Sys.time())
aim <- aim - 1
repeat{ # 每间隔一段时间就读一次网页。
  x <- readLines(y, encoding='UTF-8')
  repeat{ # 查找含有评论数目的行
    ln <- regexpr('\t\t\t这里是勺子的个人网站,内容原创,已经运行了', x[i])[1]
    if (ln == 1) { # 挑出需要的链接行
      z <- as.numeric(substring(x[i], regexpr("共收到", x[i])[1]+3, regexpr("条评论", x[i])[1]-1)) # 获取当前评论数目
      break()
    }
    i <- i + 1
  }
  print(Sys.time())
  if(z >= aim){
    winDialog(type = c("ok"), ifelse(z > aim, paste("太晚了!目前评论数是", z, "!"), paste("快去抢!目前评论数是", z, "!"))) #信息提示框
    break()
  }  
  Sys.sleep((aim - z) * rt)
}

R 编程:抢勺子的书》上有9条评论

    1. 大鹏 文章作者

      难,因为有阶级矛盾。制订规则的是统治阶级。

      回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax