Получение Изображения Профиля LinkedIn
есть ли простой способ захватить фотографию профиля пользователей LinkedIn?
идеально похоже на то, как вы бы с Facebook -http://graph.facebook.com/userid/picture
10 ответов
Не так просто... Вам нужно пройти через OAuth, затем от имени участника вы просите:
http://api.linkedin.com/v1/people/{user-id}/picture-url
вы можете получить исходный размер фотографии с помощью этого вызова:
http://api.linkedin.com/v1/people/~ / picture-urls:: (оригинал)
обратите внимание, что это может быть любой размер, поэтому вам нужно будет сделать масштабирование на вашей стороне, но изображение является оригинальным, загруженным пользователем.
Как только Linkedin проверка подлинности пользователя использование OAuth 2.x сделано, сделайте запрос на URL-адрес людей.
здесь ~
обозначает текущего аутентифицированного пользователя. Ответ будет примерно такой ...
{
"id": "KPxRFxLxuX",
"emailAddress": "johndoe@example.com",
"firstName": "John",
"lastName": "Doe",
"formattedName": "John Doe",
"pictureUrl": "https://media.licdn.com/mpr/mprx/0_0QblxThAqcTCt8rrncxxO5JAr...cjSsn6gRQ2b"
}
надеюсь, что это помогает!
Я использую OWIN в своем решении, поэтому после того, как пользователь разрешит вашему приложению использовать учетные данные LinkedIn, простой и простой запрос GET на URL https://api.linkedin.com/v1/people/~: (изображение-url)?format=json как объяснялось ранее с авторизацией носителя в заголовках запросов, мои проблемы решены.
Мой Стартап.Автор.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);
мой способ получить изображение профиля пользователя в 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;
}
и, наконец, фрагмент моего действия, который потребляет метод выше:
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);
...
}
Я надеюсь, что это может помочь. С наилучшими пожеланиями
это хорошо работает для меня!
объяснил -
это для эскиза со всеми другими данными -
https://api.linkedin.com/v1/people/~:(id,location,picture-urls::(original),specialties,public-profile-url,email-address,formatted-name)?format=json
это для исходного изображения со всеми другими данными -
https://api.linkedin.com/v1/people/~:(id,location,picture-url,specialties,public-profile-url,email-address,formatted-name)?format=json
просто использовать picture-urls::(original)
вместо picture-url
!
в настоящее время используется в Gradbee
при входе в linkedin, вы получите accesstoken. Использовать этот маркер доступа, и вы можете получить данные пользователей
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();
Если ваша цель-просто отобразить фотографию на вашем сайте, то LinkedIn Плагин Профиля Участника может сработать для вас. Он отобразит фотографию, некоторую дополнительную информацию, а также брендинг LinkedIn.
поскольку API LinkedIn предназначен для использования только от имени текущий зарегистрированный пользователь он не предлагает аналогичные функции, как Facebook graph api.
Это мое решение и оно работает очень очень хорошо:
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
для меня это работает
image= auth.дополнительный.raw_info.pictureUrls.ценности.последний.первый
с omniauth-linkedin gem
может быть, это не совсем то, что вы просите, но это полезно для индивидуальных исследований.
вызовите страницу в Firefox, щелкните левой кнопкой мыши меню над фоновым изображением. Выберите Проверить Элемент (Q).
поиск-target-image" Это будет конец атрибута id в элементе img. Атрибут src этого элемента img будет URL-адресом фонового изображения.