171 lines
7.6 KiB
C#
171 lines
7.6 KiB
C#
using BitgetApi;
|
|
using BitgetApi.Utils;
|
|
using BitgetAPI.Data;
|
|
using BitgetAPI.Utils;
|
|
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace BitgetAPI.WebService
|
|
{
|
|
public class WebConnection
|
|
{
|
|
public static object SendWebServer(CommonProperty.ExchangeWebReqType exchangeWebReqType, string url = "", string postData = "", string subUri = "")
|
|
{
|
|
object returnJsonData = null;
|
|
|
|
CommonProperty commonProperty = CommonProperty.Instance;
|
|
|
|
try
|
|
{
|
|
HttpWebRequest wReq = null;
|
|
|
|
// Post 방식인 경우만 사용
|
|
var rgbyData = Encoding.ASCII.GetBytes(postData);
|
|
|
|
// 웹 전송 타입 지정
|
|
var webConType = CommonProperty.WebConnectionType.GET;
|
|
|
|
// 1. WebRequest 객체 형성 및 HttpWebRequest 로 형변환
|
|
// 2. 거래소에 따른 헤더 파일 처리(POST 일 경우만 지정함)
|
|
|
|
|
|
if(string.IsNullOrEmpty(url))
|
|
{
|
|
switch (exchangeWebReqType)
|
|
{
|
|
#region Upbit
|
|
case CommonProperty.ExchangeWebReqType.UpbitMarket:
|
|
wReq = (HttpWebRequest)WebRequest.Create(new Uri(CommonProperty.UpbitURL_MarketInfo));
|
|
break;
|
|
#endregion
|
|
|
|
#region Bitget
|
|
case CommonProperty.ExchangeWebReqType.BitgetMarket_Spot:
|
|
wReq = (HttpWebRequest)WebRequest.Create(new Uri(CommonProperty.BitgetURL_MarketInfo_COIN));
|
|
break;
|
|
|
|
case CommonProperty.ExchangeWebReqType.BitgetMarket_Future:
|
|
wReq = (HttpWebRequest)WebRequest.Create(new Uri(CommonProperty.BitgetURL_MarketInfo_FUTURE));
|
|
break;
|
|
|
|
case CommonProperty.ExchangeWebReqType.BitgetCandleStick_Coin:
|
|
wReq = (HttpWebRequest)WebRequest.Create(new Uri(CommonProperty.BitgetURL_MarketCandle_Coin));
|
|
break;
|
|
case CommonProperty.ExchangeWebReqType.BitgetCandleStick_Future:
|
|
wReq = (HttpWebRequest)WebRequest.Create(new Uri(CommonProperty.BitgetURL_MarketCandle_Future));
|
|
break;
|
|
#endregion
|
|
|
|
}
|
|
}
|
|
else wReq= (HttpWebRequest)WebRequest.Create(new Uri(url));
|
|
|
|
|
|
// GET, POST 구분
|
|
switch (webConType)
|
|
{
|
|
case CommonProperty.WebConnectionType.GET:
|
|
break;
|
|
case CommonProperty.WebConnectionType.POST:
|
|
wReq.Method = "POST"; // 전송 방법 "GET" or "POST"
|
|
using (var stream = wReq.GetRequestStream())
|
|
{
|
|
stream.Write(rgbyData, 0, rgbyData.Length);
|
|
}
|
|
wReq.ContentType = "application/x-www-form-urlencoded";
|
|
wReq.ContentLength = rgbyData.Length;
|
|
break;
|
|
}
|
|
|
|
using (var wRes = (HttpWebResponse)wReq.GetResponse())
|
|
{
|
|
var respPostStream = wRes.GetResponseStream();
|
|
var readerPost = new StreamReader(respPostStream, Encoding.UTF8, true);
|
|
var resResult = readerPost.ReadToEnd();
|
|
switch (exchangeWebReqType)
|
|
{
|
|
#region Bitget
|
|
case CommonProperty.ExchangeWebReqType.BitgetMarket_Spot:
|
|
{
|
|
var datalist = JsonConvert.DeserializeObject<Dictionary<string, object>>(resResult);
|
|
var marketInfo = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(datalist["data"]?.ToString());
|
|
var data = marketInfo.FindAll(x => x["coin"].ToString().Contains("USDT"));
|
|
}
|
|
break;
|
|
case CommonProperty.ExchangeWebReqType.BitgetMarket_Future:
|
|
{
|
|
var datalist = JsonConvert.DeserializeObject<Dictionary<string, object>>(resResult);
|
|
var marketInfos = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(datalist["data"]?.ToString());
|
|
|
|
commonProperty.marketInfoList = new List<MarketInfo>();
|
|
|
|
foreach (var item in marketInfos)
|
|
{
|
|
MarketInfo marketInfo = new MarketInfo();
|
|
marketInfo.MarketName = item["symbol"].ToString();
|
|
marketInfo.ExchangePlace = Enum.GetName(typeof(CommonProperty.ExchangePlace), commonProperty.selectedChangePlace);
|
|
commonProperty.marketInfoList.Add(marketInfo);
|
|
}
|
|
|
|
return commonProperty.marketInfoList;
|
|
}
|
|
break;
|
|
case CommonProperty.ExchangeWebReqType.BitgetCandleStick_Coin:
|
|
{
|
|
|
|
}
|
|
break;
|
|
case CommonProperty.ExchangeWebReqType.BitgetCandleStick_Future:
|
|
{
|
|
var datalist = JsonConvert.DeserializeObject<Dictionary<string, object>>(resResult);
|
|
var datas = JsonConvert.DeserializeObject<List<List<object>>>(datalist["data"]?.ToString());
|
|
|
|
List<CandleData> candleDatas = new List<CandleData>();
|
|
|
|
foreach(var item in datas)
|
|
{
|
|
CandleData candleData = new CandleData();
|
|
candleData.Argument = Convertor.GetUnixtimeStampToDateTime(long.Parse(item[0].ToString()));
|
|
candleData.Open = Convert.ToDouble(item[1]);
|
|
candleData.High = Convert.ToDouble(item[2]);
|
|
candleData.Low = Convert.ToDouble(item[3]);
|
|
candleData.Close = Convert.ToDouble(item[4]);
|
|
candleData.Vol_C = Convert.ToDouble(item[5]);
|
|
candleData.Vol_USD = Convert.ToDouble(item[6]);
|
|
|
|
candleDatas.Add(candleData);
|
|
}
|
|
|
|
return candleDatas;
|
|
}
|
|
break;
|
|
#endregion
|
|
}
|
|
}
|
|
}
|
|
catch (WebException webEx)
|
|
{
|
|
using (var Response = (HttpWebResponse)webEx.Response)
|
|
{
|
|
var nCode = Response.StatusCode;
|
|
|
|
using (var reader = new StreamReader(Response.GetResponseStream()))
|
|
{
|
|
var sRespBodyData = reader.ReadToEnd();
|
|
|
|
//return (JObject.Parse(sRespBodyData));
|
|
}
|
|
}
|
|
}
|
|
|
|
return returnJsonData;
|
|
}
|
|
}
|
|
}
|