使用JAVA導入某個MSN帳號的好友列表併發送消息

導入信息的關鍵是如何對msn的通訊協議進行封裝,這裏會有兩個選擇,一個使用openfire(xmlapp協議),另外就是使用jml,前者配置起來相對複雜,但兼容性較好,openfire能夠和任何im進行通訊,包括(skype、msn、smalltalk等)、後者對msn和smalltalk比較好,這裏只介紹如何使用jml導入用戶的msn好友列表.

        
(比較鬱悶的是,qq的通信協議隨着版本的升級不斷更改,因此對qq做類似的功能可能不太現實,可能需要和騰訊合作了呵呵).
 
        
jml(Java Msn Manager Liberary)是sourceforge上的一個開源項目,相關jar包可在以下地址中下載:
    
http://huqilong.blog.51cto.com/attachment/200810/53638_1223373939.bmp
建議將其源碼一塊下載下來,因爲需要裏面的三個包支持包,jml-src-1.0b3.zip,將lib目錄下的jar包copy到你的項目中,然後將jml-1.0b-full.jar包和上述三個包一起引入項目,現在可以寫我們的代碼了。其實直接copy源代碼下的example/的兩個類即可,他們分別是:BasicMessenger和SimpleMsn,直接運行simpleMsn就可以了,但是它會報錯,原因是你需要傳送msn的賬戶名和密碼:代碼如下所示:
 
修改main函數:
 
public static void main(String[] args) throws Exception
 {
  new SimpleMsn("123123123123@hotmail.com", "*********").start();
 }
運行下就可以得到我們需要的東東了。會在後臺打印,這裏面有很多監聽接口,比如當登錄成功時如何如何,當初始化完畢時如何如何等等,需要你自己來搞定了,我們取得用戶列表的代碼在這裏:
 
private void listContacts()
 {
  MsnContact[] cons = messenger.getContactList().getContacts();
  System.out.println("您現在有:"+cons.length+"個聯繫人,列表如下!");
        for (MsnContact con : cons) {
            System.out.println("姓名:"+con.getDisplayName());
            System.out.println("email地址:"+con.getEmail());
            System.out.println("在線狀態:"+con.getStatus());
            if (con.getStatus() != MsnUserStatus.OFFLINE) {
                System.out.print(con.getEmail()+"開始導入信息");
                messenger.sendText(con.getEmail(), "hello,這是測試信息,並無惡意!");
            }
//            System.out.println(con.getPersonalMessage());
        }
    }
 
 
呵呵,簡單吧,如果要導入qq帳戶的話用這個就不行了。等我研究出來再說吧!
 
     
對他們的包解壓然後加入我的一個小程序,個人根絕還是比較方便的,喜歡的話下載吧:
 
 
以下是使用方法:
 
 
 
/**
 * 爲了讓msn徹底退出,這裏採用調用子進程的方法
 * 啓動msn
 * 給子進程傳遞三個運行時參數
 * msn帳號   msn密碼  和要傳遞的內容
 * 子進程取出的好友email列表通過進程輸入流讀出(對於父進程來說相當於輸出流)
 * @author huql
 *如果不這樣調用,內存可能不能釋放,這是個問題
 */
public static void main(String args[]){ 
 System.getenv();
 String msnCount=[email protected];
    String password="19820000";
    String message="你好,歡迎訪問www.17k.com,更多精彩盡在其中!";
    String command="java -cp /"e:/workspace/user.17k.com/web/WEB-INF/lib/"/jml.jar; net.sf.jml.example.SimpleMsn "+msnCount+" "+password+" "+message;
 try {
  Process p=Runtime.getRuntime().exec(command);
  BufferedInputStream in = new BufferedInputStream(p.getInputStream());
  BufferedReader br = new BufferedReader(new InputStreamReader(in));
  String content=br.readLine();
  while(content!=null){
  System.out.println(content);
  content=br.readLine();
  }
 } catch (IOException e) {
  e.printStackTrace();
 }
 System.out.println("continue to excute other program...............");
}
發佈了74 篇原創文章 · 獲贊 3 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章