Existe-t-il un moyen simple de récupérer la photo de profil d'un utilisateur sur LinkedIn ?
Idéalement, comme vous le feriez avec Facebook. http://graph.facebook.com/userid/picture
Existe-t-il un moyen simple de récupérer la photo de profil d'un utilisateur sur LinkedIn ?
Idéalement, comme vous le feriez avec Facebook. http://graph.facebook.com/userid/picture
Cet appel vous permet de retrouver la taille de la photo originale :
http://api.linkedin.com/v1/people/~/picture-urls: :(original)
Notez que cette image peut être de n'importe quelle taille, vous devrez donc la mettre à l'échelle de votre côté, mais l'image est l'image originale téléchargée par l'utilisateur.
Un petit point à préciser - l'image est "l'originale téléchargée par l'utilisateur"... avec l'ajout d'un logo linkedIn dans le coin :)
Donc nous devons faire deux appels, le premier pour obtenir l'url de l'image, et le second pour obtenir l'image réelle ?
Saintmac. Non, si vous voulez seulement l'image, il suffit d'appeler cette url. {user-id} est une variable et "picture-url" est le texte que vous mettez dans l'url pour obtenir l'image. Cependant, dans mes tests, cela renvoie la plus petite image et non l'originale. Je recommande la réponse ci-dessous en utilisant picture-url: :(original)
Si vous utilisez la version 2.0 de l'API (tous les développeurs doivent migrer avant le 1er mars 2019 ), vous devez utiliser les projections pour étendre le profilePicture.displayImage
. Si vous faites cela, vous aurez un élément JSON complet. displayImage~
(le '~' n'est pas une faute de frappe) à l'intérieur profilePicture
avec toutes les informations dont vous pourriez avoir besoin.
https://api.linkedin.com/v2/me?projection=(id,profilePicture(displayImage~:playableStreams))
Vous pouvez en voir plus sur le site Document API sur l'image de profil pour consulter la réponse JSON ou la doc sur l'API Profil .
Une fois que le Linkedin authentification des utilisateurs en utilisant OAuth 2.x est fait, faites une demande à l'URL des personnes.
Où ~
représente l'utilisateur authentifié actuel. La réponse sera quelque chose comme ceci ...
{
"id": "KPxRFxLxuX",
"emailAddress": "johndoe@example.com",
"firstName": "John",
"lastName": "Doe",
"formattedName": "John Doe",
"pictureUrl": "https://media.licdn.com/mpr/mprx/0_0QblxThAqcTCt8rrncxxO5JAr...cjSsn6gRQ2b"
}
J'espère que cela vous aidera !
Comment obtenir l'image dans une taille légèrement plus grande ? Celle que je reçois est super petite :/
J'utilise OWIN dans ma solution, donc après que l'utilisateur ait autorisé votre application à utiliser les informations d'identification de LinkedIn, une demande GET simple et claire à l'URL https://api.linkedin.com/v1/people/~ :(picture-URL)?format=json comme expliqué précédemment avec une autorisation Bearer dans les en-têtes de requête, a résolu mes problèmes.
Mon fichier Startup.Auth.cs
var linkedInOptions = new LinkedInAuthenticationOptions()
{
ClientId = [ClientID],
ClientSecret = [ClientSecret],
Provider = new LinkedInAuthenticationProvider()
{
OnAuthenticated = (context) =>
{
// This is the access token received by your application after user allows use LinkedIn credentials
context.Identity.AddClaim(new Claim(
"urn:linkedin:accesstoken", context.AccessToken));
context.Identity.AddClaim(new Claim(
"urn:linkedin:name", context.Name));
context.Identity.AddClaim(new Claim(
"urn:linkedin:username", context.UserName));
context.Identity.AddClaim(new Claim(
"urn:linkedin:email", context.Email));
context.Identity.AddClaim(new Claim(
"urn:linkedin:id", context.Id));
return Task.FromResult(0);
}
}
};
app.UseLinkedInAuthentication(linkedInOptions);
Ma méthode pour obtenir la photo de profil de l'utilisateur dans LinkedIn :
public string GetUserPhotoUrl(string accessToken)
{
string result = string.Empty;
var apiRequestUri = new Uri("https://api.linkedin.com/v1/people/~:(picture-url)?format=json");
using (var webClient = new WebClient())
{
webClient.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + accessToken);
var json = webClient.DownloadString(apiRequestUri);
dynamic x = JsonConvert.DeserializeObject(json);
string userPicture = x.pictureUrl;
result = userPicture;
}
return result;
}
Et enfin un extrait de mon action qui consomme la méthode ci-dessus :
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
...
var externalIdentity = HttpContext.GetOwinContext().Authentication.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
string accessToken =
externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == "urn:linkedin:accesstoken").Value;
model.PhotoUrl = GetUserPhotoUrl(accessToken);
...
}
J'espère que cela pourra vous aider. Meilleures salutations
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
3 votes
Prenez note de La réponse de ccoloma ci-dessous, car cela a changé beaucoup con
v2
de l'API. Les réponses acceptées et les plus votées sont les suivantesv1
qui sera bientôt obsolète.