2011-01-25 27 views

回答

0

通过使用Smack连接到Google日历,你的意思是什么? Smack将允许您连接到XMPP服务器,这是一种即时消息传递手段。如果你想要类似http://clockwerx.blogspot.com/2008/10/interacting-with-google-calendar-via.html的东西,那么有两个方面:实现机器人,然后连接到它并与它交谈。 但从总体上看,这里有一个代码示例,可以让你连接到GTalk的:

import org.jivesoftware.smack.Chat; 
import org.jivesoftware.smack.ChatManager; 
import org.jivesoftware.smack.ConnectionConfiguration; 
import org.jivesoftware.smack.Roster; 
import org.jivesoftware.smack.SmackConfiguration; 
import org.jivesoftware.smack.XMPPConnection; 
import org.jivesoftware.smack.XMPPException; 
import org.jivesoftware.smack.packet.Message; 
import org.jivesoftware.smack.packet.Presence; 
import org.jivesoftware.smack.proxy.ProxyInfo; 
import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode; 
import org.jivesoftware.smack.MessageListener; 
import org.jivesoftware.smack.SASLAuthentication; 
import org.jivesoftware.smack.packet.Presence.Type; 

public class Communicator { 
    public static final String XMPP_SERVER = "talk.google.com"; 
    public static final String XMPP_HOST_NAME = "gmail.com"; 
    public static final String XMPP_SERVICE_NAME = "gmail.com"; 
    public static final int PACKET_REPLY_TIMEOUT = 500, DEFAULT_XMPP_SERVER_PORT = 5222; 

    XMPPConnection conn; 
    Roster buddyList; 

    public static String canonicalizeUsername(String username) { 
     if (!username.contains("@")) { 
      username += "@" + XMPP_SERVICE_NAME; 
     } 
     return username; 
    } 

    public Communicator(String username, String password) throws XMPPException { 
     this(XMPP_SERVER, DEFAULT_XMPP_SERVER_PORT, username, password); 
    } 

    public Communicator(String serverAddress, Integer serverPort, String username, 
         String password) throws XMPPException { 
     username = canonicalizeUsername(username); 
     SmackConfiguration.setPacketReplyTimeout(PACKET_REPLY_TIMEOUT); 
     ConnectionConfiguration config = 
        new ConnectionConfiguration(serverAddress, serverPort != null ? serverPort : DEFAULT_XMPP_SERVER_PORT, 
               XMPP_HOST_NAME, ProxyInfo.forDefaultProxy()); 
     //config.setSASLAuthenticationEnabled(true); 
     //config.setSecurityMode(SecurityMode.disabled); 
     //SASLAuthentication.supportSASLMechanism("PLAIN"); 
     conn = new XMPPConnection(config); 
     conn.connect(); 
     System.out.println("Connected to " + serverAddress + ":" + serverPort); 
     conn.login(username, password); 
     System.out.println("Logged in as " + username); 
     setStatus(true, "ON"); 
    } 

    public void setStatus(boolean available, String status) { 
     Presence presence = new Presence(available ? Type.available : Type.unavailable); 
     presence.setStatus(status); 
     conn.sendPacket(presence); 
    } 

    public void destroy() throws Exception { 
     conn.disconnect(); 
    } 

    public boolean sendMessage(String msgText, String to) throws XMPPException { 
     to = canonicalizeUsername(to); 
     ChatManager mgr = conn.getChatManager(); 
     Chat chat = mgr.createChat(to, new MessageListener() { 
       public void processMessage(Chat chat, Message msg) { 
        System.out.println(msg.getBody()); 
       } 
      }); 
     //important bit is to set Message type to 'chat', Google seems to ignore the default type 
     Message msg = new Message(msgText, Message.Type.chat); 
     chat.sendMessage(msg); 
     return true; 
    } 

    public static void main(String args[]) { 
    try { 
     Communicator comm = new Communicator("username", "password"); 
     comm.sendMessage("", ""); 
     JOptionPane.showMessageDialog(null, "Close this when you want to quit"); 
    } 
    catch(Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 
+0

我有一个谷歌的压延机,我需要通过Java API主要访问。为此,我们有Google数据API,但事实是,该日历是公开分享的,如果其中一个人想要查看是否有人对日历进行了任何更改,他应该能够自己收到通知没有做投票。订阅的种类,我无法执行。 – user588880 2011-01-27 06:01:00