Skip to content

Instantly share code, notes, and snippets.

@anomal3
Last active August 23, 2024 21:11
Show Gist options
  • Save anomal3/79d338224b5f85d8fc6b96111a7d4d9e to your computer and use it in GitHub Desktop.
Save anomal3/79d338224b5f85d8fc6b96111a7d4d9e to your computer and use it in GitHub Desktop.
p2p Api Bybit [BUY REQUEST]
/*
* Не документированный 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