web-dev-qa-db-fra.com

Obtenir une photo de profil LinkedIn

Existe-t-il un moyen facile de saisir une photo de profil LinkedIn sur un utilisateur?

Idéalement similaire à ce que vous feriez avec Facebook - http://graph.facebook.com/userid/picture

42
George Wiscombe

Pas aussi facile ... Vous devez passer par OAuth, puis au nom du membre, vous demandez:

http://api.linkedin.com/v1/people/{user-id}/picture-url

31
Adam Trachtenberg

Vous pouvez récupérer la taille originale de la photo avec cet appel:

http://api.linkedin.com/v1/people/~/picture-urls::(original)

Notez que cela peut être n'importe quelle taille, vous devrez donc faire la mise à l'échelle de votre côté, mais l'image est celle d'origine téléchargée par l'utilisateur.

51
Rahim Basheer

Une fois l’authentification Linkedin user à l’aide de OAuth 2.x effectuée, envoyez une demande à l’URL des personnes.

https://api.linkedin.com/v1/people/~:((, adresse-mail, premier-nom, dernier-nom, nom-formaté, image-url )?format=json

~ représente l'utilisateur authentifié actuel. La réponse sera quelque chose comme ça ...

{
  "id": "KPxRFxLxuX",
  "emailAddress": "[email protected]",
  "firstName": "John",
  "lastName": "Doe",
  "formattedName": "John Doe",
  "pictureUrl": "https://media.licdn.com/mpr/mprx/0_0QblxThAqcTCt8rrncxxO5JAr...cjSsn6gRQ2b"
}

J'espère que cela t'aides!

10
Madan Sapkota

J'utilise OWIN dans ma solution. Ainsi, une fois que l'utilisateur autorise votre application à utiliser les informations d'identification LinkedIn, une simple requête GET à l'adresse URL https://api.linkedin.com/v1/people/~:((image-url)?format = json comme expliqué précédemment avec une autorisation du porteur dans les en-têtes de demande 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 sur 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 utilise 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 pourrait aider . Cordialement

6
diegosousa88

Cela fonctionne bien pour moi!

_ {Expliqué - 

Ceci est pour une vignette avec toutes les autres données- 

https://api.linkedin.com/v1/people/~:(id,location,picture-urls::(original),specialties,public-profile-url,email-address,formatted-name)?format=json

Ceci est pour l'image originale avec toutes les autres données - 

https://api.linkedin.com/v1/people/~:(id,location,picture-url,specialties,public-profile-url,email-address,formatted-name)?format=json

Utilisez simplement picture-urls::(original) au lieu de picture-url!

Ceci est actuellement utilisé dans Gradbee

4
Siddharth

Lorsque vous vous connecterez à linkedin, vous obtiendrez un accès. Utilisez ce jeton d'accès et vous pouvez récupérer les données des utilisateurs 

 LinkedInApiClient client = factory.createLinkedInApiClient(accessToken);
                        com.google.code.linkedinapi.schema.Person person = client.getProfileForCurrentUser(EnumSet.of(
                                ProfileField.ID, ProfileField.FIRST_NAME, ProfileField.LAST_NAME, ProfileField.HEADLINE,
                                ProfileField.INDUSTRY, ProfileField.PICTURE_URL, ProfileField.DATE_OF_BIRTH,
                                ProfileField.LOCATION_NAME, ProfileField.MAIN_ADDRESS, ProfileField.LOCATION_COUNTRY));
    String imgageUrl=person.getPictureUrl();
2
Kimmi Dhingra

Si votre objectif est simplement d’afficher la photo sur votre site, alors le plugin LinkedIn Member Profile peut fonctionner pour vous. Il affichera la photo, quelques informations supplémentaires, ainsi que la marque LinkedIn. 

Étant donné que l’API LinkedIn est conçue pour être utilisée uniquement pour le compte de l’utilisateur actuellement connecté elle n’offre pas de fonctionnalités similaires à celles de l’API de graphisme facebook.

1
Hoodah

Ceci est ma solution et cela fonctionne très très bien:

def callback(self):
    self.validate_oauth2callback()
    oauth_session = self.service.get_auth_session(
        data={'code': request.args['code'],
              'grant_type': 'authorization_code',
              'redirect_uri': self.get_callback_url()},
        decoder=jsondecoder
    )
    me = oauth_session.get('people/~:(id,first-name,last-name,public-profile-url,email-address,picture-url,picture-urls::(original))?format=json&oauth2_access_token='+str(oauth_session.access_token), data={'x-li-format': 'json'}, bearer_auth=False).json()
    social_id = me['id']
    name = me['firstName']
    surname = me['lastName']
    email = me['emailAddress']
    url = me['publicProfileUrl']
    image_small = me.get('pictureUrl', None)
    image_large = me.get('pictureUrls', {}).get('values', [])[0]
    return social_id, name, surname, email, url, image_small, image_large, me
1
piezzoritro

Ce n'est peut-être pas tout à fait ce que vous demandez, mais c'est utile pour les enquêtes individuelles.

Appelez la page dans Firefox, cliquez avec le bouton gauche de la souris sur le menu situé au-dessus de l'image d'arrière-plan ..__ Sélectionnez Élément à inspecter (Q).

search for -target-image " Ce sera la fin de l'attribut id dans un élément img . L'attribut src de cet élément img sera l'URL de l'image d'arrière-plan.

0
Robin Hodson

Pour moi ça marche

image = auth.extra.raw_info.pictureUrls.values.last.first

avec un joyau omniauth-linkedin

0
sparkle