2

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

我也在这里这里关注了这些帖子

但是对于我的一生,我无法获得linkedin用户的电子邮件地址。

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

浏览了这个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 时,我会看到此屏幕。

在此处输入图像描述

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

 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 上遇到的错误

在此处输入图像描述

在此先感谢您的帮助。

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

在此处输入图像描述

4

6 回答 6

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

于 2012-10-12T17:51:46.660 回答
1

更新:LinkedIn 已经更新了他们的 API,现在您可以在他们的普通 API 中获取电子邮件地址。

于 2012-10-17T02:21:49.147 回答
1

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

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

(vb 网络语法)

.AddParameter 方法是关键。

于 2012-11-26T07:49:55.043 回答
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>
于 2012-11-06T23:51:59.183 回答
0

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

知道这一点后,您的选择是使用 LinkedIn 作为 OpenId / OAuth 提供者,并在通过身份验证后询问他们的首选电子邮件地址。

于 2012-10-12T13:47:21.433 回答
0

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

于 2012-11-01T06:21:36.413 回答