Crea un bot Fanatic per i siti Stack Exchange


12

La tua sfida oggi è imbrogliare in badge!

Costruirai un bot che si collegherà a un sito di Stack Exchange, accedi come te, visita la pagina / questions, visita una domanda e quindi visita altre 9 domande nella barra laterale "correlata" (perché sembra sufficiente per contare come " attività "e devo uniformarmi a qualcosa).

Questo bot deve passare attraverso questo processo una volta al giorno, senza input o azioni da parte dell'utente. Dovrebbe essere in grado di essere lasciato in esecuzione e l'utente dovrebbe essere in grado di non toccare mai il computer e il conteggio dei giorni consecutivi verrà comunque incrementato. Dopo aver "visitato" il sito, è necessario stampare "visitato".

Si supporrà che l'utente stia utilizzando l'OpenID fornito da Stack Exchange.

L'input del programma sarà l'URL del sito, l'e-mail SE OpenID e la password SE OpenID. Per esempio:

/programming// doorknob@doorknob.doorknob password

Puoi inserirli come preferisci.

Il tuo programma deve funzionare per un minimo di:

(Solo per assicurarsi che sia universale.)

Questo è , quindi vincerà il codice più breve in byte!


1
Il minimo che dovevo fare per l'attività era visitare la mia pagina utente. Non è necessario leggere alcuna domanda. (Ma non cambiare le regole per questo.)
Kendall Frey,

4
Per fortuna la sfida non è stata quella di creare un bot che declassasse casualmente 40 domande / risposte ogni giorno.

1
Dato lo scopo dello scambio di stack, è stata solo una questione di tempo fino a quando non c'era una domanda su come sfruttarlo.
PyRulez,

Risposte:


11

Rubino, 456 caratteri

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}

Versione non golfata:

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
Hai superato lo spazio di archiviazione massimo sul tuo account Github e hai iniziato a utilizzare il formato Domande e risposte StackExchange come spazio di archiviazione di overflow per le tue specifiche e il codice sorgente? ;-)
Jonathan Van Matre

1
@JonathanVanMatre, aspetta, c'è un limite di dimensione sui repository GitHub?
Hayakam,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.