Примеры фрагментов кода для работы с LinkedIn API в python.

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

Мы разделим это руководство на два раздела.

  1. Аутентификация: Чтобы успешно взаимодействовать с LinkedIn, нам нужно иметь способ сообщить LinkedIn, кто мы, это позволит LinkedIn проверить, имеем ли мы право доступа к такому контенту. Кроме того, это помогает защитить пользователей от мошенничества с идентификацией. В современном программном обеспечении, использующем api для взаимодействия друг с другом, существует множество способов проверить, авторизован ли пользователь. Наиболее популярным является использование токена доступа для проверки того, предоставлен ли пользователю доступ, что является одним из способов, используемых Linkedin для проверки того, кто делает запрос.
  2. Получение ресурсов: Здесь мы попытаемся использовать токен доступа, который мы получили выше, чтобы запросить любую информацию у LinkedIn и ожидать правильного ответа или ошибки, если у нас нет соответствующего разрешения на общение.

Оглавление

  1. Регистрация в linkedin Oauth (запрос токена доступа)
  2. запрос информации о пользователе
  3. поиск работы
  4. поиск компаний
  5. поиск пользователей

Аутентификация (запрашивается access_token: «Oauth2.0»)

Первый шаг к использованию LinkedIn API — это создание приложения в LinkedIn Developer Tool. В этом руководстве мы рассмотрим, как можно получить учетные данные OAuth 2.0 для использования LinkedIn API.

Когда вы закончили с созданием учетной записи, пришло время скопировать client_id и client_secret.

Теперь давайте напишем немного кода на python и взаимодействуем с нашим LinkedIn API. Для начала нам нужно найти способ хранения полезной информации, которая нам понадобится для повторных запросов, например, client_id и client_secret, которые мы используем для аутентификации, также мы попытаемся сохранить где-нибудь наш accessToken, чтобы всегда иметь к ним доступ.

Поскольку наша цель — сохранить все предельно ясным и простым. мы не будем делать ничего сложного в хранении этих полезных частей информации. поэтому давайте создадим файл с именем credentials.json. этот файл будет хранить все наши пользовательские данные, а также позволит нам читать и хранить некоторые части информации.

{
“client_id”: “77cbb96oqhael6”,

“client_secret”: “”, // this is a secret

“redirect_uri”: “http://127.0.0.1:8000/auth/callback",
}
credentials.json
Вход в полноэкранный режим Выход из полноэкранного режима

В этом файле теперь хранятся client_id, client_secret и наш URL обратного вызова. URL обратного вызова — это ссылка, которую LinkedIn будет автоматически вызывать каждый раз, когда мы завершаем процесс авторизации.Read Credentials

Теперь давайте создадим функцию, которая позволит нам прочитать этот файл.

import json

def read_creds(filename):
    with open(filename) as f:

    credentials = json.load(f)

    return credentials

creds = read_creds("credentials.json")

client_id, client_secret = creds["client_id"], creds["client_secret"]

redirect_uri = creds["redirect_uri"]
Вход в полноэкранный режим Выход из полноэкранного режима

Единственное, что мы сделали, это прочитали файл, взяли элементы этого файла и присвоили их переменной. Мы более конкретизировали здесь, загрузив данные JSON внутри файла, поэтому этот вариант может не сработать, если вы используете любую другую структуру, например YAML.Authorize The API

Для авторизации API необходимо сгенерировать CSRF-токен для предотвращения подделки межсайтовых запросов. Для этого используется функция create_CSRF_token().

Она создает случайную строку букв для использования в качестве CSRF-токена.

import random

def create_CSRF_token():

    letters = string.ascii_lowercase

    token = "".join(random.choice(letters) for i in range(20))

    return token
Вход в полноэкранный режим Выход из полноэкранного режима

Теперь давайте определим функции, которые открывают наш веб-браузер, анализируют данные, полученные от URL перенаправления, сохраняют наш маркер доступа и устанавливают заголовки запроса.

def open_url(url):

    import webbrowser

    print(url)

    webbrowser.open(url)

def parse_redirect_uri(redirect_response):

    from urllib.parse import parse_qs, urlparse

    url = urlparse(redirect_response)

    url = parse_qs(url.query)

    return url["code"][0]

def save_token(filename, data):

    data = json.dumps(data, indent=4)

    with open(filename, "w") as f:

    f.write(data)

def headers(access_token):

    headers = {

       "Authorization": f"Bearer {access_token}",

       "cache-control": "no-cache",

       "X-Restli-Protocol-Version": "2.0.0",

       }

    return headers
Вход в полноэкранный режим Выход из полноэкранного режима

Далее, функция authorize() говорит то, что она делает. Она откроет URL-адрес авторизации. После авторизации он будет перенаправлен на заданный URI перенаправления.

def authorize(api_url, client_id, client_secret, redirect_uri):

    # Request authentication URL

    csrf_token = create_CSRF_token()

    params = {

    "response_type": "code",

    "client_id": client_id,

    "redirect_uri": redirect_uri,

    "state": csrf_token,

    "scope": "r_liteprofile,r_emailaddress",

   }

    response = requests.get(f"{api_url}/authorization", params=params)

     print(f"""

     The Browser will open to ask you to authorize the credentials.n

    Since we have not set up a server, you will get the error:n

    This site can’t be reached. localhost refused to connect.n

    This is normal.n

    You need to copy the URL where you are being redirected to.n

   """)

    open_url(response.url)

    redirect_response = input("Paste the full redirect URL here:")

    auth_code = parse_redirect_uri(redirect_response)

    return auth_code
Вход в полноэкранный режим Выход из полноэкранного режима

Теперь нужна только одна функция, которая объединит все эти функции вместе и выполнит ваши коды один раз. назовем ее auth.

Логика работы функции auth() выглядит следующим образом:

  • Запустите аутентификацию.
  • При первом запуске функции открывается браузер с просьбой пройти аутентификацию.
  • Вам придется вручную вставить URI перенаправления в запрос.
  • URL будет разобран для извлечения маркера доступа.
  • Токен доступа будет сохранен.
  • В следующий раз вместо запроса на аутентификацию будет использоваться маркер доступа.
def auth(credentials):

    creds = read_creds(credentials)

    print(creds)

    client_id, client_secret = creds["client_id"], creds["client_secret"]

    redirect_uri = creds["redirect_uri"]

    # api_url = "https://www.linkedin.com/oauth/v2"

    api_url = "https://www.linkedin.com/uas/oauth2"

    if "access_token" not in creds.keys():

      args = client_id, client_secret, redirect_uri

      auth_code = authorize(api_url, *args)

      access_token = refresh_token(auth_code, *args)

      creds.update({"access_token": access_token})

      save_token(credentials, creds)

    else:

      access_token = creds["access_token"]

      return access_token
Вход в полноэкранный режим Выход из полноэкранного режима

ура!!! наша функция аутентификации теперь готова. Давайте запустим…..

if __name__ == " __main__":
    credentials = "credentials.json"

    access_token = auth.auth(credentials)
Вход в полноэкранный режим Выйти из полноэкранного режима

Вот что мы получили

Это также автоматически открывает наш браузер

После авторизации LinkedIn перенаправляет нас на обратный звонок, который мы указали в момент создания приложения.

Когда мы передаем URL нашему терминалу, он делает запрос к LinkedIn и требует access_token, на что Linkedin проверит код и ответит access_token, который мы сможем использовать для получения информации от Linkedin.

Вот результат, и если мы вернемся к нашему файлу credentials.json, то обнаружим, что наш файл обновлен с помощью access_token.

Теперь, когда у нас есть доступ к нашему acces_token, мы можем начать запрашивать информацию у LinkedIn API.

Получение ресурсов (Выполнение вызова API Linkedin с помощью Oauth2.0)

Давайте начнем с получения нашей личной информации из LinkedIn, для этого мы перейдем к использованию api клиента.

Для начала нам нужно скопировать наш токен и передать его в заголовок авторизации с префиксом Bearer.

Когда мы передали эту информацию, теперь мы можем ожидать ответа. давайте проверим этот ответ.

Посмотрите, LinkedIn предоставил нам мою информацию. Мы можем дополнительно настроить этот ответ, передавая различные параметры запроса. Давайте попробуем получить мою электронную почту.

Поскольку наше внимание сосредоточено на том, чтобы показать вам, как мы можем взаимодействовать с python без использования библиотеки. Давайте воспользуемся FastAPI, веб-фреймворком python для выполнения запросов.

продолжим позже….

Оцените статью
devanswers.ru
Добавить комментарий