我正在使用Hammock库和C#来获取以下帖子here中链接的用户的基本个人资料和电子邮件地址。
然而,对于我的生活,我无法获得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时,我会看到此屏幕。
要实际请求我使用以下代码的电子邮件
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的建议时,我收到以下错误消息。我还应该尝试什么?
答案 0 :(得分:2)
经过身份验证的用户就可以访问电子邮件地址。
查看提交给用户授权应用程序的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类获得了电子邮件地址。