Есть ли простой способ захватить фотографию профиля пользователя LinkedIn?
Идеально похоже на то, как вы с Facebook - http://graph.facebook.com/userid/picture
Есть ли простой способ захватить фотографию профиля пользователя LinkedIn?
Идеально похоже на то, как вы с Facebook - http://graph.facebook.com/userid/picture
Не так просто... Вам нужно пройти через 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": "[email protected]",
"firstName": "John",
"lastName": "Doe",
"formattedName": "John Doe",
"pictureUrl": "https://media.licdn.com/mpr/mprx/0_0QblxThAqcTCt8rrncxxO5JAr...cjSsn6gRQ2b"
}
Надеюсь это поможет!
Если вы используете версию API 2.0 (все разработчики должны выполнить миграцию к 1 марта 2019 г.), вы должны использовать проекции для расширения profilePicture.displayImage
. Если вы сделаете это, у вас будет полный JSON-элемент displayImage~
("~" - не опечатка) внутри profilePicture
со всей необходимой информацией.
https://api.linkedin.com/v2/me?projection=(id,profilePicture(displayImage~:playableStreams))
Вы можете увидеть больше в документе Profile Picture API, чтобы посмотреть ответ JSON или документ Profile API.
Я использую OWIN в своем решении, поэтому после того, как пользователь разрешает вашему приложению использовать учетные данные LinkedIn простой и простой запрос GET для URL https://api.linkedin.com/v1/people/~:(picture-url)?format=json как объяснялось ранее, с авторизацией на предъявителя в заголовках запросов были решены мои проблемы.
Мой файл 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);
Мой метод получения изображения профиля пользователя в 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
Когда вы входите в систему, вы получите 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 апи.
Это мое решение, и оно работает очень хорошо:
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.extra.raw_info.pictureUrls.values.last.first
с драгоценным камнем omniauth-linkedin
Это может быть не совсем то, о чем вы просите, но это полезно для индивидуальных исследований.
Вызовите страницу в Firefox, щелкните левой кнопкой мыши меню над фоновым изображением. Выберите "Проверить элемент" (Q).
поиск -target-image " Это будет конец атрибута id в элементе img. Атрибут src этого элемента img будет URL-адресом фонового изображения.
кто-то попросил разрешения на новый API-интерфейс linkedin, я запросил разрешения на доступ к продукту, связанному с данными моей компании (привлечение), и через месяц я рассматриваю свою заявку.