February 8, 2023

Как интегрировать Google Shits в крипту

Говорят эту статью будут продавать на курсе senior-программиста от Литвина.

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

Расскажу про основные формулы и нет, это не программирование, это блять физика. E=mc2. Это совсем не сложно, поверьте.

Основная функция IMPORTXML

IMPORTXML - функция, которая импортирует данные с необходимой страницы в таблицу.

Синтаксис выглядит так: ImportXML(ссылка; запрос_xpath)

Ссылка - ну тут все просто, ссылка откуда берем данные, т.к. она у нас не уникальная, то мы указываем неуникальную часть. К примеру, нам нужно вытащить в таблицу баланс кошелька X, ссылка на страницу будет выглядить так:

https://etherscan.io/address/0x8AF6727AD0Ad4FB3CEE9c81C29A3C741913c7B5a

Но формула должна быть уникальная, поэтому предварительно мы будем помещать адреса кошельков в столбец А, а данные брать из этого столбца, тогда в формуле нам нужно будет указать "&A2&":

https://etherscan.io/address/"&A2&"

В таком случае, поместив любой кошелек в ячейку А2, мы получим уникальную ссылку с этим кошельком.

запрос_xpath - гугл все придумал за нас. Открываете любую страницу, выделяете нужный текст -> ПКМ -> Посмотреть код:

Гугл подсвечивает нужный тег, останется только его скопировать ПКМ -> Копировать -> Копировать полную строку Xpath

Получаем такую белеберду /html/body/div[1]/main/div[4]/div[1]/div[1]/div/div[2]/div[1]/div[2] чтобы формула понимала что нам нужно достать именно текст или значение из этого тега.

Вот такая формула получается:

=ImportXML("https://etherscan.io/address/"&A2&""; "/html/body/div[1]/main/div[4]/div[1]/div[1]/div/div[2]/div[1]/div[2]")

Но что-то не то, да? почему то данные разъехались в 3 столбца. Так бывает когда внутри тега, если еще теги, но это не беда. Есть такая функция JOIN, которая так сказать объединяет.

И вот тут начинается матрешка.

Функция JOIN

Синтаксис выглядит так: JOIN(разделитель; значение_или_массив1)

Разделитель - соответственно знак разделения (он нам не нужен)

Значение - тут все просто вставляем нашу формулу выше.

Формула у нас будет выглядеть так:

=JOIN("";предыдущая функция)

С данными:

=JOIN("";ImportXML("https://etherscan.io/address/"&A2&""; "/html/body/div[1]/main/div[4]/div[1]/div[1]/div/div[2]/div[1]/div[2]"))

Что дальше по плану? Мне не нравится буквы Ether - эта хуйня не даст нам интерпретировать ячейку как число, соответственно считать суммы мы не сможем.

А чтобы убрать из ячейки все буквы у нас есть формула REGEXREPLACE

Формула REGEXREPLACE

Синтаксис: REGEXREPLACE(текст; регулярное_выражение; замена)

текст - наша предыдущая формула

регулярное_выражение - их множество разных видов и как вы поняли они регулярные, поэтому расписывать каждую не вижу смысла.

замена - чем мы заменим символы, которые найдем по регулярному выражению

В нашем случае регулярное выражение будет [a-zA-Z\s] - по факту оно ищет все буквы в ячейке, а заменять мы их будет пустотой.

Формула у нас будет выглядеть так:

=REGEXREPLACE(предыдущие_функции);"[a-zA-Z\s]";"")

С данными:

=REGEXREPLACE(JOIN("";ImportXML("https://etherscan.io/address/"&A2&""; "/html/body/div[1]/main/div[4]/div[1]/div[1]/div/div[2]/div[1]/div[2]"));"[a-zA-Z\s]";"")

Вау уже круто, но мне не нравится три тысячи знаков после запятой (а, то есть точки).

И здесь у нас есть формула, а называется она ЛЕВСИМВ

Формула ЛЕВСИМВ

Синтаксис: ЛЕВСИМВ(строка; [число_символов])

строка - наша предыдущая формула

число_символов - которое мы хотим оставить слева


Давайте ради исключения для эфира оставим 5 символа после точки, получается 6 (точку тоже считаем).

Формула у нас будет выглядеть так:

=ЛЕВСИМВ(предыдущие_функции;7)

С данными:

=ЛЕВСИМВ(REGEXREPLACE(JOIN("";ImportXML("https://etherscan.io/address/"&A2&""; "/html/body/div[1]/main/div[4]/div[1]/div[1]/div/div[2]/div[1]/div[2]"));"[a-zA-Z\s]";"");7)

И это уже ближе к истине, только проблема - гугл не считает данные с точкой числом.

Но это легко решается заменой точки на запятую (ну или настройки там еще чет есть, не разбирался), а как заменить? ...

Формула ПОДСТАВИТЬ

Синтаксис: ПОДСТАВИТЬ(text_to_search, search_for, replace_with, [occurrence_number])

text_to_search - наша формула

search_for - что заменяем

replace_with - НА что заменяем

В нашем случае мы меняем "." на "," и выглядит формула так:

=ПОДСТАВИТЬ(предыдущая_формула;".";",")

С данными:

=ПОДСТАВИТЬ(ЛЕВСИМВ(REGEXREPLACE(JOIN("";ImportXML("https://etherscan.io/address/"&A2&""; "/html/body/div[1]/main/div[4]/div[1]/div[1]/div/div[2]/div[1]/div[2]"));"[a-zA-Z\s]";"");7);".";",")

И вот мы наконец получили рабочую формулу, чуть-чуть наведем красоту:

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

Формула ЗНАЧЕН

Синтаксис: =ЗНАЧЕН(ячейка с формулой)

В моем случае формула в ячейке H2:

И о чудо:

Все работает, все считает.

Кстати, посчитать все значения тоже легко!

=СУММ(ЕСЛИОШИБКА(B2:B51;0)) B2:B51 - диапазон ячеек для суммирования.

В данном случае ЕСЛИОШИБКА нужна для ячеек с #Н/Д, когда вы размножаете формулу, пока нет кошельков формула будет писать #Н/Д

Последний ваш вопрос - как множить формулы, неужели руками? Нет

Выделяйте формулу и видите справа внизу квадратик?

Тяните его вниз, данные в формуле будут заменять автоматически. Если формула с кошельком из А2, то он дальше будет брать с А3, А4 и т.д. Короче все будет заебись.

Видите на 20 строке берет данные из А20

Вот тестовая таблица с итогом.

FAQ

Тут будут вопросы, которые мне будут задавать в лс, а я их сюда


Как проверять балансы определенных токенов? Легко, используйте ссылку:

https://etherscan.io/token/контракт?a=кошелек

Где контракт - адрес контракта, а кошелек - адрес кошелька. И в xpath используйте путь до тега с балансом (выделил на скрине)

Заключение

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

Основная проблема - ограничение гугла, он будет обрабатывать IMPORTXML только 100 запросов в час, есть решения этой проблемы, сложные и легкие, платные и бесплатные. В следующей статье соберу все варианты (но не точно).

Можете задавать вопросы @th0masi (один хуй и так через день по таблицам пишут)

Если вы хотите отблагодарить, то без проблем, богачи ебучие:

TRC-228 TR8VSXhDUWQKmBswJ1R69NsvrhXgyENbya
BSC-696 0x303175c889263D8fD7Bc95887a0cE92A93AEe671