Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

msn.class.php v1.4, We can talk to Yahoo now!
post by tommy @ 02 四月, 2007 09:24

修改之前發送 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");

這樣子應該可以避免這個問題發生. 

Del.icio.us Furl HEMiDEMi Technorati MyShare
commons icon [1] Re:msn.class.php v1.4, We can talk to Yahoo now! [ 回覆 ]

您好:
是否有適合於windows base版本的方式,一樣是apache+PHP,還有是否可發送到不是聯絡人的即時通上

commons icon [2] Re:msn.class.php v1.4, We can talk to Yahoo now! [ 回覆 ]

本來就沒有限定在 linux 上頭才能用. 只要有 php, 且你的 php 有所需要的那些模組, 就可以使用.
不過, 如果你有用到 doLoop() 的功能, 要改一下路徑與 chmod() 的部份吧. 如果只是要發送訊息, 用 sendMessage() 就可以做到了. (只是 sendMessage() 會每次都登入再登出, 據說太頻繁會被 MSN 給擋掉一陣子連不上)

commons icon [3] Re:msn.class.php v1.4, We can talk to Yahoo now! [ 回覆 ]

再請教:
是否有已完成的範例網頁可供參考?
謝謝您的幫忙!!

commons icon [4] Re:msn.class.php v1.4, We can talk to Yahoo now! [ 回覆 ]

範例? 你可能先要去學些 php 吧. 懂了 php 之後, 在 msn.class.php 的最開頭有段說明應該就可以看的懂了. 也會知道要怎麼用.

commons icon [5] Re:msn.class.php v1.4, We can talk to Yahoo now! [ 回覆 ]

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 裡面的完整的錯誤訊息寄給你看呢?...

commons icon [6] Re:msn.class.php v1.4, We can talk to Yahoo now! [ 回覆 ]

那個 SQL 的錯誤我也碰過, 我使用的幾個帳號中, 有一個也是刪除不掉.
由於每次登入時都會嘗試把 pending 的名單再增加並刪除一次, 因為刪除會失敗, 所以每次都會再做一次.

這個錯誤是 server 端的問題吧. 並不會影響實際上的運作. (如果不希望出現這個訊息, 可以考慮如果存在於 pending 的名單上, 也存在於其他的名單時, 就不管這個 pending 的名單.)

commons icon [7] Re:msn.class.php v1.4, We can talk to Yahoo now! [ 回覆 ]

這個真的蠻實用的 , 不過發現的確沒辦法
在windows上面跑 , 因為 windows 不支援
pcntl系列的指令.

commons icon [8] Re:msn.class.php v1.4, We can talk to Yahoo now! [ 回覆 ]

pcntl 的部份只是 msnbot.php 用來處理 fork 的部份. 只要把這部份跳過不執行就可以了. 其他的部份, 應該都有支援才對.

commons icon [9] Re:msn.class.php v1.4, We can talk to Yahoo now! [ 回覆 ]

將 pcntl刪除後 , 在windows下跑
還是有另一個問題, 就是
windows 沒辦法用 posix_getpid 來取得
程式的 pid 碼, 這部分不知是否有好方法

commons icon [10] Re:msn.class.php v1.4, We can talk to Yahoo now! [ 回覆 ]

自己定義一個 posix_getpid() 來用就好了. 看是要傳回空字串或任何數字都可以.

commons icon [11] Re:msn.class.php v1.4, We can talk to Yahoo now! [ 回覆 ]

如果要在 windows 下頭使用, 請抓 1.6 版的回去. 我修正了一下可能會有問題的地方. 在 php 5.2.3 中測試過, 可以正常的使用.

迴響
暱稱:
標題:
個人網頁:
電子郵件:
authimage

迴響

  

Bad Behavior 已經阻擋了 96 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS