2009年11月17日火曜日

サンシャイン牧場自動化

サンシャイン牧場の自動化プログラムを書いてみた。



機能
  1. セッションIDの自動更新
    サンシャイン牧場で独自のセッションIDがあって1時間?ごとに更新がされるみたい。その値を自動で取得します。
  2. 自分の畑、畜産の収穫
    収穫時間から0~30秒くらいの間で収穫してくれるはず。
  3. 種まき、放牧
    種、動物の購入をした後、種まきは金魚草、放牧はやぎをやってくれる
  4. 種、動物の購入
    除去、引退をした後、金魚草、ヤギを自動で購入します。
  5. 枯れた作物の除去、動物の引退
    収穫後、もう生産できないならやってくれる。
  6. マイミクの巡回
    30分ごとに自動でマイミク全員の畑、畜産広場を巡回して、
    収穫、虫駆除、治療、水やりをやります。
    1操作ごと、移動ごとにスリープして重み付けしてる。


使い方。
  1. jdkが必要なのでない人はインストール。パスの設定。
  2. jsonicをダウンロードして。
    c:\program files\java\sdk******\jre\lib\ext
    もしくはc:\program files\java\jre\lib\extにコピー
  3. 自動化のソースをダウンロード(下にリンクあり。)
  4. コンパイル:javac *.java
  5. 起動:java AutoSanboku < email> < password>  (mixiアカウント)


以上です。windows でやる場合は文字コードをSJISに変更してやるかコンパイル時に-encoding UTF-8をつけてやってください。
エラー処理をかなりサボってるのでサン牧のサーバーが落ちてたりするとこちらのプログラムも止まります。時々みてやってください。

サン牧運営側がハッキング?に対して制裁を行うと言ってるみたいです。
一応
マイミクの巡回時には重み付けする、サン牧側に送信するデータを元データと同じにする
ってことをやってますが

このプログラムがもとで起こったことに関してなんも責任は負えないのでよろしくお願いします。自己責任で使ってくださーい。
かなりきたないソースコードですが・・・ソースで配布するんで修正、追加機能等大歓迎です。できれば連絡ください。
もし修正版、追加機能版を公開するなら絶対にソースコードを公開してください。

ダウンロード:http://kimson.name/sanboku/sanboku.tar.gz

何か要望とかあればコメントにどうぞー。

===============================================
追記:2009/11/19
とりあえず文字コードの問題は
AutoSanboku.javaの315行あたりの
BufferedReader reader =
new BufferedReader(new InputStreamReader(urlconn.getInputStream()));

BufferedReader reader =
new BufferedReader(new InputStreamReader(urlconn.getInputStream(), "UTF-8"));
でいけます、試してみてください。
で、最近になってPOSTするデータが変更されてるみたいで「naruto」とかいうパラメータが追加されてます。
これがなんなのかよくわかってないので再現できないです。
この値がなくても(適当な値でも)レスポンスは返ってくるんで一応使えるんですが、向こうにはツール使ってるのばれるんでお気をつけて。

================================================
追記:2009/12/07
みなさんコメントありがとうございます。
さすがにせっかくコメントもらってるのにほったらかしはダメだと思って少し更新。
たぶん動くようになったと思う。

 ダウンロード:http://kimson.name/sanboku/sanboku.tar.gz

変更点。
1、conf.txtでアカウントなどの管理をするようにしました。
中身はこんな感じ
email=xxxxx@xxxx.xxx.xxx#mixiアカウントのemail
password=xxxxxxxxxx#mixiアカウントのpassword
sleep1time=3#操作間のスリープ時間(秒)
sleep2time=3#マイミク移動間のスリープ時間(秒)
sleep3time=30#マイミク巡回間のスリープ時間(分)
crawl=1#0ならマイミク巡回しない。1なら巡回する。
sleep1timeは収穫とか虫駆除をしたあとにスリープする時間。
sleep2timeはマイミク巡回の時にマイミクからマイミクに移動する間にスリープする時間。
sleep3timeは巡回と巡回の間にスリープする時間。*この時間はセッションIDの更新にも関係してるので1時間以上にしないほうがいいです。
crawlはマイミクの巡回をするかどうかです。
スペースとか入れるとうまく読み込めなくなるんでお気をつけて。(手抜きですいません。)

2、マイミク巡回時に虫を置くようにしました。
 適当に置きますw増産量80%以下の場合10分の1の確率で置くみたいな感じ。
詳しくはソース見てください。

3、narutoのパラメータについて
対応してません!!!
でも適当な値を入れて送ってますw
narutoの値についてコメントくれた方がいて解析はできてる用ですがそれを実装する気力がありませんw
だれが実装してくれないかな・・・
CtlParam.javaのgetNaruto()メソッドに書いてくれるとOKなのだけど・・・

たぶん以上です。こちらの環境では動作確認はできました。
あんまり時間使ってないので変な動作したらごめんなさい。
あとソースに俺のIDとかまずいものがあったらみなかったことにして消してくださいw

35 件のコメント:

  1. C:\sanboku__>javac *.java -Xlint:unchecked -encoding UTF-8
    TikusanRobo.java:74: 警告:[unchecked] 無検査変換です
    検出値 : java.util.List
    期待値 : java.util.List java.lang.String
    harvest = (List)(((Map)t
    mp_map.get(key)).get("auto_harvest"));
    ^
    TikusanRobo.java:91: 警告:[unchecked] 無検査変換です
    検出値 : java.util.List
    期待値 : java.util.List java.lang.String
    harvest = (List)(((Map)t
    mp_map.get(key)).get("auto_harvest"));
    ^
    警告 2 個

    と怒られました.
    auto_harvestまわりをコメントアウトして実行したところ,今度は

    C:\sanboku__>java AutoSanboku
    Exception in thread "main" java.lang.NoClassDefFoundError: AutoSanboku
    Caused by: java.lang.ClassNotFoundException: AutoSanboku
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    Could not find the main class: AutoSanboku. Program will exit.

    と怒られました.
    うーむ,JAVAはちょっとわかりませぬ.お助けを.
    環境はjdk1.6.0_17+jsonic1.1.1+WinXPSP2(コマンドプロンプト)です.
    タグ使えませんと怒られましたので外しました.

    返信削除
  2. コメントありがとうございます!

    警告は無視してそのまま実行でうまくいきませんか?


    一応動作が確認できた環境です。
    jdk1.6.0_16+jsonic1.1.1+Win7
    jdk-1.6.0_11-fcs+jsonic1.1.1+centos5.3

    返信削除
  3. ありがとうございます。
    どうやら余計なオプションをつけたの(xlint:unchecked)がよくなかったようで警告が出たまま実行したらできました。
    大変失礼しました。

    返信削除
  4. 自分も上記のような状況に陥りました。(エラーは全く同じ)
    警告は無視してそのまま実行・・・というのがよくわかりません。どうやるのでしょうか?

    返信削除
  5. 自分も全く同じ状況に陥りました。
    警告を無視してそのまま実行・・・というのがよくわかりません
    どうやるのでしょうか?

    返信削除
  6. コメントありがとうございます。

    警告の場合はコンパイル出来てますんで、
    javac *.cを打ったあとに
    java AutoSanboku <email> <password>
    を打ってください。

    返信削除
  7. 以下のエラーで止まってしまいます。
    ID関連は伏せさせていただきました。
    nicknameは文字化けした物が取得されていました。もしかしたらそのせいかも?ちょっとソース読んできます。
    若しくはWindowsのコマンドプロンプトで実行してるのが良くないかも。
    ちょっとlinux引っ張り出してみようかな。

    C:\miniapp\sanbokukojo>java AutoSanboku ****@***.*** ***
    レスポンスヘッダ:
    null: [HTTP/1.1 200 OK]
    X-Dealer: [034046]
    Date: [Tue, 17 Nov 2009 23:01:37 GMT]
    Vary: [Accept-Encoding]
    Transfer-Encoding: [chunked]
    Set-Cookie: [BF_STAMP=********************************; path=/, BF_SESSION=*******_********************************_0; path=/]
    Content-Type: [text/html; charset=ISO-8859-1]
    Connection: [close]
    Server: [Apache]
    レスポンスコード[200] レスポンスメッセージ[OK]

    ---- ボディ ----
    <html><head><meta http-equiv="refresh" content="0;url=/check.pl?n=%2Frun_appli.pl_id%3D7157"></head></html>
    [BF_STAMP=********************************;
    path=/,
    BF_SESSION=*******_********************************;
    path=/]
    BF_STAMP=********************************;
    BF_SESSION=*******_********************************;
    レスポンスヘッダ:
    http://****************************************.app0.mixi-platform.com/gadgets/m
    akeRequest
    st=85nFt58P8aVw0z1CDefZq8PI7olkF39ITlbuub3yszASKIJ1ib0Cbx%2BWAy3EUz%2F9GmtHQMikOajGSiPAymoD27O%2FA6K%2F78CKJPtis7EMyXDG%2FIFlRaQsJ0kHaRTf%2F6HkNujNFKlDIx7NsAC0swF0y3Ct2LkWH3CNkArmf5Pa0IgCgWL3
    v=1258470855
    v%3D1258470855
    Exception in thread "main" net.arnx.jsonic.JSONException: 1: 予期しない文字'i'が見つかりました。
    {"link":null,"entry":[{"thumbnailUrl":"http://profile.img.mixi.jp/photo/member/54/18/********_*********s.jpg","nickname":"******","id":"********","updated":"2009-11-17T23:01:38Z","hasApp":"true"},{"thumbnailUrl":"http://profile.img.mixi.jp/photo/member/59/52/********_**********s.jpg","nickname":"******","id":"********","updated":"2009-11-17T23:01:38Z","hasApp":"true"},{"thumbnailUrl":"http://profile.img.mixi.jp/photo/member/64/55/********_**********s.jpg","nickname":"*******,"i <- ?
    at net.arnx.jsonic.JSON.createParseException(JSON.java:1511)
    at net.arnx.jsonic.JSON.parseObject(JSON.java:1117)
    at net.arnx.jsonic.JSON.parseArray(JSON.java:1187)
    at net.arnx.jsonic.JSON.parseObject(JSON.java:1086)
    at net.arnx.jsonic.JSON.parse(JSON.java:996)
    at net.arnx.jsonic.JSON.parse(JSON.java:965)
    at net.arnx.jsonic.JSON.parse(JSON.java:931)
    at net.arnx.jsonic.JSON.parse(JSON.java:925)
    at net.arnx.jsonic.JSON.decode(JSON.java:304)
    at AutoSanboku.main(AutoSanboku.java:185)

    C:\miniapp\sanbokukojo>

    返信削除
  8. コメントありがとうございます。

    >nicknameは文字化けした物が取得されていました。もしかしたらそのせいかも?
    すいません・・・WinXPで試したときに同じ症状が出たんですが
    自宅のサーバー(centos5.3)で動かすつもりでそっちでうまくいってたんで、まーいっかと思ってほったらかしにしてました。

    >ちょっとソース読んできます。
    付け足し付け足しで汚いコードですがよかったら見てやってください。

    えーつまりよく原因がわかってないので時間をくださいってことでw

    返信削除
  9. 警告を無視してそのまま実行・・・に関して質問した者です。お恥ずかしいことですが、ファイル名の大小判別に気がつかず、そのまま小文字で打っていました。
    とりあえず実行はできたんですが、2009/11/18/8:13と同じエラーが出ました。
    環境はjdk1.6.0_17+jsonic1.1.1+WinXPです。

    対処をお待ちしております

    返信削除
  10. 初めまして。早速自動化ツール使わせていただいていただこうと思います。
    ところで、これはまだ金魚草、やぎを購入できない場合はどうなってしまうのでしょうか?
    また、種、仔動物の種類を変更することは出来ないでしょうか?

    SanbokuMethodクラスのL47で「金魚草」を指定している引数(おそらくはname=jinで指定していると思うのですが)にセロリ、竹、チャンチンを指定してあげるように変更したいと思っております。とりあえず「take」などと指定してみようと思いますが、私の環境では確認するためにはあと3日ほど掛かってしまう状況です。
    恐縮ですが、引数の対応表等の資料をお教えいただければ幸いです。

    返信削除
  11. コメントありがとうございます。

    畑のデータ
    http://spreadsheets.google.com/pub?key=txq8veFwgnLETg7bBy-PUfw&output=html

    畜産のデータ
    http://spreadsheets.google.com/pub?key=t07asj8bhEzKd_3R0R0MQcA&output=html

    向こうから送られてくるJSONデータのそれらしいところをcsv形式にしてインポートしたんでたぶんあってると思います。
    なんか間違いがあったら教えてください!

    返信削除
  12. 興味を持ったのでテストさせて頂いています。
    どのjavacを使うかによってjsonicのインストール先を変えなくてはいけないという初歩的なところにつまづいたりしながら、なんとか動かせるところまで持って行きました(笑)

    ところで、誕生日は公開状態で誕生年を非公開にしていると、データを読みにいったところで、
    Exception in thread "main" java.lang.NullPointerException
    at AutoSanboku.main(AutoSanboku.java:224)
    でコケます。

    一度公開状態にして起動して、その後非公開に戻せばとりあえず大丈夫のようですが、一応レポートしておきます。

    ご参考まで。

    返信削除
  13. ターミナルから実行出きるので大変ありがたく使わせていただいております。
    マイミクさんの巡回なのですが、全員ではなく一部のマイミクさんしか巡回されないのですが、なにか実効の仕方の問題があるのでしょうか。
    気のせいなのかもしれないですが、mixiネームに漢字が含まれている方が巡回対象に入っていないように思います。

    また実行中に次のようなエラーが出てしまいます。
    Exception in thread "Thread-2" java.lang.NullPointerException
    at Crawl.startCrawl(Crawl.java:27)
    at RefreshSessionId.run(RefreshSessionId.java:18)
    at java.lang.Thread.run(Thread.java:636)
    エラーが出ても収穫スレッドは動作しているようですが。

    よければ対策など教えていただければ幸いです。

    なお、私の環境はUbuntu9.10です。なお、Windows7で実行した時でも同様でした。

    返信削除
  14. コメントありがとうございます。

    >一部のマイミクさんしか巡回されない・・・
    ほんとだ・・・収穫、虫駆除などの操作がうまくいってないユーザーがいますねorz
    基本的にマイミクの情報を扱うときはIDを指定するだけなんで漢字は関係ないと思うんですが・・・
    調べてみます!

    >また実行中に次のようなエラーが出てしまいます。
    実行すると常に例外がでますか?
    常に出なければサン牧側のサーバーからレスポンスが返ってきてないせいだと思います。これはしっかり例外処理をしてないせいなんで対策しないとですね・・・

    返信削除
  15. Sjis版があるとうれしいです。
    ホルスタインを飼育したときなんだか処理がうまくいってないようで、なんども自分も畜産広場を調べます。
    ちょっとソースを読んでみたのですが、原因らしきものは発見できませんでした。
    次の段階までかなりの時間があると発生するようです。

    返信削除
  16. >hirokiさん

    いろんな時間帯で試したりしましたが、どのタイミングでもエラーは出るようです。
    その後実行を続けると、

    Exception in thread "Thread-3" java.lang.NullPointerException
    at TikusanRobo.run(TikusanRobo.java:53)
    at java.lang.Thread.run(Thread.java:636)
    Exception in thread "Thread-1" java.lang.NullPointerException
    at SyuukakuRobo.run(SyuukakuRobo.java:34)
    at java.lang.Thread.run(Thread.java:636)
    というメッセージが表示されプログラムが停止してしまいました。

    以前の投稿で報告させていただいた、Thread-2のエラーはマイミク巡回に関するエラーでmそのためマイミク全員に巡回できなかったのだと思われます。


    漢字は無関係でしたか。素人考えで大変失礼しました。

    返信削除
  17. 動かなくなってしまいました…

    返信削除
  18. >動かなくなってしまいました...
    うわ。。。
    こっちで確認できたのは、マイミク巡回の収穫が500が返ってきてダメっぽいですね。
    それ以外は問題なく動いてるみたい。
    narutoの正体がわからないのでなんとも・・・

    返信削除
  19. 各機能のON/OFFとマイミクの巡回のスピード設定
    はできるようになりませんか


    naruto については

    http://pc12.2ch.net/test/read.cgi/sns/1257678007/

    この辺参考になされてはいかがでしょうか^^

    返信削除
  20. 上のほうにあるコメントにも関係してるんですが
    生年月日や性別の取得は必要なんでしょうか?

    なんとなく気になるもんで

    返信削除
  21. とりあえず、収穫だけしないようにして動かしています。
    やはり、ホルスタインを飼うと不具合発生のようですね。(特に問題が起きるわけではないですが…)
    StoreInfoデータの最新版をもらえませんか?

    返信削除
  22. >生年月日や性別の取得は必要なんでしょうか?
    必要ではないと思いますが試してないので何とも。

    >StoreInfoデータの最新版
    ソースを紛失したみたいで・・・
    いずれきっと。

    返信削除
  23. 今更ですが最新のデータを乗っけときます!

    畜産のデータ
    http://spreadsheets.google.com/pub?key=tntr9nTgJDaGBCcZWWi600Q&output=html


    畑データ
    http://spreadsheets.google.com/pub?key=tbPbJA8FOiCiSujiytaalXg&output=html

    返信削除
  24. これで初めてjavaを触った者です。初歩的な事でしたら申し訳ありません。
    使い方 4コンパイル:javac *.java のところで警告とエラーが出てしまいます。
    警告は上記の方と同じ物です。
    エラーが「パッケージ net.arnx.jsonic は存在しません。」というものと「シンボルを見つけられません。」というものです。
    わからないなりに色々調べたのですがやはりわかりません…。
    お力添えを頂けませんでしょうか。

    返信削除
  25. コメントありがとうございます。

    jsonicのライブラリをダウンロードして
    jsonic-x.x.x.jarを
    c:\program files\java\sdk******\jre\lib\ext
    もしくはc:\program files\java\jre\lib\extにコピー
    してください。たぶんこれでいけると思います。

    「jsonic-x.x.x.jarを」ってのを書き忘れてた・・・

    返信削除
  26. ありがとうございます。上の質問を書いた者です。
    ご教授頂いた通りやってみてできた様です。
    試行錯誤したので出来た際は正直嬉しかったです。
    教えていただき有難うございました。

    返信削除
  27. 連続すいません…。
    2009年11月18日8:13  さんと同じようなエラーで動きませんでした…。
    自分もXPなのでそれが原因でしょうか…。
    環境はjdk1.6.0_17+jsonic1.1.1+WinXPです。

    初めてだらけの事だったので、これまでの事ができただけでも満足してしまっていますが(苦笑)

    返信削除
  28. コメントありがとうございます。

    あ、すいません。修正してなかったです。
    追記のとこに書いたんですが、
    AutoSanboku.javaの330行くらいの
    BufferedReader reader =
    new BufferedReader(new InputStreamReader(urlconn.getInputStream()));

    BufferedReader reader =
    new BufferedReader(new InputStreamReader(urlconn.getInputStream(), "UTF-8"));
    でいけるのではと思います。

    よくわからなかったら修正しとくんでもう一度DLしてくださーい。

    返信削除
  29. StoreInfoデータの最新版お願いします。
    そばを植えたいです^^

    返信削除
  30. ありがとうございます。スゴすぎです。

    蕎麦(liangmian)と孔雀(lukongque)で楽しんでます。
    蕎麦が無くなったら香椿(xiangchun)ですね。

    返信削除
  31. >StoreInfoデータの最新版お願いします。
    すいません、StoreInfoを取得するプログラムをそのうち公開しようかなと思ってます。

    返信削除
  32. ありがとうございます。(ピンインを調べれば良かったのですね)
    ソバの種?を1000個ほど買ってしまったので、しばらくソバ祭りをしたいと思います^^

    返信削除
  33. 上の方で質問のあった次のエラーですが、

    C:\sanboku__>java AutoSanboku
    Exception in thread "main" java.lang.NoClassDefFoundError: AutoSanboku

    システム環境変数で CLASSPASS が(QuickTime関係で)変な風に設定されてて上記のエラーが出たことがありました。誤ったCLASSPASSの設定をなおすか、あるいは削除すれば問題なくなりました。

    返信削除
  34. なんかダウンロードファイルがなくなってます?
    http://kimson.name/sanboku/sanboku.tar.gz

    返信削除
  35. ダウンロードリンクの再開してくれないかな・・・

    返信削除