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

С помощью LinkedIn Company Lookup API можно получить информацию о компании зарегистрированной на LinkedIn. Искать можно по ключевым словам, а можно и с помощью ID. Например, GET запрос http://api.linkedin.com/v1/companies::(1337) вернет информацию о самой компании LinkedIn. Весьма удобно, что через запятую можно указать сразу несколько ID, однако при этом стоит учитывать что слишком много ID указать в одном запросе также не получится из-за ограничения на размер самого запроса.Также существуют органичения на количество запросов в день, которые устанавливаются как для приложения так и для отдельного пользователя. В частности, для получения информации о компаниях лимиты следующие: 16e5ebac13e3a0601f31009ca4804940.png

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

Для авторизации запросов LinkedIn использует oAuth, причем на данный момент поддерживаются обе версии: OAuth 2.0, а также и более старая OAuth 1.0a. В случае использования версии 1.0a кратко механизм можно описать так: Делаем запрос к API чтобы получить ссылку для автороризации приложения, при этом также создается request_token. Необходимо открыть ссылку в браузере и вручную разрешить доступ для приложения. Сгенерированый ранее 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 OAuth 1.0аP.S.: На текущий момент LinkedIn уже поправил ситуацию в соответствии с приведенной рекомендацией.

© Habrahabr.ru