Доступ к данным LinkedIn через API с использованием Python (и авторизация в целом) - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь получить доступ к данным LinkedIn через API (у меня нет приложения, я просто хочу получить доступ к данным компании - или посмотреть, что можно получить). Здесь есть другие вопросы по этой теме, но большинство из них устарели (с использованием пакетов, которые предшествуют текущему процессу авторизации в LinkedIn).

Я следовал документации LinkedIn по авторизации: https://developer.linkedin.com/docs/oauth2

Я создал приложение (используя бессмысленный URL-адрес веб-сайта, поскольку у меня нет веб-сайта). Это дало мне идентификатор клиента и секрет клиента.

Использование (устаревшего) материала из LinkedIn (https://github.com/linkedin/api-get-started/blob/master/python/tutorial.py) Я написал:

import oauth2 as oauth
import urllib.parse as urlparse

consumer_key    =   'my client id e.g. sjd6ffdf6262d'
consumer_secret =   'my customer secret e.g. d77373hhfh'

request_token_url = 'https://api.linkedin.com/uas/oauth/requestToken'
access_token_url =  'https://api.linkedin.com/uas/oauth/accessToken'
authorize_url =     'https://api.linkedin.com/uas/oauth/authorize'

consumer = oauth.Consumer(consumer_key, consumer_secret)
client = oauth.Client(consumer)

resp,content = client.request(request_token_url, "POST")

request_token = dict(urlparse.parse_qsl(content))

clean_request_token = {}
for key in request_token.keys():
    clean_request_token[key.decode('ascii')] = request_token[key].decode('ascii')
request_token = clean_request_token

print ("Go to the following link in your browser:")
print ("%s?oauth_token=%s" % (authorize_url, request_token['oauth_token']

По этой ссылке я перехожу на веб-сайт, где я «даю разрешение», а затем мне показывают пин-код. Используя этот пин (здесь он называется oauth_verifier):

oauth_verifier = 12345
token = oauth.Token(request_token['oauth_token'],
request_token['oauth_token_secret'])
token.set_verifier(oauth_verifier)
client = oauth.Client(consumer, token)
content = client.request(access_token_url,"POST")

access_token = dict(urlparse.parse_qsl(content[1]))

clean_access_token = {}
for key in access_token.keys():
    clean_access_token[key.decode('ascii')] = access_token[key].decode('ascii')
access_token = clean_request_token

token = oauth.Token(key=access_token['oauth_token'],secret=access_token['oauth_token_secret'])

client = oauth.Client(consumer, token)

response = client.request("http://api.linkedin.com/v1/companies/barclays")

Этот ответ имеет код 401 из-за того, что «токен, использованный в запросе OAuth, был отозван».

Основные проблемы:

  • Я не совсем понимаю, как работают API, как они работают с Python, как работает авторизация или как узнать URL API, который мне нужен.

В соответствующих случаях у меня есть опыт просмотра веб-страниц (с использованием запросов и красивого супа для анализа), но не с API.

1 Ответ

0 голосов
/ 08 июля 2018

Я в конце концов решил это, публикуя здесь на случай, если кто-нибудь придет таким образом. Прежде чем тратить время, я также узнал, что свободно доступный API теперь позволяет вам получить доступ только к своему профилю или странице компании. Таким образом, вы можете написать приложение, которое позволяет пользователю публиковать на своей странице, но вы не можете написать что-то для сбора данных. Смотрите здесь:

API LinkedIn не может просматривать _any_ профиль компании

В любом случае, чтобы заставить работать ограниченный API, вам необходимо:

  • Создайте учетную запись LinkedIn, создайте приложение и добавьте URL-адрес перенаправления на страницу своего приложения (я использовал http://localhost:8000). В этом документе рассказывается, как настроить приложение: https://developer.linkedin.com/docs/oauth2
  • Следуя шагам, указанным в приведенной выше ссылке, но в python, вы делаете запрос на получение «кода доступа».

    html = requests.get("https://www.linkedin.com/oauth/v2/authorization", params = {'response_type':'code','client_id':client_id, 'redirect_uri':'http://localhost:8000', 'state':'somestring'})

  • печать html.url, чтобы получить огромную ссылку - нажмите на нее. Вам будет предложено войти и разрешить доступ, а затем вы будете перенаправлены на ваш URL перенаправления. Там ничего не будет, но в конце URL будет длинный «код доступа». Вытащите это и отправьте в LinkedIn с запросом Post:

    token = requests.post('https://www.linkedin.com/oauth/v2/accessToken', data = {'grant_type':'authorization_code','code':access_code, 'redirect_uri':'http://localhost:8000', 'client_id':client_id,'client_secret':client_secret})

  • token.content будет содержать «access_token». Это то, что нужно для доступа к API. например чтобы получить доступ к своему профилю:

    headers = {'x-li-format': 'json', 'Content-Type': 'application/json'} params = {'oauth2_access_token': access_token}

    html = requests.get("https://api.linkedin.com/v1/people/~",headers=headers,params = params)

Надеюсь, это будет полезно для кого-то, начинающего с нуля, информация в основном там, но есть много предполагаемых шагов (например, как использовать токен доступа с запросами).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...