Это неофициальная документация по апи маркета, одной из площадок для торговли телеграм нфт подарками.
для ленивых рабочий код на питоне тут
https://api.tgmrkt.io/api/v1/gifts/salingjson_data= {
"collectionNames": [],
"modelNames": [],
"backdropNames": [],
"symbolNames": [],
"ordering": "Price",
"lowToHigh": True,
"maxPrice": None,
"minPrice": None,
"mintable": None,
"number": None,
"count": 20,
"cursor": '',
"query": None,
"promotedFirst": False,
}- collectionNames - Список названий подарков, которые вы хотите увидеть.
- modelNames - Список моделей подарков, которые вы хотите увидеть (выдает результат даже если не выбрано название подарка).
- backdropNames - Список фонов подарков, которые вы хотите увидеть.
- symbolNames - Список узоров подарков, которые вы хотите увидеть.
- ordering - Тип сортировки (Price | ModelRarity | BackgroundRarity | SymbolRarity | None (по времени выставления)).
- lowToHigh - По возрастанию ли отображать подарки (зависит от выбранного типа сортировки).
- maxPrice - Макс. цена подарка.
- minPrice - Мин. цена подарка.
- mintable - Можно ли вывести подарок в блокчейн (наверное).
- number - Номер подарка.
- count - Макс. кол-во подарков, которое вы получите в ответе (лимит - 20).
- cursor - "Оффсет", с которого получать подарки. Для первой страницы оставляете его пустой строкой, а если необходимо просматривать страницы далее, то берете его из первого запроса из ключа cursor (его значение может быть None, если в первом ответе вы получили меньше подарков, чем указали в лимите), и вставляете в следующий, и так далее.
- query - Неизвестно.
- promotedFirst - Неизвестно.
К сожалению, чтобы как-то успешно взаимодействовать с апи маркета через запросы, нужен токен
Токен берётся по этому юрл:
https://api.tgmrkt.io/api/v1/authОтправляя сюда пост запрос с json телом {"data": init_data}
Ну а init_data можно получить только если вы реально зашли через тг аппку
Следовательно, юзаем куриграм/телетон
Если вы из России, возможно, чтобы ваша сессия была работоспособна, придётся использовать прокси. В куриграме, в отличие от телетона, пока не поддерживается прокси mtproto, в нем можете юзать обычные http/socks5. Поэтому выбор библиотеки за вами. В коде ниже будет использоваться куриграм.
importasynciofrompyrogramimportClientfrompyrogram.raw.functions.messagesimportRequestAppWebViewfrompyrogram.raw.typesimportInputBotAppShortName, InputUserfromurllib.parseimportunquotefromcurl_cffiimportAsyncSessionapi_id=123123123# замени с https://my.telegram.org/authapi_hash='1rghg34hb3g4bkj3gbg134'# замени с https://my.telegram.org/authclient=Client('main')
asyncdefget_auth_token():
asyncwithclient:
bot_entity=awaitclient.get_users('mrkt')
peer=awaitclient.resolve_peer('mrkt')
bot=InputUser(user_id=bot_entity.id, access_hash=bot_entity.raw.access_hash)
bot_app=InputBotAppShortName(bot_id=bot, short_name='app')
web_view=awaitclient.invoke(
RequestAppWebView(
peer=peer,
app=bot_app,
platform="android",
)
)
init_data=unquote(web_view.url.split('tgWebAppData=', 1)[1].split('&tgWebAppVersion', 1)[0])
auth_data= {"data": init_data}
asyncwithAsyncSession() ass:
r=awaits.post(url="https://api.tgmrkt.io/api/v1/auth", json=auth_data)
rj=r.json()
ifrj:
token=rj.get('token', None)
else:
token=Nonereturntokenasyncdefmain():
token=awaitget_auth_token()
print(token)
loop=asyncio.get_event_loop()
loop.run_until_complete(main())Либо вы можете зайти в веб тг, нажать f12, открыть вкладку network, зайти на маркет, найти запрос по https://api.tgmrkt.io/api/v1/auth, и в Response взять этот токен.
Время действия токена неизвестно, но точно более суток.
importasynciofrompyrogramimportClientfrompyrogram.raw.functions.messagesimportRequestAppWebViewfrompyrogram.raw.typesimportInputBotAppShortName, InputUserfromurllib.parseimportunquotefromcurl_cffiimportrequestsMARKET_API_URL='https://api.tgmrkt.io/api/v1'api_id=123123123# замените на своё с https://my.telegram.org/authapi_hash='1rghg34hb3g4bkj3gbg134'# замените на своё с https://my.telegram.org/authclient=Client('main', api_id, api_hash)
asyncdefmain():
token=awaitget_auth_token()
# token = '' или через веб тгheaders= {'Authorization': token, 'Referer': 'https://cdn.tgmrkt.io/'}
json_data= {
"collectionNames": ['Lunar Snake'],
"modelNames": ['Albino'],
"backdropNames": [],
"symbolNames": [],
"ordering": "Price",
"lowToHigh": True,
"maxPrice": None,
"minPrice": None,
"mintable": None,
"number": None,
"count": 20,
"cursor": '',
"query": None,
"promotedFirst": False,
}
try:
r=requests.post(f'{MARKET_API_URL}/gifts/saling', headers=headers, json=json_data)
rj=r.json()
gifts=rj['gifts']
print(gifts)
# Или если нужна следующая страница:# cursor = rj['cursor']# json_data.update({'cursor': cursor})# r=requests.post(f'{MARKET_API_URL}/gifts/saling', headers=headers, json=json_data)# rj=r.json()# print(gifts)exceptExceptionase:
print(e)
# Код выведет первую страницу с подарками Lunar Snake с моделью Albinoasyncdefget_auth_token():
asyncwithclient:
bot_entity=awaitclient.get_users('mrkt')
peer=awaitclient.resolve_peer('mrkt')
bot=InputUser(user_id=bot_entity.id, access_hash=bot_entity.raw.access_hash)
bot_app=InputBotAppShortName(bot_id=bot, short_name='app')
web_view=awaitclient.invoke(
RequestAppWebView(
peer=peer,
app=bot_app,
platform='android',
)
)
init_data=unquote(web_view.url.split('tgWebAppData=', 1)[1].split('&tgWebAppVersion', 1)[0])
auth_data= {'data': init_data}
r=requests.post(url='https://api.tgmrkt.io/api/v1/auth', json=auth_data)
rj=r.json()
ifrj:
token=rj.get('token', None)
else:
token=Nonereturntokenloop=asyncio.get_event_loop()
loop.run_until_complete(main())