`
fenshen6046
  • 浏览: 52049 次
  • 性别: 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邮箱导入的这段代码支持日本的服务器吗??谢谢

相关推荐

    Linkedin接口 API 调用 实例

    LinkedIn接口API调用实例是一个关于如何与LinkedIn的开发平台交互的实际应用示例。LinkedIn API允许开发者访问LinkedIn的数据,包括用户信息、公司数据、职位发布等,以便构建与LinkedIn相关的应用程序和服务。下面...

    contacts-sync:将LinkedIn同步到Google联系人

    【标题】"contacts-sync:将LinkedIn同步到Google联系人"是一个项目,它的主要目标是实现LinkedIn社交平台的联系人数据与Google的Gmail通讯录之间的同步功能。这个项目对于那些需要在不同平台间统一管理人脉资源的...

    linkedin api for php

    2. **社交网络**:可以查询用户的好友、连接,甚至推荐新的联系人。 3. **职位发布**:发布或检索LinkedIn上的职位信息,帮助企业招聘。 4. **公司信息**:获取公司的基本信息,如公司规模、行业、员工评价等。 5. *...

    参考资料-Linkedin加相关行业联系人.zip

    "参考资料-Linkedin加相关行业联系人.zip"这个压缩包显然包含了与利用LinkedIn有效地扩展行业人脉相关的信息。下面我们将深入探讨LinkedIn的重要性和如何有效地添加相关行业联系人。 首先,LinkedIn作为全球最大的...

    linkedin-profile-info-api:一个简单的API,可以从给定的用户名请求和解析JSON格式的基本公共LinkedIn个人资料数据

    LinkedIn个人资料信息API 一个简单的API,它使用和从给定的用户名以JSON格式请求和解析基本的公共LinkedIn个人资料数据 设置 git clone git@github.com:tancredi/linkedin-profile-info-api.git cd linkedin-...

    linkedin-java:LinkedIn Java 库

    LinkedIn Java 库 这个库的目标是用一个更小、更快、更高效的 javalinkedin 库替换linkedin-j。 使用 scribe 进行 oauth-heavy 提升和 gson 进行 json 解析。 另一个目标是避免大多数这些库的一个常见问题,即它们...

    LinkedinSpider, Linkedin爬虫,根据公司名字抓取员工的linkedin信息.zip

    3. **销售与营销**:分析客户公司的内部结构,寻找关键联系人。 4. **学术研究**:收集职业网络数据,进行社会网络分析。 总之,LinkedIn Spider 提供了一种有效的方式来获取LinkedIn上的公开数据,但使用时应确保...

    java开源包5

    github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对...

    linkedin-voyager:围绕linkedin旅行者私有API的小包装

    2. **数据访问**:Voyager允许开发者获取用户授权后的LinkedIn个人资料、联系人、工作历史、教育背景、技能等信息。 3. **实时更新**:通过监听API事件,Voyager可以实现实时数据更新,当LinkedIn上的信息发生变化...

    一个联系人管理,包括分组

    6. **API与集成**:对于开发者,ContactsManager可能提供API接口,允许其他应用或服务与之交互,例如导入导出联系人,或者在应用间共享联系信息。 7. **性能优化**:对于大量联系人的处理,应用需要有高效的算法和...

    linkedin-export-tool:NodeJS工具导出Linkedin数据

    NodeJS工具导出Linkedin数据 安装 git clone https://github.com/nhduy1985/linkedin-export-tool.git cd linkedin-export-tool npm install 配置 mkdir export cp config.json.dist config.json vim config.json ...

    linkedin2md:(已弃用)将公开的LinkedIn个人资料导出为Markdown格式

    已淘汰LinkedIn2Md 将公开的LinkedIn个人资料导出为Markdown格式。 您可以使用此工具从您的LinkedIn个人资料生成Markdown格式的简历。 编辑输出的Markdown文件并将其转换为PDF, 因此您可以使用纯文本简历(也许将其...

    X-notifier(Gmail:trade_mark:,Hotmail、雅虎、美国在线(AOL)…)「X-notifier (for Gmail:trade_mark:,Hotmail,Yahoo,AOL...)」-crx插件

    用于Gmail, Hotmail, Yahoo, AOL等的通知。 Gmail,Hotmail,Yahoo,AOL等的通知程序X-notifier检查您的Web邮件帐户并通知未读电子邮件的数量。 通知不限于网络邮件。 您还可以通过安装脚本来获取有关一百多个站点...

    LinkedIn-REST-API-Application:演示 LinkedIn REST API 的简单 J2EE 应用程序

    LinkedIn-REST-API-应用程序演示 LinkedIn REST API 的简单 J2EE 应用程序此应用程序演示了如何将 LinkedIn REST API 与您的 Java 项目集成。 目前(在这个初始提交中)与 LinkedIn 公司页面相关的工作已经完成。 ...

    LinkedIn-API-client:与LinkedIn API连接的库。 如果您正在寻找LinkedIn的API客户端或SDK,则完美

    PHP中的LinkedIn API客户端 一个PHP库,用于处理与LinkedIn API的身份验证和通信。 库/ SDK帮助您获取访问令牌,并且在通过身份验证后,可以帮助您发送API请求。 但是,您不会免费获得所有内容。您必须阅读以了解...

    著名社交网站LinkedIn的Java架构技术.doc

    【LinkedIn的Java架构技术详解】 LinkedIn是全球知名的社交网络平台,尤其在专业领域具有广泛的影响力。该平台在2008年的JavaOne会议上展示了其基于Java技术构建的架构设计。以下是对LinkedIn架构技术的深入解析: ...

    python-linkedin:LinkedIn API的Python接口

    Python LinkedIn 到LinkedIn API的Python接口 该库为LinkedIn Profile , Group , Company , Jobs , Search , Share , Network和Invitation REST API提供了纯Python接口。 提供了一项服务,使人们可以通过基于...

    Python-用于挖掘LinkedIn的工具无需API限制进行数据侦察

    在本场景中,"Python-用于挖掘LinkedIn的工具无需API限制进行数据侦察"指的是一个利用Python编写的程序,能够绕过LinkedIn的官方API限制,从而进行数据的抓取和分析。这通常涉及到网络爬虫技术和数据分析技术。 ...

    node-linkedin-api:用于与 LinkedIn API 交互的节点模块

    2. **网络信息**:查询用户的联系人、第二度联系人,以及他们的信息。 3. **职位信息**:搜索和推荐职位,获取职位详情。 4. **公司信息**:获取和更新公司页面信息,包括公司简介、员工、招聘信息等。 5. **分享...

    java开源包4

    github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对...

Global site tag (gtag.js) - Google Analytics