【问题标题】:How can google app engine create new contacts?谷歌应用引擎如何创建新联系人?
【发布时间】:2011-06-17 16:55:36
【问题描述】:

我正在为 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”?

【问题讨论】:

标签: google-app-engine contact


【解决方案1】:

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

【讨论】:

  • 它说:“要发布此条目,请将其发送到联系人列表帖子 URL,如下所示。首先,使用应用程序将您的 Atom 元素放在新 POST 请求的正文中/atom+xml 内容类型。然后将其发送到帖子 URL。”但是如何从我的 servlet 发送发布请求?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    相关资源
    最近更新 更多