स्टैक एक्सचेंज साइटों के लिए एक कट्टर बॉट बनाएं


12

आज आपकी चुनौती बैज पर धोखा देने की है!

आप एक बॉट का निर्माण करेंगे जो एक स्टैक एक्सचेंज साइट से जुड़ेगा, आप में लॉग इन करें, / प्रश्न पृष्ठ पर जाएं, एक प्रश्न पर जाएं, और फिर "संबंधित" साइडबार में 9 अन्य प्रश्नों पर जाएं (क्योंकि यह गिनती के लिए पर्याप्त लगता है) गतिविधि, "और मुझे कुछ पर मानकीकरण करने की आवश्यकता है)।

उपयोगकर्ता से किसी भी इनपुट या कार्यों के बिना, इस बॉट को हर दिन एक बार इस प्रक्रिया से गुजरना होगा। इसे चलने में सक्षम होना चाहिए, और उपयोगकर्ता को कभी भी कंप्यूटर को छूने में सक्षम नहीं होना चाहिए, और लगातार दिनों की गिनती अभी भी बढ़ेगी। साइट पर "जाने" के बाद, इसे "विज़िट किया गया" प्रिंट करना होगा।

आप मान लेंगे कि उपयोगकर्ता स्टैक एक्सचेंज-प्रदान ओपनआईडी का उपयोग कर रहा है।

कार्यक्रम का इनपुट साइट 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}

Ungolfed संस्करण:

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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.