api - para - Cómo obtener una imagen de perfil de LinkedIn
imagenes de linkedin (10)
¡Esto funciona bien para mi!
Explicado -
Esto es para una miniatura con todos los demás datos
https://api.linkedin.com/v1/people/~:(id,location,picture-urls::(original),specialties,public-profile-url,email-address,formatted-name)?format=json
Esto es para la imagen original con todos los demás datos -
https://api.linkedin.com/v1/people/~:(id,location,picture-url,specialties,public-profile-url,email-address,formatted-name)?format=json
Simplemente usa picture-urls::(original)
lugar de picture-url
de la picture-url
.
Esto se está utilizando actualmente en Gradbee
¿Hay alguna manera fácil de obtener una foto de perfil de LinkedIn de los usuarios?
Idealmente similar a cómo lo harías con Facebook - http://graph.facebook.com/userid/picture
Cuando inicie sesión en linkedin, obtendrá acceso a la cuenta. Usa ese token de acceso y puedes recuperar los datos de los usuarios
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();
Esta es mi solución y funciona muy 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
Estoy usando OWIN en mi solución, así que después de que el usuario permita su aplicación use credenciales de LinkedIn, una simple y simple solicitud GET a la URL https://api.linkedin.com/v1/people/~:(picture-url)?format=json como se explicó anteriormente con una autorización de portador en los encabezados de solicitud, resolvió mis problemas.
Mi archivo 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);
Mi método para obtener la imagen de perfil del usuario en 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;
}
Y finalmente un fragmento de mi acción que consume el método anterior:
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);
...
}
Espero que pueda ayudar. Atentamente
No es tan fácil ... Necesita pasar por OAuth, luego en nombre del miembro, usted solicita:
http://api.linkedin.com/v1/people/{user-id}/picture-url
Para mí esto funciona
image = auth.extra.raw_info.pictureUrls.values.last.first
con la gema omniauth-linkedin
Puede que no sea exactamente lo que está pidiendo, pero es útil para investigaciones individuales.
Abra la página en Firefox, haga clic en el menú sobre la imagen de fondo. Seleccione Inspeccionar Elemento (Q).
buscar -target-image "Ese será el final del atributo id en un elemento img. El atributo src de ese elemento img será la URL de la imagen de fondo.
Puede recuperar el tamaño de foto original con esta llamada:
http://api.linkedin.com/v1/people/~/picture-urls::(original)
Tenga en cuenta que esto podría ser de cualquier tamaño, por lo que tendrá que escalar de lado, pero la imagen es la original cargada por el usuario.
Si su objetivo es simplemente mostrar la foto en su sitio, entonces el complemento de perfil de miembro de LinkedIn puede funcionar para usted. Mostrará la foto, alguna información adicional, junto con la marca de LinkedIn.
Dado que la API de LinkedIn está diseñada para ser utilizada solo en nombre del usuario que está conectado actualmente, no ofrece una funcionalidad similar a la API de Facebook.
Una vez realizada la autenticación de usuario de Linkedin con OAuth 2.x, realice una solicitud a la URL de personas.
Donde ~
representa el usuario autenticado actual. La respuesta será algo como esto ...
{
"id": "KPxRFxLxuX",
"emailAddress": "[email protected]",
"firstName": "John",
"lastName": "Doe",
"formattedName": "John Doe",
"pictureUrl": "https://media.licdn.com/mpr/mprx/0_0QblxThAqcTCt8rrncxxO5JAr...cjSsn6gRQ2b"
}
¡Espero que esto ayude!