Как да получите профилна снимка на LinkedIn с помощта на OAuth?

Потребителите могат да влизат в моето приложение Rails, използвайки своя акаунт в LinkedIn благодарение на OAuth. Имам обаче проблем с показването на изображението на потребителския профил. Следният URL адрес не зарежда картина:

<%= image_tag("http://api.linkedin.com/v1/people/{user-id}/picture-url") %>

Как мога да накарам изображението на потребителския профил в LinkedIn да се показва в моето приложение Rails?

Благодаря!


person winston    schedule 21.03.2014    source източник


Отговори (2)


Опитайте да получите оригиналната снимка с:

http://api.linkedin.com/v1/people/{user-id}/picture-urls::(original)

Актуализация:

От текущи документи (препоръчваме да ги прочетете):

Използване на текущия потребител (след влизане на потребителя):

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

Използване на member_id:

http://api.linkedin.com/v1/people/id=12345:(picture-url)

Публичен профил:

http://api.linkedin.com/v1/people/url=<public-profile-url>:(picture-url)

Тези URL адреси връщат xml, така че можете да анализирате xml отговора, за да получите picture-url низ и да го използвате като параметър за image_tag. Като алтернатива можете да извлечете информация като json, предавайки допълнителен параметър като:

http://api.linkedin.com/v1/people/~:(picture-url)?format=json

И в двата случая (xml или json), трябва да извлечете picture-url от api отговора, за да го предадете на image_tag.

Този скъпоценен камък omniauth-linkedin-oauth2 вероятно може да ви помогне.

person markets    schedule 21.03.2014
comment
Актуализирах отговора, позовавайки се на текущата документация. Проработи? - person markets; 22.03.2014
comment
Благодаря за актуализацията. Как да направя препратка към маркера на потребителя? uid изглежда не е това - person winston; 22.03.2014
comment
Току-що опитах: <%= image_tag("http://api.linkedin.com/v1/people/id={user-id}:(picture-url)") %>, но все още нямах успех - person winston; 22.03.2014
comment
Благодаря за цялата допълнителна информация! Така че бих ли анализирал URL адреса в модел или контролер и след това да направя тази променлива на екземпляр, която да предам на изгледа? Не съм сигурен какъв е процесът за анализиране и след това предаване на връзката в изгледа. - person winston; 22.03.2014
comment
Да, те са опции. Например, използвайте @response = JSON.parse(open(url_with_json_format).read) и ще имате хеш в @response. След това можете да получите достъп до атрибути като @response['person']['profile_url']. - person markets; 22.03.2014
comment
Толкова близо! Поставих @response = JSON.parse(open('http://api.linkedin.com/v1/people/~:(picture-url)?format=json').read) в моя контролер, но сега получавам грешка 401 Unauthorized error OpenURI::HTTPError in UsersController#show. Не разбирам защо е неупълномощено, след като това се случва, след като потребителят влезе в системата. Някакви идеи? - person winston; 22.03.2014
comment
Дори след като използвах URL адреса на обществения профил, http://api.linkedin.com/v1/people/url={public-profile-url}:(picture-url)?format=JSON, все още получавам грешка 401. - person winston; 22.03.2014
comment
Ако използвате скъпоценния камък, по-добре е да промените подхода на: в oauth обратно извикване запазете някои (подходящи) атрибути от хеш отговора към таблицата с потребители. Една от тях, колоната picture_url, тогава ще можете да я използвате като: @user.picture_url. - person markets; 22.03.2014
comment
Мисля, че това е и пътят. Благодаря за цялата помощ!! - person winston; 22.03.2014
comment
Няма проблем @james. Късмет! - person markets; 22.03.2014

Това е моето решение, работещо перфектно:

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 = 'linkedin$' + 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
person piezzoritro    schedule 05.02.2017