水木社区自商业化以来,搞出了什么积分制度,一堆技术版面被无情的关闭,倒是灌水用的八卦闲聊版面得到了充分的发展。近日我常上的某技术版面积分也从10万多扣至2万多,按照每周约5000分的扣分力度,估计撑不过一个月。有感于此,决定写一个小程序,专门用来给指定版面刷分。
水木社区的《版面积分实施细则》规定,每周考核将根据版面的访问人次、访问时间、在线人数、文章数、文章质量等数据来考核。这里最容易刷的无疑是访问人次和访问时间。因此决定专门用一个账号反复进行“进版”、“出版”的操作,既能提升人次,也能增加访问时间。
这种小活用脚本语言来干最合适不过了,正好 Ruby 中有专门的 Telnet 库,台湾某哥们还写过一篇《用 Ruby 玩 PTT》值得参考。最后完成的脚本如下:
require 'net/telnet' require 'logger' USER = 'user' # user id PASSWORD = 'password' # password BOARD_NAME = 'board' # board name LOG_FILE = 'newsmth.log' enter_count = 0 stay_time = 0 logger = Logger.new(LOG_FILE) logger.level = Logger::INFO logger.info 'Logfile opened.' # Connect to bbs.newsmth.net # The prompt string could be '输入', '>', '(菱形方块)', ']' smth = Net::Telnet::new('Host' => 'bbs.newsmth.net', 'Timeout' => 10, 'Telnetmode' => false, 'Prompt' => /(\xA1\xF4)|(\xBC\xCC\xD0\xF8)|:|\]|>/n) smth.cmd(USER) {|c| print c } smth.cmd(PASSWORD) {|c| print c } # Ignore the info screens by pressing enter smth.cmd("\n\n\n\n\n") {|c| print c } logger.info 'Connected to newsmth.net' loop do begin system 'cls' # Clear screen, use 'clear' in Linux/Unix # Exit to main menu, then select "F) Favorites" smth.cmd('qqqqqf') {|c| print c } logger.info 'Exit board' sleep 0.5 system 'cls' # Enter specified board by "s" command in bbs smth.cmd("s#{BOARD_NAME}") {|c| print c } logger.info "Enter board #{BOARD_NAME}" enter_count += 1 sleep 5 stay_time += 5 rescue Interrupt # Ctrl-C signal # Exit to main menu, then select "G) Exit bbs" smth.cmd("qqqqqg\n\n") {|c| print c } logger.info 'Exit bbs' logger.info "Entrance count: #{enter_count}" logger.info "Total stay time: #{stay_time} seconds" logger.info 'Logfile closed' logger.close exit rescue IOError => e logger.error(e.message) rescue TimeoutError => e logger.error(e.message) end end
目前脚本正在稳定运行中,实际效果有待一周后观察版面积分的变化。
Update@2015-05-01: 经过断断续续两周时间的试运行,发现程序对版面积分的贡献并不大,版面一周无水且访问人数低下时,扣分依然很严重。据此推测,进版人次在版面积分考核的权重中并不是很高,所以用程序来刷进版次数是不太管用的。
Update-2@2015-8-28: 水木现在已经不考核版面积分了,全看站务心情。此文已经木有价值罗。