Как интегрировать 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("";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])
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 и т.д. Короче все будет заебись.
Вот тестовая таблица с итогом.
FAQ
Тут будут вопросы, которые мне будут задавать в лс, а я их сюда
Как проверять балансы определенных токенов?
Легко, используйте ссылку:
https://etherscan.io/token/контракт?a=кошелек
Где контракт - адрес контракта, а кошелек - адрес кошелька. И в xpath используйте путь до тега с балансом (выделил на скрине)
Заключение
Я описал самый сложный кейс, в других случаях будет намного проще с меньшим количеством формул, я подготовил вас к любой хуйне.
Основная проблема - ограничение гугла, он будет обрабатывать IMPORTXML только 100 запросов в час, есть решения этой проблемы, сложные и легкие, платные и бесплатные. В следующей статье соберу все варианты (но не точно).
Можете задавать вопросы @th0masi (один хуй и так через день по таблицам пишут)
Если вы хотите отблагодарить, то без проблем, богачи ебучие:
TRC-228 TR8VSXhDUWQKmBswJ1R69NsvrhXgyENbya
BSC-696 0x303175c889263D8fD7Bc95887a0cE92A93AEe671