hagino3000's blog

平成アーカイブス (更新停止)

Spymasterで経験値稼ぎスクリプト


2009-06-05 23:50追記:Spymaster側に変更が入って下のスクリプトは動作しなくなりました。POST時に必要なパラメータが増えた様子。

Twitterアカウントを使って遊ぶゲーム、Spymasterに招待されたので始めてみた。トラビアンに続く時間泥棒ゲームの予感がしたため、経験値稼ぎにタスクをこなすだけのスクリプトRubyで書いた。


多重ログインを許しているみたいなので、Firefoxブラウザで認証して取得したcookieをそのまま使えばMechanizeでも認証クリアできる。

require 'rubygems'
require 'time'
require 'mechanize'
require 'nokogiri'
require 'hpricot'
require 'yaml'
require 'json'


def log(msg)
  puts Time.new.to_s + ' ' + msg
end


log "start()"

begin

  uri = URI.parse('http://playspymaster.com/tasks')

  agent = WWW::Mechanize.new
  agent.user_agent_alias = 'Mac Safari'

  ######################################
  # login to spymaster
  ######################################
  auth_cookie = '_spymaster_session=$ブラウザが送信してるのと同じcookie$'
 
  WWW::Mechanize::Cookie.parse(uri, auth_cookie, nil){|c|
    agent.cookie_jar.add(uri, c)
  }

  task_page = agent.get(uri)
  doc_html = Nokogiri::HTML(task_page.body)

  # energyの取得
  energy = 0
  doc_html.css('#mini-dashboard-energy span.value').each do |val|
    energy = val.content
  end

  ######################################
  # execute task 
  ######################################
  AUTH_TOKEN = "$spymasterのページのHTML中に記述されてるのをそのまま$"
  TASK = "assassinate_ambassador"
  TIME = "80" # 適当

  if energy.to_i > 30
    agent.post('http://playspymaster.com/tasks/perform',{"task" => TASK, "authenticity_token" => AUTH_TOKEN, "time" => TIME})
  else
    # Energyが30以下の時は何もしない
    log "not enough energy:" + energy.to_s
  end


rescue Exception => exp
  log "Abnormaly ended"
  log exp.to_s
ensure
  #NOP
end

log "end()"


ログのファイル出力は余計だったので消しました。


タスク実行時に送信するパラメータは次の3つ

  • task : タスク
  • authenticity_token : 認証トーク
  • time : リロードからの経過時間(?)
  • ticks : ??
  • ch : ??

timeは適当に、認証トークンはHTML中に記述されていて、毎回変化が無いので固定値かもしれない。今夜から5分毎に実行させておくので、仕事中にこっそりレベル上げをする必要は無さそうだ。