- PVSM.RU - https://www.pvsm.ru -

Как получить данные о 5 млн компаний через LinkedIn REST API или почему в OAuth лучше разрешать использовать Request Token только один раз

Введение

С помощью LinkedIn Company Lookup API [1] можно получить информацию о компании зарегистрированной на LinkedIn. Искать можно по ключевым словам, а можно и с помощью ID. Например, GET запрос

http://api.linkedin.com/v1/companies::(1337)

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

Также существуют органичения [2] на количество запросов в день, которые устанавливаются как для приложения так и для отдельного пользователя. В частности, для получения информации о компаниях лимиты следующие:

Как получить данные о 5 млн компаний через LinkedIn REST API или почему в OAuth лучше разрешать использовать Request Token только один раз

Таким образом, как видно на рисунке выше, LinkedIn не позволяет одному пользователю получить информацию о более чем 500 компаниях в течении одного дня. При этом важно отметить, что считается именно количество запрашиваемых компаний, а не запросов (как говорилось выше, в одном запросе может запрашиваться информация сразу о нескольких компаниях).

Как это должно работать

Для авторизации запросов LinkedIn использует oAuth, причем на данный момент поддерживаются обе версии: OAuth 2.0 [3], а также и более старая OAuth 1.0a [4]. В случае использования версии 1.0a кратко механизм можно описать так:

  1. Делаем запрос к API чтобы получить ссылку для автороризации приложения, при этом также создается request_token.
  2. Необходимо открыть ссылку в браузере и вручную разрешить доступ для приложения.
  3. Сгенерированый ранее request_token используется для получения access_token (с помощью вызова соответствующего метода API).

Таким образом шаги, описанные выше, необходимо проделать только один раз, а access_token должен храниться в надежном месте и использоваться для всех последующих вызовов методов API. В этом случае мы и столкнемся с тем, что используя одного пользователя не сможем получить более 500 компаний в день.

Как это работало на самом деле

В реальности я попытался не получать access_token, а вызывать методы API используя request_token, сгенерированный на шаге 1 (шаг 2 в любом случае обязательный, иначе request_token будет непригоден). И в итоге я обнаружил, что методы API успешно работали и с request_token первые 5 минут (потом истекает его время жизни). Кроме того при таком способе не действовал лимит для пользователя, только лимит на 100 000 компаний в день для приложения. Однако тут на помощь приходит создание нескольких приложений. Очевидным минусом такого подходя является необходимость авторизации приложения каждые 5 минут. Но при должном уровне автоматизации и интеграции с браузером это не было большой проблемой. В итоге за пару дней неспешной работы простенького кода была скачана база с около 5 млн компаний хранящихся на LinkedIn.

Рекомендация

Не стоит давать возможность вызывать методы API (кроме метода получения access_token) с помощью временного request_token. Это рекомендация прописана в секции 6 [5] OAuth 1.0а

P.S.: На текущий момент LinkedIn уже поправил ситуацию в соответствии с приведенной рекомендацией.

Автор: Ehuhaa

Источник [6]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/59049

Ссылки в тексте:

[1] LinkedIn Company Lookup API: https://developer.linkedin.com/documents/company-lookup-api-and-fields

[2] органичения: https://developer.linkedin.com/documents/throttle-limits

[3] OAuth 2.0: http://oauth.net/2/

[4] OAuth 1.0a: http://oauth.net/core/1.0a/

[5] секции 6: http://oauth.net/core/1.0a/#auth_step1

[6] Источник: http://habrahabr.ru/post/219669/