# NFT Data. Что откуда брать и как использовать. **Published by:** [soldi](https://paragraph.com/@soldi/) **Published on:** 2022-09-16 **URL:** https://paragraph.com/@soldi/nft-data ## Content Канал типа умного чела: https://t.me/soldidlos Чатик типа девелоперов: https://t.me/soldi_chat В этой статье мы разберем откуда я беру большинство инфы для трекеров и пятиминуток. Также эти данные могут быть использованы в любых задачах, которые связаны с NFT статистикой. Говорить мы сегодня будем про покупки/продажи/листинги NFT. Для начала с помощью чего мы это будем делать.import requests import cloudscrapper import pydantic requests - тут все понятно cloudscrapper - тоже запросы, но которые умеют обходить Cloudflare. Т.к. сегодня мы будем учиться получать инфу, которую не должны получать из запроса, эта библиотека нам очень пригодится pydantic - просто бомбовая библиотека для парсинга и взаимодействия с джсон файлами. Для того чтобы лучше понять что это, сначала изучаем классы ВИДЕО, потом смотрим вот этот видос про саму библиотекуОткуда берем инфуНачнем с того, что вся информация есть на блокчейне, но это для очень умных людей, которые любят копаться в огромных json файлах, которые еще и выглядят вырвиглазно. Если вам не сильно важна скорость получения данных (разница в несколько секунд), то смело забиваем болт на прямое получение инфы из блокчейна до момента, пока не созреем до этого. Мы же сегодня будем пользоваться API MagicEden/CoralCube/Solscan. Что такое API? API - это протокол взаимодействия программ. Когда вы заходите на сайт, в большинстве случаев, от сервера нам приходит ответ в виде джсон файла, который открывается на фронтенде как нужно сайту. Именно этот запрос и ответ на него мы и будем использовать. Где-то легально, где-то не очень. Кстати все запросы, очевидно, можно открывать в браузере как обычную ссылку и смотреть что там есть. Удобно, чтобы каждый раз не менять или не создавать что-то в питоне.MagicEden APIЛегальное решение - https://api.magiceden.dev/ В МЕ решили дать возможность разработчикам получать информацию в удобной форме, вообще не взаимодействуя с блокчейном. То бишь мы взаимодействуем с их сайтом. Если какой-то инфы нет на сайте, мы ее не увидим. Например каких-то скам нфт и так далее. То же кстати касается и продаж на сторонних сайтах, хотя вроде как с какого-то момента они там есть, но я когда делал калькулятор профита, мне приходилось брать инфу и с корала и с ме, потому что какой-то инфы там нет. Плюсы:Отличные гайды. Все понятно, просто, с примерами кода для многих языковВ примерах есть уже готовый код + информация, которую вы получите, удобно чтобы самому не разбираться какой запрос за что отвечаетЛегальность. Это открытая фича от МЕ, то есть проблем с тем, что у вас что-то не работает не будет. (В отличии от случаев, когда вы обходными путями получаете инфу, и вам надо ебаться с обходом проверок и прочего)Минусы:Рейт лимиты. Это самый главный минус, который не дает использовать все возможности API на полную. У вас есть ограничение по кол-ву запросов с одного IP. Да, это решается с помощью проксей, но опять-таки это лишняя трата времени + финансов.Итог: Хорошее решение, для того чтобы разобраться в том, как все работает. Плюс там есть информация, которой нет в других запросах и я сам использую этот API в таких ситуациях.CoralCube APIВот тут уже начинается немного хакерства. Подрубаем Cloudscraper и начинаем шаманить. Для начала мы инициализируем скрапер:import cloudscraper scraper = cloudscraper.create_scraper(browser={ 'custom': 'customname/1.0' }) browser ставите рандомный, просто чтобы он был уникальный, зачем это делается объяснять не буду, просто так меньше вероятность удариться в защиту Используем его как обычный requests. Прям 1 в 1:r = scraper.get(url="url") Поддерживается также и .json() метод и .status_code. И конечно же POST, если вам это нужно. Короче говоря тот же реквест, ток с обходом защиты. Теперь к самим запросам с корала, я собрал те, которые сам часто использую:https://api.coralcube.io/v1/getUserActivities?pubkey={wallet} Получаем всю активность с кошелька. Покупки, продажи, минты(!). Но тут могут быть пропуски, если продажа была на другой площадке + очень неудобно показывается продажа и покупка, одним словом execute_sale, где надо смотреть на покупателя и продавца, но думаю разберетесь.Простой пример как это сортировать:#wallet = "our wallet" type = value['type'] if value['type'] == 'execute_sale' and value['buyer'] == wallet: type = 'buy' elif value['type'] == 'execute_sale' and value['buyer'] != wallet: type = 'sell' https://api.coralcube.io/v1/getActivity?offset=0&page_size=50&activity_type=sales Запрос на получение ласт активности почти по всем площадкам (думаю сами понимаете, где это используется) offset - смещение page_size - количество транзакций в одном запросеhttps://api.coralcube.io/v1/getUserProfile?pubkey={wallet} Получаем все NFT на кошельке в одном(!!!) запросеhttps://api.coralcube.io/v1/getItems?offset=0&page_size=50&ranking=price_asc&symbol={symbol} Получаем все айтемы коллекции (с помощью этого запроса делаю снепшоты)Тут не все запросы, но описывать и искать все нет смысла. Если вам нужно что-то другое, дальше я опишу как искать такие запросы и смотреть что в них хранится. Плюсы:Многая информация получается одним запросом, что очень удобноЕсть огромное количество разных запросов на любой вкусВ активити есть минтыОтсутствие явных рейтлимитовМинусы:Не всегда очевидная информация, как в примере с продажамиЦены на фри минты ноль, хотя нам всем понятно, что есть еще и комиссияКак и в случае МЕ, покупки на других площадках отображаются некорректноИтог: Обожаю этот сайт и его запросы. Есть все, если разобраться, то можно получить что угодно.Учимся находить запросы на примере Solscan APIДавайте разберемся как искать запросы на примере сайта Solscan Заходим на любую транзакцию или аккаунт или токен, не суть. Разберем на транзакции, но суть везде одинаковая. Допустим мне нужно узнать сколько человек потратил на минт NFT. https://solscan.io/tx/5j8wZhJrXMusXtC32SAhCNNSbNCTkqWDyNGnusERKdHso4Efv1GWQHtrHGH8pK6WdYfiUeT3fGYPyuEcEiuGD1JX Транзакция с минтом. Вся информация, которая есть на сайте, в том или ином образе есть в запросе. Открываем network (f12 - network) и выбираем Fetch/XHR Обновляем страницу, чтобы заново отправить запрос на сервер и получить ответИ видим, что мы получили 4 запроса. Нас интересует 4 запрос, а именно transaction?tx…. он больше всего похож на нужный нам, кликаем по нему и переходим в Preview, чтобы посмотреть что он возвращает (иногда на поиск нужного запроса может уйти несколько десятков минут)И видим нужную нам строку, наш аккаунт и post и pre balance. То есть мы получаем баланс до транзакции и после, что и равняется по сути цене минта. Значения здесь указываются в lamports (1 lamports = 0.000000001 sol). Легким подсчетом получаем, что preBalance = 6113330525 * 0.000000001 = 6.113330525 postBalance = 100632445 * 0.000000001 = 0.100632445 Вычитаем и итого минт нам обошелся в 6.01269808 sol. Мы получили, то что хотели. Если нам нужно использовать это в программе, то переходим в Headers и смотрим, какой запрос нам это далВ нашем случае это https://api.solscan.io/transaction?tx=5j8wZhJrXMusXtC32SAhCNNSbNCTkqWDyNGnusERKdHso4Efv1GWQHtrHGH8pK6WdYfiUeT3fGYPyuEcEiuGD1JX&cluster= Где мы отчетливо видим транзакцию и можем ее заменить на любую другую и получить точно такой же джсон с информацией, чтобы использовать в наших целях. У солскана также есть паблик API, но он с рейтлимитами, а я его использую очень часто (например, чтобы определить стоимость минта при анализе кошелька, т.к. на коралкубе пишет 0, что очевидное вранье, и нужно смотреть по транзакции) Вот ссылка, можете посмотреть, может под ваши задачи будет хватать паблик API. Тут плюсы и минусы не буду расписывать, т.к. под определенные задачи - аналога я не нашел, да и не искал если честно. Единственный минус, в том, что нужно разбираться с инфой и правильно ее читать, но это придет с опытом. В целом, зная то, как искать запрос, вы можете спокойно зайти на LMNFT, посмотреть какой запрос отвечает за появление новых коллекций и сделать себе моник на новые минты LMNFT. И так с любым сайтом. Если бы у меня была эта информация, когда я только начинал кодить, я бы сэкономил себе десятки часов. По факту такой инфы на русском вы не найдете нигде. Уникальная инфа, которая облегчает работу и дает зеленый свет на многие задумки и хотелки. Надеюсь вы оцените это. Спасибо, что прочитали, как всегда подписку на канал, вопросы в чат, ну и маме позвоните, спросите как дела. Пишите крутые штуки и развивайтесь. Канал типа умного чела: https://t.me/soldidlos Чатик типа девелоперов: https://t.me/soldi_chat ## Publication Information - [soldi](https://paragraph.com/@soldi/): Publication homepage - [All Posts](https://paragraph.com/@soldi/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@soldi): Subscribe to updates