2012-10-12 96 views
2

我正在使用Hammock庫和C#從後面的帖子here中獲取鏈接的用戶的基本配置文件和電子郵件地址。Retrieve Linkedin電子郵件地址

我也跟着這些職位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

回答

1

我已經找到了解決方案。簡單地說,不要將?scope = r_emailaddres(或其他權限)包含到RestRequest的.Path屬性中。 使用這樣的事情:

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

(VB淨語法)

.AddParameter方法是關鍵。

+0

謝謝,我整天都在尋找解決方案 – Maysam

0

我花了幾天時間尋找到這一點,並傷心地發現,LinkedIn不暴露用戶的電子郵件地址,通過他們的API,除非你有一個與他們的合作伙伴協議(如微軟等)

知道這一點,您的選擇是使用LinkedIn作爲OpenId/OAuth提供商,一旦通過身份驗證,請求他們提供他們的首選電子郵件地址。

+0

如果你看看這個[post](https://developer.linkedin.com/forum/can-we-get-email-address)@Kane一些用戶喜歡Sorin Neacsu和Tomasz Cejner確認他們已經知道了使用新的API。此外,如果你看[這裏](https://developer.linkedin.com/forum/permission-scope-request-token-query-not-working),Quentin Auvray和Jens Uffhaus可以工作。我不知道這些人是否有合作伙伴協議。 –

+0

API在2012年末發生了一些變化:https://developer.linkedin.com/documents/authentication# – ptim

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

+0

感謝@Kamyar的建議,但是這次我嘗試獲取回覆郵件地址被拒絕的消息。我還能嘗試什麼? –

+0

您是否嘗試使用%20對每個範圍參數之間的空格進行URL編碼? –

+1

是的,我確實嘗試了%20,但它仍然允許我訪問被拒絕的電子郵件地址。 –

1

更新:LinkedIn已經更新了他們的API,現在你可以在正常的API獲得的電子郵件地址。

+0

我正在使用他們的新[API](https://developer.linkedin.com/documents/authentication)。 @Deepak,是正確的鏈接,還是他們有一個我還沒有意識到的新(呃)API? –

0

我終於通過使用DotNetOpenAuth Api和我在google dotnetopenauth組中找到的LinkedIn消費者類獲得了電子郵件地址。

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> 
相關問題