สร้างบ็อต Fanatic สำหรับไซต์ Stack Exchange


12

ความท้าทายของคุณในวันนี้คือการโกงป้าย!

คุณจะสร้างบอทที่จะเชื่อมต่อกับไซต์ Exchange Exchange เข้าสู่ระบบในขณะที่คุณเยี่ยมชมหน้า / คำถามเยี่ยมชมคำถามแล้วเยี่ยมชม 9 คำถามอื่น ๆ ในแถบด้านข้าง "ที่เกี่ยวข้อง" (เพราะดูเหมือนจะเพียงพอที่จะนับเป็น " กิจกรรม "และฉันต้องสร้างมาตรฐานให้กับบางสิ่ง)

บอทนี้จะต้องผ่านกระบวนการนี้ทุกวันโดยไม่มีการป้อนข้อมูลหรือการกระทำจากผู้ใช้ ควรจะสามารถทำงานได้ต่อไปและผู้ใช้จะไม่สามารถสัมผัสคอมพิวเตอร์ได้และจำนวนวันที่ติดต่อกันจะยังคงเพิ่มขึ้น หลังจาก "เยี่ยมชม" เว็บไซต์จะต้องพิมพ์ "เยี่ยมชม"

คุณจะสมมติว่าผู้ใช้กำลังใช้ OpenID ที่จัดเตรียมไว้โดย Stack

ข้อมูลที่ป้อนของโปรแกรมจะเป็น URL ของไซต์อีเมล SE OpenID และรหัสผ่าน SE OpenID ตัวอย่างเช่น:

/programming// doorknob@doorknob.doorknob password

คุณสามารถป้อนสิ่งเหล่านี้ได้ตามต้องการ

โปรแกรมของคุณจะต้องทำงานอย่างน้อย:

(เพียงเพื่อให้แน่ใจว่าเป็นสากล)

นี่คือดังนั้นโค้ดที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ!


1
ขั้นต่ำที่ฉันต้องทำสำหรับกิจกรรมคือไปที่หน้าผู้ใช้ของฉัน ไม่จำเป็นต้องอ่านคำถามใด ๆ (แต่อย่าเปลี่ยนกฎเนื่องจากสิ่งนี้)
Kendall Frey

4
ขอบคุณพระเจ้าความท้าทายไม่ใช่การสร้างบอทที่สุ่มคะแนน 40 คำถาม / คำตอบในแต่ละวัน

1
เมื่อพิจารณาถึงขอบเขตของการแลกเปลี่ยนสแต็คมันเป็นเพียงเรื่องของเวลาจนกว่าจะมีคำถามเกี่ยวกับการใช้ประโยชน์จากมัน
PyRulez

คำตอบ:


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

1
@JonathanVanMatre รอมีการ จำกัด ขนาดของที่เก็บ GitHub หรือไม่
haykam
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.