Створіть бота Fanatic для сайтів обміну стеками


12

Ваше сьогоднішнє завдання - обдурити значки!

Ви створите бота, який підключиться до сайту Stack Exchange, увійдете в систему як ви, перейдіть на сторінку / питання, відвідайте питання, а потім відвідайте ще 9 питань на "пов'язаній" бічній панелі (тому що, здається, достатньо, щоб рахувати як " діяльність ", і мені потрібно щось стандартизувати).

Цей бот повинен проходити цей процес раз на день, без будь-яких вводів або дій користувача. Він повинен мати можливість працювати, і користувач повинен мати можливість ніколи не торкатися комп’ютера, і кількість днів підряд все одно збільшуватиметься. Після "відвідування" сайту він повинен надрукувати "відвідав".

Ви будете вважати, що користувач використовує наданий OpenID Stack Exchange.

Вхідними даними програми будуть URL-адреса сайту, електронна пошта SE OpenID та пароль SE OpenID. Наприклад:

/programming// doorknob@doorknob.doorknob password

Ви можете ввести їх, як би хотіли.

Ваша програма повинна працювати як мінімум:

(Просто для того, щоб переконатися, що він універсальний.)

Це , тому найкоротший код у байтах виграє!


1
Мінімум, що мені потрібно було зробити для діяльності, - це відвідати мою сторінку користувача. Не потрібно читати жодних питань. (Але не змінюйте правила зважаючи на це.)
Кендалл Фрей

4
Слава богу, що завданням було не створити бота, який щодня випадково знімає 40 питань / відповідей.

1
З огляду на масштаби обміну стеками, до питання про її використання було лише питання часу.
PyRulez

Відповіді:


11

Рубі, 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 як сховище переповнення для своїх специфікацій та вихідного коду? ;-)
Джонатан Ван Матре

1
@JonathanVanMatre, почекай, є обмеження розміру у сховищах GitHub?
хайкам
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.