2011-06-17 61 views
0

我正在为Google App Engine上的组织开发会员注册应用程序,对于新成员,他们可以使用注册页面成为会员,Google App Engine中是否有方法将新成员添加为gmail联系人?因此,每当新用户用他的信息点击提交按钮,就会自动生成一个新的gmail联系人并添加到我的联系人列表中[我的gmail地址已通过GAE应用程序注册]。谷歌应用程序引擎如何创建新的联系人?

下面是我的一些代码,试图做到这一点,但它不添加每次提交按钮被按下新的联系人:

String Add_New_Contact_Url="https://www.google.com/m8/feeds/contacts/default/full"; 

    protected void processRequest(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException 
    { 
    request.setCharacterEncoding("UTF-8"); 
    response.setContentType("text/html; charset=UTF-8"); // UTF-8 GB18030 
    PrintWriter out=response.getWriter(); 
    String Email=request.getParameter("Email"); 

    if (Email==null || Email.trim().length()<1) 
    { 
     StrBuf=new StringBuffer("<Html><Head><Title>Signup</Title></Head>\n<Body>\n"); 
     StrBuf.append("<P><Br><P><Br><P>\n"); 
     StrBuf.append("<Table Border=1 Align=Center Cellpadding=8 Cellspacing=1><Tr Bgcolor=\"#0088FF\" Colspan=2><Th><Font Color=White>Sign up</Font></Th></Tr></Table>\n<P>\n"); 
     StrBuf.append("<Center>\n"); 
     StrBuf.append("<Form Name=Singles_Club_Signup_Form>\n"); 
     StrBuf.append("<Table Border=1 Cellpadding=6 Cellspacing=1>\n"); 
... 
     StrBuf.append("<Tr><Td Align=Right><B><Font Size=3 Color=#0066FF>Email</Font></B></Td><Td><Input type=text name=Email size=36 /></Td></Tr>\n"); 
... 
     StrBuf.append("</Table>\n"); 
     StrBuf.append("<P><Br><P>\n"); 
     StrBuf.append("<Input type=submit value=Sign_Up/>\n"); 
     StrBuf.append("</Form>\n"); 
     StrBuf.append("</Center>\n"); 
     StrBuf.append("</Body>\n</Html>"); 
    } 
    else 
    { 
     try 
     { 
     LinkedHashMap<String,String> Key_Value_Pairs=new LinkedHashMap<String,String>(); 
     String A_Contact=createContact(Email); 
     Key_Value_Pairs.put("A",A_Contact); 
     getFromUrlDoPost(Add_New_Contact_Url,Key_Value_Pairs);    // Create new contact in Gmail account 
     } 
     catch (Exception e) { out.println(e.toString()); } 
     finally { if (pm!=null) pm.close(); } 
    } 
    } 

    String createContact(String Email) 
    { 
    return "<atom:entry xmlns:atom='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005'>\n"+ 
      "<atom:category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/contact/2008#contact' />\n"+ 
      "<gd:name>\n"+ 
      "<gd:givenName>AAA</gd:givenName>\n"+ 
      "<gd:familyName>BBB</gd:familyName>\n"+ 
      "<gd:fullName>AAA BBB</gd:fullName>\n"+ 
      "</gd:name>\n"+ 
      "<atom:content type='text'>Notes</atom:content>\n"+ 
      "<gd:email rel='http://schemas.google.com/g/2005#work' primary='true' address='"+Email+"' displayName='E. Bennet' />\n"+ 
      "<gd:email rel='http://schemas.google.com/g/2005#home' address='[email protected]' />\n"+ 
      "<gd:phoneNumber rel='http://schemas.google.com/g/2005#work' primary='true'>\n"+ 
      "(206)555-1212\n"+ 
      "</gd:phoneNumber>\n"+ 
      "<gd:phoneNumber rel='http://schemas.google.com/g/2005#home'>\n"+ 
      "(206)555-1213\n"+ 
      "</gd:phoneNumber>\n"+ 
      "<gd:im address='[email protected]' protocol='http://schemas.google.com/g/2005#GOOGLE_TALK' primary='true' rel='http://schemas.google.com/g/2005#home' />\n"+ 
      "<gd:structuredPostalAddress rel='http://schemas.google.com/g/2005#work' primary='true'>\n"+ 
      "<gd:city>Mountain View</gd:city>\n"+ 
      "<gd:street>1600 Amphitheatre Pkwy</gd:street>\n"+ 
      "<gd:region>CA</gd:region>\n"+ 
      "<gd:postcode>94043</gd:postcode>\n"+ 
      "<gd:country>United States</gd:country>\n"+ 
      "<gd:formattedAddress>\n"+ 
      "1600 Amphitheatre Pkwy Mountain View\n"+ 
      "</gd:formattedAddress>\n"+ 
      "</gd:structuredPostalAddress>\n"+ 
      "</atom:entry>"; 
    } 

StringBuffer getFromUrlDoPost(String A_Url,LinkedHashMap Key_Value_Pairs) throws MalformedURLException,IOException 
    { 
    StringBuffer Text_Out=new StringBuffer(""),Text_In=new StringBuffer(""); 
    String data="",key,value,inputLine; 

    try             // Sending a POST Request Using a URL 
    { 
     // Construct data -- List the entries 
     for (Iterator it=Key_Value_Pairs.keySet().iterator();it.hasNext();) 
     { 
     key=it.next().toString(); 
     value=Key_Value_Pairs.get(key).toString(); 
     if (data.length()==0) data=URLEncoder.encode(key,"UTF-8")+"="+URLEncoder.encode(value,"UTF-8"); 
     else data+="&"+URLEncoder.encode(key,"UTF-8")+"="+URLEncoder.encode(value,"UTF-8"); 
     } 
     // Send data 
     URLConnection conn=new URL(A_Url).openConnection(); 
     conn.setRequestProperty("Content-Type","application/atom+xml"); 
     conn.setDoOutput(true); 

     OutputStreamWriter wr=new OutputStreamWriter(conn.getOutputStream()); 
     wr.write(data); 
     wr.flush(); 

     Text_In.setLength(0); 

     // Get the response 
     BufferedReader rd=new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     while ((inputLine=rd.readLine()) != null) Text_In.append(inputLine+"\n"); 
     wr.close(); 
     rd.close(); 
    } 
    catch (Exception e) { } 
    return Text_In; 
    } 

它不会导致任何错误,我做了什么错?我怀疑这条线:

Key_Value_Pairs.put("A",A_Contact); 

因为我不知道在“A”处放置什么?

+1

请参阅http://code.google.com/apis/contacts/docs/2.0/developers_guide_protocol.html#Creating –

回答

0

我发现原因:不需要包含google-collect - *。jar,错误的来源。

0

您的用户可以授权您的应用程序(通过OAuth)通过Contacts Data API与他们的gmail联系人列表进行交互。

+0

它说:“要发布此条目,请将其发送到联系人列表帖子URL,如下所示。首先,使用application/atom + xml内容类型将您的Atom 元素置于新POST请求的正文中,然后将其发送到帖子URL。但是如何从我的servlet发送一个post请求? – Frank