修改之前發送 MSN 的 php calss. 修正一些 bug, 並加上與 Yahoo 即時通互傳的功能.
檔案放於: http://www.teatime.com.tw/~tommy/files/msnclass14.7z
或者抓最新的版本: http://www.teatime.com.tw/~tommy/files/msnclass.7z
異動說明:
- 更改逾時的偵測方式, 只針對每兩個指令之間的時間來計算.
- 對於 curl 的運作, 只有在除錯模式下才顯示 header 的內容.
- 如果在登入 login.live.com 時, 收到 redirect 的 URL 時, 試著使用指定的 URL 再登入一次.
- 修正在處理 .msn 檔時, 對於 TO: 的空白處理造成離線訊息無法使用的問題.
- 修正在處理離線訊息時, 因為執行超過一天, ticket 失效, 無法傳送的問題.
- 直接使用 MSNP15 取得聯絡人名單, 不必再透過 MSNP9 了.
- 處理 ADD/REM (MSNP9) ADL/RML (MSNP15) 的指令, 可以自動接受別人加入名單, 並也把對方加入本身的名單中.
- 支援 WLM 8.1 與 Yahoo 8.1 之間互相傳訊的功能 (含離線訊息).
- 如果無法正確即時傳送訊息, 會利用離線訊息再送一次.
- 可以讀取離線訊息, 並且回覆.
- 處理過後的 .msn 檔案, 可以選擇不刪除而移到 backup 的目錄中.
除了 bug 的修正之後, 主要是利用 oSpy, 取得一些在 WLM 8.1 使用的 MSNP15 相關的一些 SOAP 運作方式, 所以, 目前我們可以直接利用 MSNP15 來取得聯絡人的名單, 也可以正確的新增或刪除聯絡人 (程式目前沒處理刪除的部份), 對於離線訊息的讀取, 也可以正常的運作. 另外, 也加上對於 WLM/Yahoo 之間互相傳訊的功能.
在 msnbot.php 上頭, 可以自訂函式來處理別人加入名單與移除名單的事件. 也移除利用 MSNP9 取得名單的功能. 另外把設定移到 config.php 中. 還有... 如果你有自訂處理訊息的功能, 如果傳回空字串, 就表示不用回傳訊息. 如果聯絡人中也有 bot 之後的程式, 記得排除在外, 免得 bot 之間一直互相回覆訊息. (當然, 如果你有利用這個功能來執行伺服器上的一些指令, 記得要過濾傳訊者, 注意一下安全的問題)
對了, 在 MSN 的定義中, 1 是屬於 MSN/WLM 的網路訊息. 32 是 Yahoo 即時通. 所以在收訊者的 email 上頭, 我在最後加上 @n 的東西, 來區別是屬於那一種的帳號. 如果沒有這個多出來的 @n 就表示是屬於 MSN 的帳號, 如果是 @1 也是表示屬於 MSN 的帳號. 而 @32 就表示屬於 Yahoo 即時通的帳號.
2007/04/02:
如果你使用的 alias 中有空白或其他不允許的字元, 會無法正常連線. 解決的方法有下面兩種:
- 就不要用空白或其他不合法的字元吧.
- 在 msn.class.php 中, 找一下 PRP 這個指令. 在送出指令前, 加上一行指令處理一下, 如:
// NS: >>> PRP {id} MFN name
if ($alias == '') $alias = $user;
$alias = rawurlencode($alias);
$this->writeln("PRP $this->id MFN $alias");
這樣子應該可以避免這個問題發生.
您好:
是否有適合於windows base版本的方式,一樣是apache+PHP,還有是否可發送到不是聯絡人的即時通上
本來就沒有限定在 linux 上頭才能用. 只要有 php, 且你的 php 有所需要的那些模組, 就可以使用.
不過, 如果你有用到 doLoop() 的功能, 要改一下路徑與 chmod() 的部份吧. 如果只是要發送訊息, 用 sendMessage() 就可以做到了. (只是 sendMessage() 會每次都登入再登出, 據說太頻繁會被 MSN 給擋掉一陣子連不上)
再請教:
是否有已完成的範例網頁可供參考?
謝謝您的幫忙!!
範例? 你可能先要去學些 php 吧. 懂了 php 之後, 在 msn.class.php 的最開頭有段說明應該就可以看的懂了. 也會知道要怎麼用.
Hello...我使用 msnbot 機器人撰寫了一個 twitter 的 msn 機器人,最近發現機器人的 log 中會有這樣的訊息...
*** can't delete member (network: 1) [email protected] (9) to Pending, error code: soap:Ser
ver, Error While Processing in SQL
好像是 deleteMember 的時候有錯誤,我是否可以把debug 裡面的完整的錯誤訊息寄給你看呢?...
那個 SQL 的錯誤我也碰過, 我使用的幾個帳號中, 有一個也是刪除不掉.
由於每次登入時都會嘗試把 pending 的名單再增加並刪除一次, 因為刪除會失敗, 所以每次都會再做一次.
這個錯誤是 server 端的問題吧. 並不會影響實際上的運作. (如果不希望出現這個訊息, 可以考慮如果存在於 pending 的名單上, 也存在於其他的名單時, 就不管這個 pending 的名單.)
這個真的蠻實用的 , 不過發現的確沒辦法
在windows上面跑 , 因為 windows 不支援
pcntl系列的指令.
pcntl 的部份只是 msnbot.php 用來處理 fork 的部份. 只要把這部份跳過不執行就可以了. 其他的部份, 應該都有支援才對.
將 pcntl刪除後 , 在windows下跑
還是有另一個問題, 就是
windows 沒辦法用 posix_getpid 來取得
程式的 pid 碼, 這部分不知是否有好方法
自己定義一個 posix_getpid() 來用就好了. 看是要傳回空字串或任何數字都可以.
如果要在 windows 下頭使用, 請抓 1.6 版的回去. 我修正了一下可能會有問題的地方. 在 php 5.2.3 中測試過, 可以正常的使用.