为Stack Exchange网站创建狂热机器人


12

今天的挑战是欺骗徽章!

您将构建一个机器人,该机器人将连接到Stack Exchange网站,以您的身份登录,访问/ questions页面,访问一个问题,然后在“相关”侧边栏中访问其他9个问题(因为这足以算作“活动”,并且我需要对某些事情进行标准化)。

该漫游器必须每天执行一次此过程,而无需用户进行任何输入或采取任何操作。它应该可以继续运行,用户应该永远不能触摸计算机,并且连续的天数仍将增加。“访问”该站点后,必须打印“已访问”。

您将假定用户正在使用Stack Exchange提供的OpenID。

该程序的输入将是站点URL,SE OpenID电子邮件和SE OpenID密码。例如:

/programming// doorknob@doorknob.doorknob password

您可以根据需要输入。

您的程序必须至少满足以下条件:

(只是确保它是通用的。)

这是,因此最短的代码(以字节为单位)将获胜!


1
我要做的最少活动是访问我的用户页面。无需阅读任何问题。(但不要因此而更改规则。)
Kendall Frey 2014年

4
谢天谢地,挑战不是要创建一个每天随机投票减少40个问题/答案的机器人。

1
考虑到堆栈交换的范围,只有一个时间问题,才可以利用它。
PyRulez 2014年

Answers:


11

Ruby,456个字符

require'mechanize'
s,*e=gets.split
a,o=Mechanize.new,'http://openid.stackexchange.com/'
a.agent.http.verify_mode=OpenSSL::SSL::VERIFY_NONE
l=a.get(o+'account/login').forms[0]
l.email,l.password=e
a.submit l,l.buttons[0]
g=a.get(s+'/users/login').forms.find{|f|f.action=='/users/authenticate'}
g.openid_identifier=o
a.submit g,g.buttons[-1]
loop{p=a.get s+'/questions'
10.times{p=p.links.find{|i|i.href=~/^\/questions\/\d/}.click}
puts'visited'
sleep 86400}

非高尔夫版本:

require 'mechanize'

site, email, password = gets.split

agent = Mechanize.new
agent.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE

login_form = agent.get('http://openid.stackexchange.com/account/login').forms.first
login_form.email = email
login_form.password = password
agent.submit login_form, login_form.buttons.first
puts 'logged in with SE openid'

site_login_form = agent.get(site + '/users/login').forms.find {|form| form.action == '/users/authenticate' }
site_login_form.openid_identifier = 'http://openid.stackexchange.com/'
agent.submit site_login_form, site_login_form.buttons.last
puts 'logged in to site'

loop {
    page = agent.get(site + '/questions')
    10.times do page = page.links.find{|link| link.href =~ /^\/questions\/\d/ }.click; end
    puts 'visited'
    sleep 60 * 60 * 24
}

7
您是否超出了Github帐户的最大存储空间,并开始使用Q&A StackExchange格式作为规范和源代码的溢出存储空间?;-)
Jonathan Van Matre 2014年

1
@JonathanVanMatre,等等,GitHub存储库有大小限制吗?
haykam '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.