2010年9月2日 星期四

處理json格式資料的lib--jsoncpp

開心農場(開心農民)在七月底改版後,伺服器不再直接回傳使用者名稱,
導致各個外掛(如:開心神農、happyboti、悠閒農夫)全部陣亡(註1)
過了這麼久,好像只有悠閒農夫復活而已=.="

會陣亡的原因是,伺服器接收的封包必須包含使用者名稱,
這時候,就必須跟農場的flash一樣,去跟facebook要使用者的資料,
經過分析網頁及封包的結果,
facebook的資料回傳格式是JSON(JavaScript Object Notation),
因此在修改農夫時,使用了jsoncpp這個lib來處理抓回來的資料。

jsoncpp的編譯方法有點討厭,不是一包抓下來後就可以直接編譯,
除了要先灌好python, 還需要去抓Scons回來解壓縮到jsoncpp的目錄底下,
透過python執行編譯的動作,編譯指令(註2)
python scons.py platform=mingw

jsoncpp的使用方式,在它的官網有很完整的範例,
這邊就只概略的說一下農夫裡的使用方式
Json::Value root; 
Json::Reader reader; 
bool parsingSuccessful = reader.parse(str_json, root, false); 
if(!parsingSuccessful) {
    WriteMemo(_("解析失敗(3)"), WORK);
    return false;
}
if(root.type() == Json::arrayValue) {
    size_t read_count = 0;
    for(size_t i = 0; i < root.size(); i++) {
        m_ps.GetFriend(wxString::Format(_("%.0f"),  root[i]["uid"].asDouble()))->SetName(wxString(root[i]["name"].asString().c_str(), wxConvUTF8));
        read_count++;
    }
    root.clear();
    WriteMemo(wxString::Format(_("讀取了%d筆資料"), read_count), WORK);
    if(read_count != m_ps.GetAllFriends().size()) {
        WriteMemo(_("資料筆數與農友數量不符!!"), WORK);
    }
}
else {
    WriteMemo(_("解析失敗(4)"), WORK);
    return false;
}
一開始要宣告一個Json::Value用來承接解析後的東西
再由Json::Reader解析json格式的字串,
然後判斷解析結果是否成功,
如果解析成功,那接下來的使用方式就幾乎跟在javascript中操作json一樣
只是最後取值時,要指定轉成何種型態的資料而已。
至於程式中root.type() == Json::arrayValue,這句的判斷,
是因為Facebook回傳的資料時,如果沒發生錯誤,
它都是傳回陣列格式的json,所以直接判斷是不是陣列來認定是否為正常的資料。

註1:農場後續的改版,更導致Charles(俗稱花瓶)這類封包重送軟體失效,
          這部份的原因,以後有時間再寫。

註2:platform指的是要使用的C++編譯器,因此除了可以接mingw外,
         還可以改接下列的東西
suncc Sun C++ (Solaris)
vacpp Visual Age C++ (AIX)
msvc6 Microsoft Visual Studio 6 service pack 5-6
msvc70 Microsoft Visual Studio 2002
msvc71 Microsoft Visual Studio 2003
msvc80 Microsoft Visual Studio 2005
linux-gcc Gnu C++ (linux, also reported to work for Mac OS X)

71 則留言:

  1. 關於 Charles 重送封包,當初買1000背景一次送100(concurrency)個封包提交到伺服器去,大約30秒內完成,然後一筆筆 response OK,感覺他們伺服器還挺強壯...
    若慢慢送,約一分鐘內就會傳回 time error 而失敗,伺服器與農場應該偷偷互相 ping 了一些只有她們自己知道的東西,關於農場的這個 timeout 判斷機制就期待您下一個創作的說明了。

    回覆刪除
  2. 現在農場的改版。烤肉架、果汁機、蛋奶雞的物品都沒有辦法偷到說,可以勞煩您修改成可以偷嗎?

    回覆刪除
  3. 悠閒農夫 程式常常用不到5分鐘就跳出錯誤視窗.. 或是 記憶體不能成為READ 等等 有辦法改善嘛 ..

    回覆刪除
  4. 請問能開發 天策的脫機版嗎
    不錯玩
    對岸有脫機版
    台版沒有
    對岸的脫機版叫做
    天策貝貝
    要連入論壇帳號才能啟動試用版
    希望能開發個天策脫機版

    回覆刪除
  5. 悠閒農夫 程式常常用不到5分鐘就跳出錯誤視窗.. 或是 記憶體不能成為READ 等等 有辦法改善嘛

    我也常常發生這問題...
    到現在變成關掉網頁也會跳出錯誤視窗= ="

    回覆刪除
  6. 最近版主很忙~
    常常加班到十一二點~
    請各位大大有點耐心給版主一些時間吧~

    回覆刪除
  7. 追夢高手是版主朋友嗎?

    回覆刪除
  8. 悠閒農夫,10/19開始不能用了!

    回覆刪除
  9. 悠閒的程式工程師你好
    外掛已經壞了 幾天了
    不知道你可有發現
    請你收到信件後測試看看
    如可以 請你有空閒時 修好
    感謝你貢獻你的私人時間
    為廣大開農愛好者
    開發這個好用的程式

    回覆刪除
  10. 讓人敬佩的工程師
    術業有專攻
    我們只專玩

    回覆刪除
  11. 希望能增加偷烤肉架,蛋奶機等這類機器的功能.

    請問...開心論壇是不是死了-_-?

    回覆刪除
  12. 使用win7粉少當掉重開農夫...
    給大家參考

    回覆刪除
  13. Hello,自用了悠閒後,真的是省了很多時間,在此先謝了

    不過也讓人技癢想寫一些版主不打算寫的功能,不過我是用Java啦,在拆解SWF中,解到最後,卡在一個[K] 值的運算。(I guess you know what I mean for...)
    特別是其中一個 Encrypt.getKey(Command)的返回值,
    找遍 Internet,實在是搞不懂這個Encrypt.getKey(Command)會得到什麼。(用FlexBuilder試算一下.得到空的String)

    版大可否告知這個 K值的運算公式. 真的是技窮了.

    (不過,看了ActionScript後, 才了解有些功能要還原有多麻煩...)

    回覆刪除
  14. to -MinG`:
    1.新功能快要有時間可以加了
    2.關於開心論壇的事,我不知道。

    to Aknine:
    那個值在ActionScript裡是看不到的
    要看它的其他地方~.~
    值是「w_j*b@$(#+,-1」

    回覆刪除
  15. 哇哩勒,卡好@#$%^&(消音中)

    真是不好意思, 剛收到還以為版主在開玩笑... :-)
    試了一下.還真的是這個哩.
    謎團解開的感覺真是不錯,真的是太感謝了

    這值也未免太GGYY了, 一點特徵也沒有.
    可否提示一下,這值是用什麼方法找到的或是要找那裡.

    回覆刪除
  16. 版主大大
    看到你又有空留言了
    真的很感動
    我一直在等你耶
    接下來還有水族箱等你哦
    哈哈

    回覆刪除
  17. to Aknine:
    用的方法不方便公開的說,
    只能給你提示,
    ActionScript有個叫metadata annotation的東西,
    抓得到它,就能看得到key

    回覆刪除
  18. 感謝提示啦,你已經說得夠多了,查了一下,大概知道你所說的東西是做何用途。留一點讓我自己享受一下解謎的樂趣。

    之前沒寫過ActionScript,只是為了寫一些自己想要的功能,減少消耗時間在農場上,沒想到時間越耗越多。要停住不玩了吧,真的太耗時間了。玩了6個月開農,想想還真是浪費不少時間,該專心辦正事了。

    拯救地球的任務就交給你了,哈。

    PS: 還是要多謝悠閒農夫,否則我還不知道curl這麼好用。

    回覆刪除
  19. 版主大大
    別再熬夜了
    身體"愛狗"呀

    回覆刪除
  20. 版主安安

    想跟您報知
    悠閒農夫似乎被開農封鎖了

    目前狀況:
    一般種植農作物只要未登出可繼續使用,重新登入施肥時就會出現
    1029:has been forbidden!
    而昨天下午洗彩豆的全被踢出也是出現同樣錯誤訊息~
    再次登入也無法使用,另被踢出後從FB登入也需等約5~10分鐘
    才能再登入農場,以上

    若板大您有時間時再麻煩請您看一下,謝謝~

    回覆刪除
  21. 在悠農的專屬網站
    很多很多回覆..
    請板大有控去看一下..
    1029狀況 無力感十足阿:(

    回覆刪除
  22. 载入農場資料失敗
    1029
    has been forbidden!


    @@請問以上的訊息是????
    重開農夫無效
    重開機無效
    重試無效

    然後 取消會出現........

    0x90909090 指令參考的 0x90909090 記憶體
    該記憶體不能為read
    請按確定終止程式
    請按取消進行程式偵錯

    就是醬~~~~3Q

    回覆刪除
  23. 版主 能更新嗎?

    好像被擋掉了

    回覆刪除
  24. 版主 可以把去別人農場的時間改久一點嗎=0=
    因為一分鐘按滑鼠太快 會被鎖一小時
    ㄖㄖ

    回覆刪除
  25. 叫資訊系教授也不見得寫的出來這種程式,大大你真強^^"

    回覆刪除
  26. 我想請問一下為合都會出現失敗1029?? 怎處理ㄋ? 有解決ㄉ方法ㄇ? 大大

    回覆刪除
  27. 請問最近還有更新的麻?
    常常會跑到斷線@@"

    回覆刪除
  28. 請問農夫還會更新嗎?外掛似乎全掛了...都不能使用....何時會更新...

    回覆刪除
  29. 俺 這邊說一下 會出現失敗的原因 再開啟農夫 一切都正常 跑的都很正常 只要去鋤草 或是澆水過不久或一下子 就會出現失敗的訊息 那是因為 開農官方自動開啟偵測 只要動作太頻繁就會暫時封鎖帳號1小時左右 所以會出現斷線或是錯誤的訊息 那是各位大大們的關係 並不是程式出錯...這是開農隱藏的偵測...所以..能跑就好 別再去偷菜了... 洗豆跟拔菜頭都一樣太頻繁都會被封鎖

    回覆刪除
  30. 你好!板大今天維修後 在開程式都會錯誤 跳掉 直接關閉

    回覆刪除
  31. 12月20日晚上維修後,無法載入朋友清單,已經完全無法使用了。版大加油,等你的好消息。

    回覆刪除
  32. 您好,最近開心農場有改版。一直不穩定。直到今天好像無法使用外掛。好像全都掛掉了。是否請大大能在更新版本可以使用。謝謝大大一直提供那麼好的工具,非常感謝。

    回覆刪除
  33. 所有的開心農場外掛程式都被系統工程師群消滅了!連最後僅存的"悠閒農夫"也在"1217事件"孤軍奮戰中被擊敗了!熱切期盼"悠閒農夫"能敗部復活。衷心感謝您無私的付出! Tony

    回覆刪除
  34. 感覺不可能復活囉 這次官方已經鎖定囉 ~ 聽謀論壇說 有個朋友跟作者認識 他說這次防護較強 要再次讓悠閒農夫存活機率很小

    回覆刪除
  35. 仔細比對之前和現在的載入方式,復活其實不難

    有一個問題反而要思考,這樣鬥法下去,真的很累. 且也違作者自己的初衷的...悠閒

    嘿,真是難為喔.

    回覆刪除
  36. 終於有"悠閒農夫"可用了!
    厲害!
    佩服!佩服!
    感謝!感謝!感謝!

    Tony

    回覆刪除
  37. 本不想再碰,不過實在是升級太慢了,還是撩下去,依版主的提示,自己補寫了一個Java版的挖礦程式,在此感謝告知那個K啦.

    回覆刪除
  38. Hello 2011新年好
    今天仔細看了給好友送禮部分的資料,總算了解悠農為何還未開發這功能,要編資料真的是的多啊。

    算了,目前能自動把礦坑全部處理完就對我來說就夠了。已經省了很多時間。再改進下去,遊戲的樂趣可能都沒了。

    這陣子寫下來也對AMF的了解增加不少,算是一種收穫吧。 哈哈,天曉得! 那天工作上會用到也說不定.

    新年愉快.

    回覆刪除
  39. 風大感謝您百忙中抽空又完成了0.6.1.14,可是這依然是沿襲0.6.1.12版而來的,使用多開依然當得很嚴重,反正現在也不能燒彩豆,可否將0.6.1.11復活,這一版最穩,應該不用花您太多時間就可復活,希望您能聽得進去!感謝您~

    回覆刪除
  40. 恭賀悠閒農夫生日快樂~
    快樂!!!!!

    回覆刪除
  41. 想想如果悠農把燒蘿蔔功能改好後.........

    仔細算了一下1秒處理一個動作的控制,如果要燒蘿蔔,一小時理論上只能做3600個動作,種+挖動作合起來,也就是1小時最多只能燒1800個=10800 exp。

    和以前比差真多。真是懷念狂燒蘿蔔的日子。


    -哭泣的蘿蔔農

    回覆刪除
  42. 從0.6.1.14版開始到現在用了幾天了
    結果發現還是頻頻當掉
    我想問一下天使之風大大

    能否改為一個好友巡視完再換另一個好友(包含幫忙 偷菜 偷東西)
    我看目前當機狀況好像是一次一堆動作而當掉
    不知道我的想法是否正確

    回覆刪除
  43. 作者已經移除這則留言。

    回覆刪除
  44. To Aknine & 天使之風大大:
    以"Happy Boti"的巡視朋友順序為:
    自己農場 (收成農作物和寵物 除草和殺蟲)
    朋友1 (收成農作物和寵物 除草和殺蟲)
    朋友2 (收成農作物和寵物 除草和殺蟲)
    .....
    朋友END (收成農作物和寵物 除草和殺蟲)
    自己農場 (收成農作物和寵物 除草和殺蟲)
    所以我才想說不知道能否以此順序

    回覆刪除
  45. To Aknine :
    請問蘿蔔1天燒30000個是使用悠閒農夫嗎?還是使用其它工具,可否透露一下!感恩~

    回覆刪除
  46. To 追夢高手
    如果要改成這種巡法,那就不宜使用5分鐘定時的功能,這恐怕要改很多。

    定時查看方式,朋友太多一定巡不完,採定時的方式,對判斷熟成與狀態有其便利性。

    如果要按你所說的方式,真要設計的話,那就是一直不斷巡下去,然後5mins 回來看一下自己的田,不過這改法會操掛作者,你要看他想不想改啦。

    除了動作次數限制問題,還有一個是偷東西的問題,一堆用外掛的人把朋友東西偷光光,且偷得太勤了,就遊戲管理上這會讓其他玩家很不爽滴...

    所以在設計上,我只有處理自己的農場,只是採取一個比較奇怪的做法
    1.空出一塊田來燒蘿蔔,
    2.其他的地正常栽種、澆灌

    為何這樣做,原因就是以1個地和30個地燒,所用的總時間是一樣,因為快不起來(那個一次鏟除的方式有被偵測的風險,不採用)

    這樣至少不會因為燒東西導致停產。

    回覆刪除

  47. 我少寫一行
    自己農場 (收成農作物和寵物 除草和殺蟲)
    朋友1 (收成農作物和寵物 除草和殺蟲)
    朋友2 (收成農作物和寵物 除草和殺蟲)
    .....
    朋友END (收成農作物和寵物 除草和殺蟲)
    自己農場 (收成農作物和寵物 除草和殺蟲)
    -----休息五分鐘-----
    自己農場 (收成農作物和寵物 除草和殺蟲)
    朋友1 (收成農作物和寵物 除草和殺蟲)
    朋友2 (收成農作物和寵物 除草和殺蟲)
    .....
    朋友END (收成農作物和寵物 除草和殺蟲)
    自己農場 (收成農作物和寵物 除草和殺蟲)
    -----休息五分鐘-----

    這樣才對

    回覆刪除
  48. 個人認為0.6.1.14版會不穩的原因之ㄧ,可能和悠閒的"時間"有關~!因為,只要悠閒的"時間"與電腦的"時間"不同時,悠閒就會跳出一些錯誤的訊息。所以,個人認為有可能和"時間"有些關係~!

    回覆刪除
  49. 自己寫完了才知道,版主你還真是利害,判斷成熟和施肥的條件還真是多,太久沒寫程式,搞了好久才把這部分整理好,不過跑起來效率不是很好,程式冗綴太多。

    算了,可用就好,目前至少能買,施種, 澆肥,殺蟲, 送收禮,礦場挖到沒力. (巡好友農場功能.不打算寫.實在不敢再把朋友搞毛了)

    再把賣東西寫好, 就可以放著不用管了.

    不過..這樣好像也把遊戲的樂趣徹底搞砸了. 哈哈

    週末愉快 

    回覆刪除
  50. 持續被鎖帳號中.....

    回覆刪除
  51. 除了悠農的功能外, 另加一塊地專門燒蘿蔔、多重proxy、自動賣出作物、自動送/收好友每日禮物,挖礦自動補充体力、再加一個快速昇級的特殊功能.

    現在是全自動在跑,感覺好像一點樂趣都沒了,只是在看數字。我自己寫的程式把遊戲的樂趣全搞爛了,現在真的是覺得很沒意思。

    今天把各分身最後一批農作收成後,收山了。

    最後,再次感謝告知那個關鍵點,讓我後續的程式撰寫可以展開,有個題目可以來玩,學新東西(AMF)就有趣多了。

    (目前正在利用AMF來規劃一個系統架構,用於工作上的資料傳遞。)

    新年愉快

    @深圳

    (悠農不支援Proxy,在中國大陸無法直接使用,這原因竟是促使個人自行開發的源頭,想想真的是很神奇,天下事因緣難料啊。)

    回覆刪除
  52. 板大,現在"悠閒"的動作已經是很慢了~!但為何還是會被鎖呢?

    回覆刪除
  53. 各位能幫我解答嗎

    我一直出現這個東西

    " 處理 XXX 的農場-失敗--100,與伺服器溝通失敗。(Couldn't connect to server) "

    可是 我上官網 很正常 上悠閒的開心網頁也是正常

    她那段會跑一跑 又好了

    可是我偷的東西都很少 不知道是不是因為出新的東西

    2011/01/26 01:20:07->偷 XXX 的農作物 (1,0)-失敗-1104:crop not immatual.
    2011/01/26 01:23:56->偷 XXX 的 雞蛋-失敗-1115:steal:animal not fed

    還有這兩個 有人知道的話 請跟我說一下 感恩

    我會再去悠閒的好友跑一次


    請問這是甚麼原因

    回覆刪除
  54. 關於悠閒農夫

    請問這程式是不是大部分都完成了呢?
    因為我還是很習慣的每天上來檢查更新版本^^
    另外跟你順便提醒
    開心論壇已經正式關閉
    http://www.wretch.cc/blog/jorden2895/15664351
    這是說明文
    感謝你的付出
    希望你加我及時:jorden2895
               開心論壇-免費軟件-版主-jorden2895留

    回覆刪除
  55. 你好,请问如何在VS2008里通过加载json_vc71_libmtd.lib来使用jsoncpp?
    我通过网上的资料,能够通过直接拷贝jsoncpp的源代码到工程中来实现使用jsoncpp,但是这样多有不便,请问该如何使用加载lib的方法呢?
    谢谢赐教!

    回覆刪除
  56. 天使大大~3/18號開心農場把好友數據給更改掉了
    要麻煩你重新設定一下嚕!~

    回覆刪除
  57. 天使大大~~近來更新的版本幾乎只要開大約5分鐘就會被封鎖~~但是我之前一直沿用1.14版的~~卻發現可以一直偷下去也不會被封鎖~~但是程式卻會自行關閉~~如果不理他卻還是可以一直偷下去~~且彩豆也可以燒~~時間設為1000毫秒~~雖然有時會出現施肥略過會直接鏟掉~~但是大致上不影響燒彩豆的功能~~可是就在幾天前1.14版進不去連1.16版也進不去~~後來版大才又推出1.17版~~但是用了之後發覺會被鎖~~所以希望版大是否能將1.14版的程式修改一下好友數據使其能順利登陸~~拜託了~~最後再次的感謝版大寫這程式給大家使用~~感謝

    回覆刪除
  58. 天使大大辛苦了
    不知能否像1.14版之燒蘿蔔.燒彩豆的功能
    感激中~~~

    回覆刪除
  59. to 拉登-jorden2895
    應該還會開發收機器生產的物品的功能,不過目前沒時間。

    to Mic Fun
    不是很了解你的問題點是在哪,是不會加lib嗎??
    還是只是不會加json的lib??
    要使用jsoncpp的lib,跟使用其他的lib方法一樣呀...
    1.告訴VS2008在編譯時要到哪裡找jsoncpp的head檔
    2.把jsoncpp的lib所在路徑加入編譯器的link path
    3.告訴VS2008在link時要加上jsoncpp的lib

    回覆刪除
  60. 希望也能開發自動挖礦補藥水 自動送每日禮物

    回覆刪除
  61. 悠閒農夫作者您好:

    我發現只要在巡視一次內,如果連續作很多動作,就會被系統鎖定。
    而只要減少巡視好友的數量,就可以避免被系統鎖定,提供大家參考。謝謝您無私的貢獻!

    Tony

    回覆刪除
  62. 悠閒農夫真的很贊!
    雖說我是新玩家 但每天澆菜殺蟲的經驗也是很可觀的!

    不知道作者有無要開發別的遊戲程式呢?
    例如 快樂島主

    有人再用 但好像是自己寫的程式不外流

    回覆刪除
  63. 昨日黑農又改版了!

    這次改版的錯誤訊息如下:

    載入農場頁面....
    與農場溝通失敗。(URL using bad/illegal format or missing URL)

    從facebook是可以進的了…

    懇請大大能抽空改版,感恩您~!

    回覆刪除
  64. 請問使用悠閒農夫後出現了以下的訊息
    2011/04/14 18:41:57->載入facebook頁面....
    2011/04/14 18:41:58->載入農場頁面....
    與農場溝通失敗。(URL using bad/illegal format or missing URL
    不知道為何這樣?
    難道是被臉書抓了嗎?
    但卻能從臉書正常進入農場喔
    使用其他朋友的帳號則能正常使用悠閒農夫
    所以想請問作者這是遇到什麼問題?有無辦法解決呢?
    謝謝您,還請不吝指正

    回覆刪除
  65. 天使之風您好:
    您的「悠閒農夫」幫了我很大的忙,非常感謝您。
    我也是資訊工程系的學生,對悠閒農夫的程式非常有興趣,
    再加上現在開心農場又改版了,悠閒農夫目前無法使用,
    如果您願意開放悠閒農夫原始碼,
    我想學習您的程式,並且維護這個悠閒農夫程式,
    不知您覺得怎麼樣呢?
    我的信箱:james732@gmail.com

    回覆刪除
  66. 距黑農此次改版以過數天,仍不見修正後之休閒農夫,不知是否有意修正此次出現的bug?

    回覆刪除
  67. 55
    It is about 5 days...
    waiting...

    回覆刪除
  68. to james:
    「悠閒農夫」的程式架構已不適合目前的農場,建議你還是自己寫一個會比較好;另外不會開放農夫的原始碼,畢竟這是外掛,開放了的話,那農場就會有辦法針對性的改版,到時要改農夫就更麻煩。

    to 其他各位:
    跟悠閒農夫有關的問題,請到農夫的那篇看回答。

    回覆刪除
  69. 叫資訊系教授寫,寫不出來把教授當掉~~~哈哈!

    回覆刪除
  70. to 大 大
    我不會如何用WinPcap / WinDump
    teach me plz
    I want to write a bot by myself><

    回覆刪除