+7 (812) 677-17-05

Google Sheets в OSINT: интегрируем внешние API

#

Продолжаем наш разговор об использовании электронных таблиц в работе OSINT-аналитиков. В первой части нашего цикла статей мы говорили об автоматизации генерации дорков (расширенных операторов поисковых запросов). Сегодня мы коснемся вопроса интеграции в таблицы данных из внешних API. За подробностями добро пожаловать под кат!

Что такое API?

Application Programming Interface (API).

API или Application Programming Interface — это программный интерфейс, то есть описание способов взаимодействия одной компьютерной программы с другими. Иными словами, описание, которое позволяет программе А понимать программу Б и эффективно взаимодействовать с ней.

Откуда берутся эти самые API? Сегодня они есть практически у любого онлайн-сервиса. Они бывают бесплатные, требующие регистрации или коммерческие. Большое количество доступных API вы можете позаимствовать, к примеру, на следующих ресурсах:

Начнем нашу работу с Google Sheets с того, что создадим новую электронную таблицу и выберем ее будущую функциональность. Допустим, что нашей задачей будет сбор данных о субъектах бизнеса (юридических лицах и индивидуальных предпринимателях). В этом случае нам пригодится API от следующего сервиса:

Этот API ограничивает только частоту запросов и максимальное число соединений. Для частного проекта подойдет идеально. Регистрируемся и получаем индивидуальный API-ключ. Ключ API — это строка уникальных идентификаторов, предназначенных в первую очередь для определения трафика приложений от клиентов API. Проще говоря, это ваш идентификатор в качестве пользователя API конкретного сервиса.

Предположим, что мы хотим получать ответ внешнего сервиса по запросу ОГРН (основной государственный регистрационный номер) юридического лица. Чтобы интегрировать возможность делать API-запрос к datanewton.ru, перейдем во вкладку ‭«Расширения» и кликнем на пункт ‭«Apps Script». Откроется новая вкладка, в которой мы можем вводить скрипты для работы с таблицей.

Пишем наш скрипт

Итак, пишем наш первый скрипт для интеграции API в Google Sheets:

function COMPANYLOOKUP(input) {

response=UrlFetchApp.fetch(“https://api.datanewton.ru/v1/counterparty?key=**********&filters=OWNER_BLOCK%2CADDRESS_BLOCK&ogrn=”+input).getContentText();

return response;

}

В этом скрипте у нас:

Сохраняем скрипт и возвращаемся к таблице. Теперь нам доступна новая функция COMPANYLOOKUP, которая позволит выгружать данные юрлица при помощи API сервиса datanewton.ru. Запустим ее при помощи следующей команды:

Где:

Результат, в формате JSON, будет загружен в ту ячейку, в которой водилась функция =COMPANYLOOKUP(A2).

Попробуем проделать схожие вещи с API других сервисов. Так, для проверки номера мобильного телефона, мы можем воспользоваться API сервиса http://htmlweb.ru/. В таком случае, скрипт получения данных может выглядеть так:

function PHONENUMBERLOOKUP(input) {

response=UrlFetchApp.fetch(“http://htmlweb.ru/api/mnp/phone/”+input+”?api_key=**********”).getContentText();

return response;

}

Где:

Сохраняем скрипт и возвращаемся к таблице. Вводим функцию:

И получаем данные о телефоне из htmlweb.ru. Все получилось… Но здесь нам пригодится небольшой лайфхак.

Номера телефонов в таблицу часто попадают в различных формах написания. Это очень раздражает. Привести все телефоны к единому формату также можно при помощи электронных таблиц. Пишем следующую функцию:

=CONCATENATE(IF(LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C2;”,”;””);”;”;””);” “;””);”+”;””);”)”;””);”(“;””);”-“;””))=10;(CONCATENATE(“7″;SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C2;”,”;””);”;”;””);” “;””);”+”;””);”)”;””);”(“;””);”-“;””)));””);IF(AND(LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C2;”,”;””);”;”;””);” “;””);”+”;””);”)”;””);”(“;””);”-“;””))=11;LEFT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C2;”,”;””);”;”;””);” “;””);”+”;””);”)”;””);”(“;””);”-“;””))=”7″);SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C2;”,”;””);”;”;””);” “;””);”+”;””);”)”;””);”(“;””);”-“;””);””);IF(AND(LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C2;”,”;””);”;”;””);” “;””);”+”;””);”)”;””);”(“;””);”-“;””))=11;LEFT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C2;”,”;””);”;”;””);” “;””);”+”;””);”)”;””);”(“;””);”-“;””))=”8″);CONCATENATE(“7″;MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C2;”,”;””);”;”;””);” “;””);”+”;””);”)”;””);”(“;””);”-“;””);2; 10));””))

 

Где:

Идем дальше. Попробуем научить таблицу пробивать нам номера кредитных карт. API https://lookup.binlist.net/ очень простой и не требует регистрации ключа. Поэтому для запроса информации скрипт будет выглядеть следующим образом:

function CARDNUMBERLOOKUP(input) {

response=UrlFetchApp.fetch(“https://lookup.binlist.net/”+input).getContentText();

return response;

}

Где:

Сохраняем скрипт и идем обратно к таблице, где вводим функцию:

Отлично, данные были выгружены. Но есть нюанс.

Поговорим об удобстве

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

Для того, чтобы понять структуру данных, содержащихся в JSON, вставим их в одну из читалок JSON. Например, в https://jsonformatter.curiousconcept.com/#. Теперь мы можем увидеть данные JSON со всеми полями и вкладками. Ориентируясь на них, мы можем составить скрипт, позволяющий копировать отдельные пункты JSON и вставлять их в нашу таблицу.

Вернемся к нашему примеру с проверкой кредитных карт. Заходим в «Apps Script» и добавляем новый скрипт:

function PARSER(input) {

var data = JSON.parse(input);

name=data.bank.name

return name;

}

Где:

Сохраняем, возвращаемся в таблицу и вводим функцию:

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

Вернемся к таблице с проверкой юридических лиц и попробуем скопировать в нее данные JSON аналогичным образом. Допустим, что нам будет нужно выгрузить данные об:

Это предполагает написание трех отдельных скриптов:

function PARSERDIR(input) {

var data = JSON.parse(input);

line_address=data.company.address.line_address

return line_address;

}

function PARSERINN(input) {

var data = JSON.parse(input);

inn=data.inn

return inn;

}

function PARSERSTATUS(input) {

var data = JSON.parse(input);

status_egr=data.company.status.status_egr

return status_egr;

}

Сохраняем созданные скрипты и используем новые команды в таблице:

Что дальше?

Для того, чтобы получить полноценный сервис для проверок, конечно, придется потрудиться и прописать все необходимые скрипты — как для получения данных, так и для их помещения в электронную таблицу. Однако что может заменить чувство гордости за разработку собственного продукта? Причем без навыков программирования.

Мы продолжим этот цикл статей и в следующий раз расскажем про скрапинг данных с тех сайтов, у которых нет API-интерфейса. И это в том числе про то, как можно получать сведения о судимостях и нарушениях граждан. А в четвертой статье затронем тему визуализации полученных данных. Оставайтесь с нами, будет интересно!

10.09.2024 Блог
Читайте все свежие новости первыми. Подписывайтесь на нас в Telegram
Том Хантер Том Хантер Pentest Guru

Мистер Том Хантер, вдохновитель нашей компании по обеспечению кибербезопасности

Спасибо

Спасибо, что заполнили форму! Мы свяжемся с вами в ближайшее время по указанным контактным данным!

Обратный звонок

Заполните форму и наш специалист свяжется с вами в ближайшее время.

    Принимаю соглашение об использовании персональных данных