谷歌应用引擎如何创建新的联系人?

时间:2011-06-17 16:55:36

标签: google-app-engine contact

我正在为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='liz@example.org' />\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='liz@gmail.com' 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”的位置放什么?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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