检索Linkedin电子邮件地址

时间:2012-10-12 13:40:33

标签: c# email oauth linkedin hammock

我正在使用Hammock库和C#来获取以下帖子here中链接的用户的基本个人资料和电子邮件地址。

我还关注了这些帖子herehere

然而,对于我的生活,我无法获得linkedin用户的电子邮件地址。

阅读this linkedin帖子我新建了一个新的应用程序来获取新密钥但是仍然没有运气。

通过this linkedin帖子但无法使其工作

我正在发布下面的代码,但是从我关注的链接中大量提升了

var credentials = new OAuthCredentials
            {

                CallbackUrl = "http://localhost:2715/Callback.aspx",

                ConsumerKey = "my consumer key",//not shown

                ConsumerSecret = "my consumer secret",//not shown

                Type = OAuthType.RequestToken,

            };


        var client = new RestClient
            {
                Authority = "https://api.linkedin.com/uas/oauth",
                Credentials = credentials
            };

        //var scope = HttpUtility.UrlEncode("r_basicprofile r_emailaddress");

        var request = new RestRequest
                        {
                            Path = "requestToken?scope=r_basicprofile+r_emailaddress",
                        };

当用户导航到linkedin时,我会看到此屏幕。

enter image description here

要实际请求我使用以下代码的电子邮件

 var request = new RestRequest { Path = "people/~/email-address" };

        var credentials = new Hammock.Authentication.OAuth.OAuthCredentials

        {

            Type = OAuthType.AccessToken,

            SignatureMethod = OAuthSignatureMethod.HmacSha1,

            ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader,

            ConsumerKey = "my consumer key", //not shown

            ConsumerSecret = "my consumer secret", //not shown

            Token = Session["AccessToken"].ToString(),

            TokenSecret = Session["AccessSecretToken"].ToString(),

            Verifier = Session["Verifier"].ToString()

        };


        var client = new RestClient()
        {
            Authority = "http://api.linkedin.com/v1/",
            Credentials = credentials,
            Method = WebMethod.Get
        };


        var MyInfo = client.Request(request);

        String content = MyInfo.Content;

这是我在MyInfo.Content上得到的错误

enter image description here

提前感谢您的帮助。

在尝试Kamyar的建议时,我收到以下错误消息。我还应该尝试什么?

enter image description here

6 个答案:

答案 0 :(得分:2)

只要您在授权时请求“r_emailaddress”权限,

经过身份验证的用户就可以访问电子邮件地址。

查看提交给用户授权应用程序的Oauth登录对话框。请注意“电子邮件地址”未显示为应用程序要访问的配置文件字段之一。您需要在代码中修改此行:

var request = new RestRequest
                        {
                            Path = "requestToken?scope=r_basicprofile+r_emailaddress",
                        };

对此:

var request = new RestRequest
                        {
                            Path = "requestToken?scope=r_basicprofile%20r_emailaddress",
                        };

该空间应在您的请求令牌路径中进行URL编码。

谢谢, Kamyar Mohager

答案 1 :(得分:1)

更新:LinkedIn已更新其API,现在您可以使用其常规API获取电子邮件地址。

答案 2 :(得分:1)

使用JavaScript,我在头部区域:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript" src="http://platform.linkedin.com/in.js">
  api_key: put-your-api-key-here
    authorize: true
    scope: r_basicprofile r_emailaddress
</script>
<script type="text/javascript">

function loadData() {
    IN.API.Profile("me")
        .fields(["firstName","lastName","id","emailAddress"])
        .result(function(result) {
                //$("#profile").html(JSON.stringify(result))
                $("#profile").html(JSON.stringify(result))
        });
}

</script>

在身体中我提出以下内容:

<div id="profile">
</div>
<script type="IN/Login" data-onAuth="loadData"></script>

答案 3 :(得分:1)

我找到了解决方案。简单地说,不要将?scope = r_emailaddres(或其他权限)包含在RestRequest的.Path属性中。 使用这样的东西:

Dim request = New RestRequest With {.Path = "requestToken"}
request.AddParameter("scope", "r_emailaddress")

(vb net syntax)

.AddParameter方法是关键。

答案 4 :(得分:0)

我花了几天时间研究这个问题,遗憾地发现LinkedIn不会通过他们的API公开用户的电子邮件地址,除非你与他们有合作伙伴协议(如微软等)

了解这一点,您可以选择将LinkedIn用作OpenId / OAuth提供商,并在通过身份验证后询问他们的首选电子邮件地址。

答案 5 :(得分:0)

我终于通过使用DotNetOpenAuth Api和我在google dotnetopenauth小组找到的LinkedIn Consumer类获得了电子邮件地址。