就是你输入msn,和密码,网站就会给你所有的msn好友发邮件,发消息,邀请加入。
请问这是怎么做的
[b]问题补充:[/b]
PAN_JAVA你可以说的详细点么,那个接口我也没找到啊InviteService
[b]问题补充:[/b]
这么说不跳转的,都是有可能被记录id和密码的了吧?现在什么校内,开心,都是不跳转的吧,都有可能被记录id和密码
直接用那个韩国人写的jar实际上是模拟msn客户端,如果你登录了,用户在线的msn会挂掉,而且你可以顺便把用户的口令记下来,当然如果用户不介意口令的安全你也可以用这种方法
真正的方法是使用live的contact api读取msn好友,用户会跳转到live登录页面,登录后再跳转回你的网站,你根据返回的secret key去live验证,如果通过了就可以获得xml格式的好友列表,含好友名和email
你可以看下面的例子:
http://www.365jizhang.com/api/liveInvite.do
(需要先登录网站,然后点右上角的邀请好友)
具体参考dev.live.com
就是用邮件的协议和msn的协议
发邮件自然就是比如java的话,就用javamail来实现
发消息,邀请加入之类就应该是要实现msn协议的包来做
需要使用http://im.live.cn/imme/这个,将代码嵌套在你的网页中
MSN的消息协议是公开的,应该有类似获取用户列表之类的功能.请LZ自己Google下MSN协议.
Java方面貌似以前有个JMSN的开源项目,不过是韩国人做的,文档全韩文.LZ有兴趣可自行研究.其他的开源包应该也有,不过暂无时间为LZ一一找来.见谅,希望有帮助.
[url]http://sourceforge.net/projects/java-jml/files/java-jml/jml-1.0b3-full.jar/download[/url]
下载jml-1.0b3-full.jar
[code="java"]public class MsnInviteService implements InviteService {
private static Logger logger = Logger.getLogger(MsnInviteService.class);
private String email;
private String password;
private static MsnMessenger messenger;
public MsnInviteService(String email, String password) {
this.email = email;
this.password = password;
start();
}
public void start() {
messenger = MsnMessengerFactory.createMsnMessenger(email, password);
messenger
.setSupportedProtocol(new MsnProtocol[] { MsnProtocol.MSNP11 });
messenger.getOwner().setInitStatus(MsnUserStatus.ONLINE);
messenger.setLogIncoming(false);
messenger.setLogOutgoing(false);
messenger.login();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
InviteService a = new MsnInviteService("**************", "********");
/*//List<InviteFriend> list = a.getInviteFriendlList();
for (InviteFriend ifd : list) {
System.out.println(ifd.getName());
}*/
}
public List<InviteFriend> getInviteFriendlList(int userId) {
// TODO Auto-generated method stub
List<InviteFriend> list = new ArrayList<InviteFriend>();
MsnContact[] cons = messenger.getContactList().getContacts();
for (MsnContact con : cons) {
System.out.println(con.getDisplayName());
System.out.println(con.getEmail().toString());
}
messenger.logout();
InviteManageService.getInstance().saveVipuserFriendList(userId, InviteService.INVITE_MSN, list);
return list;
}
}[/code]
jar 包发给你了,我现在项目也正好需要这个功能.
InviteService 是哪里的接口?我怎么在jar包里面找不到
是你自己写的吗?
InviteService 是我自己写的一个接口
[color=red]implements InviteService[/color] 不要这个
[code="java"]package net.sf.jml.example;
import net.sf.jml.MsnContact;
import net.sf.jml.MsnMessenger;
import net.sf.jml.MsnProtocol;
import net.sf.jml.MsnSwitchboard;
import net.sf.jml.MsnUserStatus;
import net.sf.jml.event.MsnAdapter;
import net.sf.jml.event.MsnContactListAdapter;
import net.sf.jml.impl.MsnContactImpl;
import net.sf.jml.impl.MsnMessengerFactory;
import net.sf.jml.message.MsnControlMessage;
import net.sf.jml.message.MsnDatacastMessage;
import net.sf.jml.message.MsnInstantMessage;
import net.sf.jml.message.MsnSystemMessage;
import net.sf.jml.message.MsnUnknownMessage;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
@author Roger Chen
*/
public class SimpleMsn
{
private static final Log log = LogFactory.getLog(SimpleMsn.class);
private String email;
private String password;
private MsnMessenger messenger;
public SimpleMsn(String email, String password)
{
this.email = email;
this.password = password;
}
public void start()
{
messenger = MsnMessengerFactory.createMsnMessenger(email,
password);
messenger
.setSupportedProtocol(new MsnProtocol[] { MsnProtocol.MSNP11 });
messenger.getOwner().setInitStatus(MsnUserStatus.ONLINE);
messenger.setLogIncoming(true);
messenger.setLogOutgoing(true);
messenger.addListener(new MsnListener());
messenger.login();
messenger.addContactListListener(new MsnContactListAdapter()
{
public void contactStatusChanged(MsnMessenger msn, MsnContact con)
{
System.out.println(con.getDisplayName());
System.out.println(con.getPersonalMessage());
System.out.println(((MsnContactImpl) con).getCurrentMedia());
}
public void contactListInitCompleted(MsnMessenger messenger)
{
listContacts();
}
});
try
{
Thread.sleep(10000);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
messenger.logout();
messenger.login();
// messenger.getOwner().setDisplayName("Blah");
// messenger.getOwner().getDisplayName();
}
private void listContacts()
{
MsnContact[] cons = messenger.getContactList().getContacts();
for (MsnContact con : cons) {
System.out.println(con.getDisplayName());
System.out.println(con.getEmail());
System.out.println(con.getStatus());
System.out.println(con.getPersonalMessage());
}
}
public static void main(String[] args) throws Exception
{
new SimpleMsn("email", "password").start();
}
private static class MsnListener extends MsnAdapter
{
public void exceptionCaught(MsnMessenger messenger, Throwable throwable)
{
log.error(messenger + throwable.toString(), throwable);
}
public void loginCompleted(MsnMessenger messenger)
{
log.info(messenger + " login complete ");
}
public void logout(MsnMessenger messenger)
{
log.info(messenger + " logout");
}
public void instantMessageReceived(MsnSwitchboard switchboard,
MsnInstantMessage message, MsnContact friend)
{
log.info(switchboard + " recv instant message " + message);
switchboard.sendMessage(message, false);
}
public void systemMessageReceived(MsnMessenger messenger,
MsnSystemMessage message)
{
log.info(messenger + " recv system message " + message);
}
public void controlMessageReceived(MsnSwitchboard switchboard,
MsnControlMessage message, MsnContact contact)
{
log.info(switchboard + " recv control message from "
+ contact.getEmail());
switchboard.sendMessage(message, false);
}
public void datacastMessageReceived(MsnSwitchboard switchboard,
MsnDatacastMessage message, MsnContact friend)
{
log.info(switchboard + " recv datacast message " + message);
switchboard.sendMessage(message, false);
}
public void unknownMessageReceived(MsnSwitchboard switchboard,
MsnUnknownMessage message, MsnContact friend)
{
log.info(switchboard + " recv unknown message " + message);
}
public void contactListInitCompleted(MsnMessenger messenger)
{
log.info(messenger + " contact list init completeted");
}
public void contactListSyncCompleted(MsnMessenger messenger)
{
log.info(messenger + " contact list sync completed");
}
public void contactStatusChanged(MsnMessenger messenger,
MsnContact friend)
{
log.info(messenger + " friend " + friend.getEmail()
+ " status changed from " + friend.getOldStatus() + " to "
+ friend.getStatus());
}
public void ownerStatusChanged(MsnMessenger messenger)
{
log.info(messenger + " status changed from "
+ messenger.getOwner().getOldStatus() + " to "
+ messenger.getOwner().getStatus());
}
public void contactAddedMe(MsnMessenger messenger, MsnContact friend)
{
log.info(friend.getEmail() + " add " + messenger);
}
public void contactRemovedMe(MsnMessenger messenger, MsnContact friend)
{
log.info(friend.getEmail() + " remove " + messenger);
}
public void switchboardClosed(MsnSwitchboard switchboard)
{
log.info(switchboard + " closed");
}
public void switchboardStarted(MsnSwitchboard switchboard)
{
log.info(switchboard + " started");
}
public void contactJoinSwitchboard(MsnSwitchboard switchboard,
MsnContact friend)
{
log.info(friend.getEmail() + " join " + switchboard);
}
public void contactLeaveSwitchboard(MsnSwitchboard switchboard,
MsnContact friend)
{
log.info(friend.getEmail() + " leave " + switchboard);
}
}
}[/code]
自己带的例子
[color=red]这么说不跳转的,都是有可能被记录id和密码的了吧?现在什么校内,开心,都是不跳转的吧,都有可能被记录id和密码 [/color]
有可能.这个不好说.