Stack Exchangeサイト用のFanaticボットを作成する


12

今日の課題は、バッジをごまかすことです!

Stack Exchangeサイトに接続し、ログインし、/ questionsページにアクセスし、質問にアクセスし、「関連」サイドバーにある他の9つの質問にアクセスするボットを構築します(「アクティビティ」、そして何かを標準化する必要があります)。

このボットは、ユーザーからの入力やアクションなしで、毎日1回このプロセスを実行する必要があります。実行したままにしておく必要があり、ユーザーがコンピューターに触れないようにする必要があります。また、連続した日数は増え続けます。サイトを「訪問」した後、「訪問」を印刷する必要があります。

ユーザーがStack Exchange提供のOpenIDを使用していると仮定します。

プログラムの入力は、サイトURL、SE OpenID電子メール、およびSE OpenIDパスワードです。例えば:

/programming// doorknob@doorknob.doorknob password

これらは自由に入力できます。

あなたのプログラムは最低でも機能しなければなりません:

(それが普遍的であることを確認するためだけに。)

これはなので、バイト単位の最短コードが勝ちます!


1
アクティビティのために最低限必要なことは、ユーザーページにアクセスすることでした。質問を読む必要はありません。(ただし、このためにルールを変更しないでください。)
— ケンダルフレイ

4
毎日40の質問/回答をランダムにダウンボットするボットを作成することが課題ではなかったことに感謝します。

1
スタック交換の範囲を考えると、それを悪用することについて質問があるのは時間の問題でした。
— PyRulez 14年

回答:


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形式の使用を開始しましたか?;-)
— ジョナサンヴァンマトレ14年

1
@JonathanVanMatre、待って、GitHubリポジトリにはサイズ制限がありますか?
— haykam
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.