`
fenshen6046
  • 浏览: 50428 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

导出yahoo,linkedin,gmail,hotmail,contacts 联系人 api java

阅读更多
用了好长的时间终于把这些搞定,拿出来分享下。

Outlook 联系人 导出
Outlook导出主要使用了第三方的jar包,但是该第三方Java Outlook Connector需要购买,试用版是60天,如果是试用版的话每次运行会弹出对话框。下载的文件中提供了示例。

Yahoo 联系人 导出
Yahoo,linkedin,gmail等邮箱都遵循了oaut协议。所以我们可以通过这个协议得到联系人信息。此处我主要使用的jar包是由fernandezpablo85提供的jar包scribe来连接并认证得到联系人信息(参考https://github.com/fernandezpablo85/scribe-java)。
在该jar包中提供了一些示例,但是这些示例是建立在桌面程序上的,也就是需要用户手动得到验证码放回原处之后才能得到联系人信息。如果在web程序中可以跨过此步,也就是当用户同意导出联系人信息后可以直接得到这些信息。主要是在创建认证服务的时候添加一个方法callback("http://localhost:8080/complex"),这个方法是当用户同意授权并得到验证码后回调到的地址。这时候我的页面显示的地址是http://localhost:8080/complex/?oauth_token=kqvrdkz&oauth_verifier=eawvhc,通过这个地址我们可以得到验证码也就是oauth_verifier参数所传递的信息。通过这个验证码我们可以得到yahoo联系人的guid,然后再通过guid得到该用户的所有联系人。(详见示例)

Linkedin 联系人 导出
Linkedin主要流程和yahoo的流程大概一致,但是linkedin不需要得到guid,可以通过oauth_verifier直接得到用户的联系人。
这里需要注意的是在linkedin是需要指定返回的列名的。而不像yahoo可以通过一个地址得到联系人的所有属性。(详见示例)

Hotmail 联系人 导出
Hotmail需要得到你的授权码(delegationToken)和你需要操作的人的标志信息(locationid)。
通过hotmail提供的示例(参考http://msdn.microsoft.com/en-us/library/cc287672.aspx)可以得到如何得到上面的两个值。得到这两个值后可以拼装地址并得到需要的信息。
此处我用的方法不是scribe中提供的方法,我使用的是自己写的类Hotmail.java,主要利用java.net包得到hotmail联系人的xml输出流。(详见示例)

Gmail 联系人 导出
gmail除了遵循oauth以外还提供了较好的接口通过这些接口我们可以直接得到联系人的信息或者编辑,添加,删除等操作。
参考http://code.google.com/intl/zh-CN/apis/contacts/docs/3.0/developers_guide_java.html


以下是我的导出yahoo邮箱的代码
<%@ page language="java" import="com.gozap.util.*" import="com.gozap.cache.*" import="java.util.*" import="org.scribe.model.*" import="org.scribe.builder.api.*" import="org.scribe.builder.*" import="org.scribe.oauth.*" %>
<%@page import="com.google.gdata.util.common.base.StringUtil"%>
<%@page import="java.io.InputStream" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%
String key="your key";
String secret="your secret";

//String PROTECTED_RESOURCE_URL = "http://social.yahooapis.com/v1/user/";
String GUID_URL="http://social.yahooapis.com/v1/me/guid";
OAuthService service = new ServiceBuilder()
                                  .provider(YahooApi.class)
                                  .apiKey(key)
                                  .apiSecret(secret).callback("http://localhost:8080/complex")
      .build();
TokenCache cache=TokenCache.getInstance();

String username=(String)request.getAttribute("username");
username="test";
String verif=request.getParameter("oauth_verifier");
String requestTokenKey=request.getParameter("oauth_token");

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   
    <title>My JSP 'index.jsp' starting page</title>

  </head>
 
  <body>
    <% if(StringUtil.isEmptyOrWhitespace(verif)||StringUtil.isEmptyOrWhitespace(requestTokenKey)){
    // Obtain the Request Token
    Token requestToken = service.getRequestToken();
    String AUTHORIZE_URL = "https://api.login.yahoo.com/oauth/v2/request_auth?oauth_token="+requestToken.getToken();
   
    cache.addRequestToken(username,requestToken);
    %>
   
    <script>
    window.location="<%=AUTHORIZE_URL%>"
    </script>
   
<% }else{
Verifier verifier = new Verifier(verif);
//get the guid
Token requestToken=cache.getRequestToken(username);
Token guidToken = service.getAccessToken(requestToken,verifier);
OAuthRequest requestGuid = new OAuthRequest(Verb.GET, GUID_URL);
    service.signRequest(guidToken, requestGuid);
    Response responseGuid = requestGuid.send();
    InputStream guidCont=responseGuid.getStream();
    //String guidCont=responseGuid.getBody();
    //out.println(guidCont);
String guid=XmlParse.getGuid(guidCont);//解析xml文件得到guid的值
    //out.println("guid================="+guid);
    //-----
    Token accessToken = service.getAccessToken(requestToken, verifier);
    String PROTECTED_RESOURCE_URL = "http://social.yahooapis.com/v1/user/"+guid+"/contacts";
    OAuthRequest requestContacts = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
    service.signRequest(accessToken, requestContacts);
    Response mailResponse = requestContacts.send();
    //String outbody=mailResponse.getBody();
    //out.println(outbody);
    InputStream contactsCont=mailResponse.getStream();
    XmlParse.writeToFile(contactsCont);//将得到的xml流写入到文件中
    //out.println(contactsCont);
}%>
   
  </body>
</html>
其中key,secret改成自己相应的东东,第17行的callback方法里面的地址改成你自己的地址。

hotmail
经过上面的介绍得到locationId和delegationToken后
String locationId="";
String delegationToken="";

URL u=new URL("https://livecontacts.services.live.com/users/@L@" + locationId + "/rest/invitationsbyemail?");
HttpURLConnection urlConnection = (HttpURLConnection)u.openConnection();

urlConnection.setRequestMethod( "GET" );

urlConnection.setRequestProperty( "Authorization" , "DelegatedToken dt=\"" + delegationToken + "\"" ); 

urlConnection.setDoInput( true );

urlConnection.setDoOutput( true );

urlConnection.setUseCaches( false );

urlConnection.connect();

BufferedReader inStream = new BufferedReader( new InputStreamReader(urlConnection.getInputStream()));

int end=inStream.read();
while(end>=0){
System.out.print((char)end);
end=inStream.read();
}

urlConnection.disconnect();

这样就可以得到对应的用户的联系人。








分享到:
评论
14 楼 herolhl 2013-08-26  
你好,还在吗?想请教下,现在我获得了oauth_verifier这个验证码,怎么获取到guid呢?
import="com.gozap.util.*" import="com.gozap.cache.*"
<%@page import="com.google.gdata.util.common.base.StringUtil"%> 这三个文件找不到,所以不知道你怎么解析的。希望能得到你的帮助,谢谢
13 楼 Mybeautiful 2012-12-23  
fenshen6046 写道
Mybeautiful 写道
请教下Linkedin的问题,
好像只能得到 firstName, lastName等,不能得到Connects的Email。

博主用什么办法得到Email的?



不好意思,一直没有登录,所以没有看到信息。
linkedin我记得好像是不能获取email信息

没关系,谢谢回复。
12 楼 fenshen6046 2012-12-18  
Mybeautiful 写道
请教下Linkedin的问题,
好像只能得到 firstName, lastName等,不能得到Connects的Email。

博主用什么办法得到Email的?



不好意思,一直没有登录,所以没有看到信息。
linkedin我记得好像是不能获取email信息
11 楼 Mybeautiful 2012-09-06  
请教下Linkedin的问题,
好像只能得到 firstName, lastName等,不能得到Connects的Email。

博主用什么办法得到Email的?
10 楼 gyqxaytsz 2012-02-06  
返回的数据如下:

ResponseCode=RequestApproved&ConsentToken=eact%253DX1Br19yEAKcgrlT3POHb4Ec7adB0vw2ZLFMfLVVcUhaAaaAS1cHoT4iAd3w4aP95Q29yeBZXdyrMl4j4yxDHBbwYRFXPvlorJgG99qsNXV8RNAsDqNxvza2BgcBHI6bSiJYal3TRSulceH0OAH1GghQK6I5Mw8xsfxmecThjunvqnhvLnvekU3PBtuAt1MttPD6LSJW19o%25252Bh4Ifcd%25252BUmkQkFynTyYhlDKOLfDXdeDjc3m93a025UyLVDJPpOjNThF9XesEkOQu8XXERhUr%25252FKvJ9emtYStjs%25252F5QR90HOJBjuhyV89QAUQ8qw1nw69%25252FLeeh1uUfVaglgD9Q%25252BV8m%25252B6gFnQ%25252BMrDRPSxLA9gbCWKIvpdfCj8g9Dbdz3E30Svcgd%25252BYGVlfvFcjlFgcjbFZ1UNV9dH%25252F8oaJpbRKlxWZE3M8e%25252BEplufyfeJlYsXWRLg23NtYin%25252FNvKiZt4E2DMcQxT19XG7Aw%25252FayCiy9aIdHbFJzz%25252BLPQJLq3xbVjoTwkU8oHaT9ne2Sp7nSaHGraWPgNCgoasSWcZyifrbGhtLIds%25252BTc7PbmvQURmgPQl0WaVQUV6E59UwfHep6fQ%25252BG8HCqPtSRS4vos13QqV9ZvJidLyPMuCMlP%25252FWB%25252Be4HEWdoPd%25252BdhmsSQa5Esg%25252B9qCXLYXkoEw4G%25252FUx8HWDWdPoEQYeO5yAvvRN00qT9VBL4WS2CxChOkMid%25252FqLGrbWj%25252B1RxK3Qrfwl7W6oKyuiusptt5nk7q%25252FNVWXR2g5EPFq3lmAbsNG5q6LEg8qFu%25252FI6Hx%25252F7oM4j4lT8XdWhISqcH51Z%25252Bz3oEwoc2zfWbj8ZMM7t8JEEjgI0auHO%25252BEmeus3HKQOgDTLddaa6PtXcl%25252Btr6Gpl7JgyXMf2dw94gGYyuytqXytRMmjwZSEFn%25252FDyYbWzX2QArAOowH2TjZZ%25252BBe7CQQ%25252BgRm7cvBKzDHrDl8cKDWsf08Ryn2xnqHWSzVd3U%25252BpYKvT2HIa5rbh82QOtgM287IyEZJg8BfQOTEZxD4zXZia%25252FqlU%25252B1YuGWD3U8oQqtbtokdj1YOlh0htafxA%25253D%25253D&action=delauth&appctx=
9 楼 gyqxaytsz 2012-02-06  
fenshen6046 写道
gyqxaytsz 写道
现在获取不到lid和delegationToken了啊?能留个联系方式具体请教下你吗

qq:962953976

我加你好友了,没反应啊。。QQ:584629679
8 楼 fenshen6046 2012-02-03  
gyqxaytsz 写道
现在获取不到lid和delegationToken了啊?能留个联系方式具体请教下你吗

qq:962953976
7 楼 gyqxaytsz 2012-02-03  
现在获取不到lid和delegationToken了啊?能留个联系方式具体请教下你吗
6 楼 fenshen6046 2012-02-01  
gyqxaytsz 写道
请问这个方法能取到hotmail联系人的邮箱地址吗?还是只能获取到email_hashes?

获取到的是hotmail的联系人地址
5 楼 gyqxaytsz 2012-01-31  
请问这个方法能取到hotmail联系人的邮箱地址吗?还是只能获取到email_hashes?
4 楼 fenshen6046 2011-12-07  
ghost_fly 写道
你好,请问你在导出sina.cn邮件的api吗

没有,sorry
3 楼 ghost_fly 2011-12-07  
你好,请问你在导出sina.cn邮件的api吗
2 楼 fenshen6046 2011-11-29  
这个不太清楚,这段代码是标准的aauth协议,至于日本的服务器就看那里支不支持aauth协议,以及认证地址是否正确。如果都符合的话是没问题的
1 楼 shaoxiangfei1987 2011-11-25  
你好,我想咨询个问题,yahoo邮箱导入的这段代码支持日本的服务器吗??谢谢

相关推荐

Global site tag (gtag.js) - Google Analytics