Last active
February 2, 2025 18:15
-
-
Save anomal3/79d338224b5f85d8fc6b96111a7d4d9e to your computer and use it in GitHub Desktop.
p2p Api Bybit [BUY REQUEST]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Не документированный API Bybit | |
* На случай если ты мой друг столкнулся с тем что нужны трейды p2p сегмента а Bybit тебе суёт километровый API | |
* Пользуйся на здоровье этим кодом чтобы получить среднее значение трейдов | |
* Взято из запросов браузера https://www.bybit.com/fiat/trade/otc | |
*/ | |
using Newtonsoft.Json.Linq; | |
using System.IO.Compression; | |
using System.Net.Http.Headers; | |
using System.Text; | |
/* | |
* tokenId - валюта | |
* currencyId - фиат | |
* payment [\"585\"] - Это сбербанк | |
* side - в душе не ебу что это | |
* size - размер выдаваемого массива. На странице 10, можно ли больше? не могу сказать | |
* page - какую страницу показывать | |
* amount - сумма покупки | |
* authMaker - маркер авторизации влияет на сумму распродажи (Трогать не надо т.к. появляются ещё параметры) | |
* canTrade - будем ли торговать (без авторизации не надо) | |
* itemRegion - не ебу | |
*/ | |
static async Task Main(string[] args) | |
{ | |
var url = "https://api2.bybit.com/fiat/otc/item/online"; | |
var jsonContent = | |
"{\"userId\":\"\",\"tokenId\":\"USDT\",\"currencyId\":\"RUB\",\"payment\":[\"585\"],\"side\":\"1\",\"size\":\"10\",\"page\":\"1\",\"amount\":\"100000\",\"authMaker\":false,\"canTrade\":false,\"itemRegion\":2}"; | |
using (var client = new HttpClient()) | |
{ | |
var content = new StringContent(jsonContent, Encoding.UTF8, "application/json"); | |
// Добавляем заголовки | |
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); | |
client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip")); | |
client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate")); | |
client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("br")); | |
client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("zstd")); | |
client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("en")); | |
client.DefaultRequestHeaders.Add("dnt", "1"); | |
client.DefaultRequestHeaders.Add("lang", "en"); | |
client.DefaultRequestHeaders.Add("origin", "https://www.bybit.com"); | |
//Не обязательные параметры (влияния не заметил) | |
//client.DefaultRequestHeaders.Add("platform", "PC"); | |
//client.DefaultRequestHeaders.Add("priority", "u=1, i"); | |
//client.DefaultRequestHeaders.Referrer = new Uri("https://www.bybit.com/"); | |
//client.DefaultRequestHeaders.Add("risktoken", "dmVyMQ|Njc1YjE"); | |
var response = await client.PostAsync(url, content); | |
if (response.IsSuccessStatusCode) | |
{ | |
var responseStream = await response.Content.ReadAsStreamAsync(); | |
string responseContent; | |
// Проверяем, сжат ли ответ | |
if (response.Content.Headers.ContentEncoding.Contains("gzip")) | |
{ | |
using (var decompressedStream = new GZipStream(responseStream, CompressionMode.Decompress)) | |
using (var reader = new StreamReader(decompressedStream)) | |
{ | |
responseContent = await reader.ReadToEndAsync(); | |
} | |
} | |
else if (response.Content.Headers.ContentEncoding.Contains("deflate")) | |
{ | |
using (var decompressedStream = new DeflateStream(responseStream, CompressionMode.Decompress)) | |
using (var reader = new StreamReader(decompressedStream)) | |
{ | |
responseContent = await reader.ReadToEndAsync(); | |
} | |
} | |
else | |
{ | |
using (var reader = new StreamReader(responseStream)) | |
{ | |
responseContent = await reader.ReadToEndAsync(); | |
} | |
} | |
// Десериализация как объекта чтобы не парсить структурой | |
JObject responseObject = JObject.Parse(responseContent); | |
// Получаем массив данных и берём за входящие данные data | |
JArray dataArray = (JArray)responseObject["result"]["items"]; | |
List<double> averageList = new List<double>(); | |
foreach (var item in dataArray) | |
{ | |
// Извлекаем price по имени | |
string price = item["price"]?.ToString(); | |
averageList.Add(double.Parse(price.Replace('.', ','))); | |
} | |
double average = averageList.Average(); | |
Console.WriteLine("Average 10: " + average); | |
} | |
else | |
{ | |
Console.WriteLine("Error: " + response.StatusCode); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment