Skip to content

boostNT/Tonnel-API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 

Repository files navigation

Tonnel Api Documentation

Это неофициальная документация по апи тонеля, самой популярной площадке для покупки и продаже телеграм подарков на данный момент.

рабочий код на питоне тут

При заходе на сайт, совершается пост запрос по этому юрл:

https://gifts2.tonnel.network/api/pageGifts

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

Но обычного пост запроса не хватит, нужно передать данные для фильтрации подарков в json формате:

json_data = {
    'page': 1,
    'limit': 1,
    'sort': '{"message_post_time":-1,"gift_id":-1}',
    'filter': '{"price":{"$exists":true},"refunded":{"$ne":true},"buyer":{"$exists":false},"export_at":{"$exists":true},"gift_name":"Desk Calendar","model":"Deadline (0.2%)","asset":"TON"}',
    'price_range': None,
    'user_auth': '',
}

Разберём по порядку:

page — Страница с подарками, которую вы хотите увидеть в ответе
limit — Максимальное количество подарков, которое может быть на 1 странице. При значении выше 30 будет возвращать ошибку {'error': 'limit is too big'}
sort — Тип сортировки всех этих подарков (их всего 10) 👇

!!! Для каждого типа сортировки нужно ставить значение -1 либо 1. -1 означает что результат будет в убывании, 1 в возрастании

  • message_post_time — По времени выставления
  • export_at — По времени выставления !! message_post_time со значением 1 даст тот же результат, что и export_at со значением -1, и наоборот !!
  • price — По стоимости
  • gift_num — По номеру подарка (plushpepe-1)
  • modelRarity | backdropRarity | symbolRarity — По процентной редкости аттрибута (модели/фона/узора)
  • rarity — Неизвестно
  • gift_id — Неизвестно

filter — Фильтр для поиска конкретных подарков
Подстроку "price":{"$exists":true},"refunded":{"$ne":true},"buyer":{"$exists":false},"export_at":{"$exists":true}, оставляете как есть, после нее добавляете необязательные параметры для поиска нужного подарка:

  • gift_name - Название
  • model - Модель
  • backdrop - Фон
  • pattern - Узор
  1. Для модели, фона и узора значение нужно указывать в формате regex, чтобы дополнительно не искать процентную редкость. Пример: "gift_name":"Lunar Snake", "model": {"$regex": f"^Albino \\("}
  2. Если же вам лень писать фильтр для регекса или у вас откуда-то есть процентная редкость аттрибута, то указываете: "model": "Albino (1.5%)"
  3. Для поиска по нескольким объектам одного аттрибута(хотите увидеть 5 моделей/фонов), нужно указывать значение в формате списка: "model":{'$in':["Synthwave (0.3%)", "Albino (1.5%)"]}\
  • Альтернативный вариант для regex: "model": {'$regex':f"^({'|'.join(["Synthwave", "Albino"])})"}
    В самом конце фильтра указываете последний фильтр: "asset":"TON", соответственно отвечающий за валюту в которой будут выданы подарки. Может быть TONNEL и USDT, но смысла от такого фильтра я не вижу, результаты будут милипиздрические.

price_range - Диапозон цены в формате списка: 'price_range': [1,1000]. Оставьте None для отключения фильтра по цене.
user_auth - Обязательное поле, в значении пустая строка означает что вы никак не залогинились на сайте и просто просматриваете подарки.

И самое главное - библиотека для запросов

Код будет на питоне, кому надо на другом яп сами подгоняйте

Поскольку тонель делал не коля из 3Б, обычная либка по типу requests/httpx не подойдет. Отлично работает с curl_cffi, также для идеальной работы рекомендую юзать фейк юзерагент.

pip install curl_cffi fake_useragent

Рабочий код на питоне:

import json
from curl_cffi import requests
from fake_useragent import UserAgent

ua = UserAgent()
usag = ua.random


headers = {
    "authority": "gifts2.tonnel.network",
    "accept": "*/*",
    "accept-encoding": "gzip, deflate, br, zstd",
    "accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
    "content-type": "application/json",
    "origin": "https://market.tonnel.network",
    "priority": "u=1, i",
    "referer": "https://market.tonnel.network/",
    "sec-ch-ua": '"Google Chrome";v="137", "Chromium";v="137", "Not/A)Brand";v="24"',
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": '"Windows"',
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-site",
    "user-agent": usag
}


sort_data = {
    'message_post_time': -1,
    'gift_id': -1
}

filter_data = {
    "price":{"$exists": True},
    "refunded":{"$ne":True},
    "buyer":{"$exists": False},
    "export_at":{"$exists": True},
    "gift_name":"Lunar Snake",

    "model": "Albino (1.5%)",
    # Либо юзаем regex если нет возможности взять % редкость
    # "model":{"$regex": "^Albino \\("},

    # Запрос нескольких моделей:

    # "model":{'$in':["Synthwave (0.3%)", "Albino (1.5%)"]},
    # Либо юзаем regex если нет возможности взять % редкость
    # "model": {'$regex':f"^({'|'.join(["Synthwave", "Albino"])})"},
    "asset":"TON"
}

json_data = {
    'page': 1,
    'limit': 5,
    'sort': json.dumps(sort_data),
    'filter': json.dumps(filter_data),
    'price_range': None,
    'user_auth': '',
}



response = requests.post('https://gifts2.tonnel.network/api/pageGifts', json=json_data, impersonate="chrome", headers=headers)
print(response.json())
# Код выведет первую страницу с 5 самыми новыми подарками с именем Lunar Snake, с моделью Albino

В общем как-то так, за последтсвия использования информации вами из этой статьи ответственность на мне не несётся.
тг для связи - @bxxst

P. S. Можете глянуть этот репозиторий уже с полноценной либкой по апи тоннеля (не моей)

About

Документация по апи тоннеля

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published