Erstellen Sie einen Fanatic-Bot für Stack Exchange-Sites

12

Ihre Herausforderung heute ist es, Abzeichen zu betrügen!

Sie erstellen einen Bot, der eine Verbindung zu einer Stack Exchange-Site herstellt, sich bei Ihnen anmeldet, die Seite / questions aufruft, eine Frage aufruft und dann 9 andere Fragen in der "zugehörigen" Seitenleiste aufruft (da dies ausreicht, um als zu gelten). Aktivität ", und ich muss auf etwas standardisieren).

Dieser Bot muss diesen Prozess einmal täglich ohne Eingaben oder Aktionen des Benutzers durchlaufen. Es sollte in der Lage sein, ausgeführt zu bleiben, und der Benutzer sollte den Computer niemals berühren können, und die Anzahl der aufeinanderfolgenden Tage wird weiterhin erhöht. Nach dem "Besuch" der Site muss "besucht" gedruckt werden.

Sie gehen davon aus, dass der Benutzer die von Stack Exchange bereitgestellte OpenID verwendet.

Die Eingabe des Programms erfolgt über die Site-URL, die SE OpenID-E-Mail und das SE OpenID-Passwort. Beispielsweise:

/programming// [email protected] password

Sie können diese nach Belieben eingeben.

Ihr Programm muss mindestens funktionieren für:

(Nur um sicherzustellen, dass es universell ist.)

Das ist , also gewinnt der kürzeste Code in Bytes!

Türknauf
quelle
1
Das Minimum, das ich für die Aktivität tun musste, war der Besuch meiner Benutzerseite. Sie müssen keine Fragen lesen. (Aber ändern Sie nicht die Regeln aus diesem Grund.)
Kendall Frey
4
Gott sei Dank bestand die Herausforderung nicht darin, einen Bot zu erstellen, der zufällig 40 Fragen / Antworten pro Tag abstimmt.
1
In Anbetracht des Umfangs des Stapelaustauschs war es nur eine Frage der Zeit, bis eine Frage zu dessen Ausnutzung auftrat.
PyRulez

Antworten:

11

Ruby, 456 Zeichen

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}

Ungolfed-Version:

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
}
Türknauf
quelle
7
Haben Sie den maximalen Speicherplatz in Ihrem Github-Konto überschritten und das Q & A StackExchange-Format als Überlaufspeicher für Ihre Spezifikationen und Ihren Quellcode verwendet? ;-)
Jonathan Van Matre
1
@JonathanVanMatre, warten Sie, es gibt eine Größenbeschränkung für GitHub-Repositorys?
Haykam