-
-
Save yasinkuyu/9d7098bb83fd5c90e8e76c3f1eefce16 to your computer and use it in GitHub Desktop.
Paribu.com - Türkiye'nin Bitcoin Borsası | |
2021 (update) | |
Api endpoint | |
https://v3.paribu.com/app/markets/btc-tl?interval=1000 | |
Ticker | |
https://www.paribu.com/ticker | |
Initials | |
https://v3.paribu.com/app/initials | |
headers | |
user-agent = ParibuApp/332 ("+v.Platform.OS+" "+v.Platform.Version+") | |
Bonus | |
get("https://v3.paribu.com/app/initials") | |
post("https://v3.paribu.com/app/login",t) | |
post("https://v3.paribu.com/app/register",t) | |
post("https://v3.paribu.com/app/user/id-verify",t) | |
post("https://v3.paribu.com/app/two-factor",t) | |
post("https://v3.paribu.com/app/retry-sms",t) | |
get("https://v3.paribu.com/app/markets/"+t+'?interval='+s) | |
get("https://v3.paribu.com/app/charts/"+t+'?interval='+s) | |
post("https://v3.paribu.com/app/user/orders",t) | |
post("https://v3.paribu.com/app/user/addresses/assign",t) | |
post("https://v3.paribu.com/app/user/papara/deposit",t) | |
post("https://v3.paribu.com/app/user/withdraws",t) | |
post("https://v3.paribu.com/app/user/alerts",t) | |
delete("https://v3.paribu.com/app/user/alerts/"+t) | |
post("https://v3.paribu.com/app/user/papara/"+t,s) | |
put("https://v3.paribu.com/app/user/password",t) | |
put("https://v3.paribu.com/app/user/email",t) | |
put("https://v3.paribu.com/app/user/two-factor") | |
post("https://v3.paribu.com/app/reset/password",t) | |
put("https://v3.paribu.com/app/reset/password",t) | |
post("https://v3.paribu.com/app/user/email/confirmation",t) | |
post("https://v3.paribu.com/app/tickets",t) | |
get('https://www.paribu.com/app/notification-trigger?label='+t) | |
---- | |
2017 | |
Endpoint | |
https://www.paribu.com/endpoint/state | |
https://www.paribu.com/ticker |
Sorgu sınırını bilmiyorum açıkçası
c# üzerinden basit api kodları. Referans olabilir diye bırakıyorum.
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace paribu_console_app
{
internal class Program
{
private static void Main()
{
start:
var webRequest = WebRequest.Create("https://www.paribu.com/ticker") as HttpWebRequest;
if (webRequest == null)
{
return;
}
webRequest.ContentType = "application/json";
webRequest.UserAgent = "Nothing";
using (var s = webRequest.GetResponse().GetResponseStream())
{
using (var sr = new StreamReader(s))
{
var contributorsAsJson = sr.ReadToEnd();
var orderResponse = Coins.FromJson(contributorsAsJson);
orderResponse.Select(i => $"{i.Key}: {i.Value.Last}").ToList().ForEach(System.Console.WriteLine);
// orderResponse üzerinden devam...
}
}
System.Threading.Thread.Sleep(60000);
System.Console.Clear();
goto start;
}
}
public partial class Coins
{
[JsonProperty("lowestAsk")]
public double LowestAsk { get; set; }
[JsonProperty("highestBid")]
public double HighestBid { get; set; }
[JsonProperty("low24hr")]
public double Low24Hr { get; set; }
[JsonProperty("high24hr")]
public double High24Hr { get; set; }
[JsonProperty("avg24hr")]
public double Avg24Hr { get; set; }
[JsonProperty("volume")]
public double Volume { get; set; }
[JsonProperty("last")]
public double Last { get; set; }
[JsonProperty("change")]
public double Change { get; set; }
[JsonProperty("percentChange")]
public double PercentChange { get; set; }
[JsonProperty("chartData")]
public object[] ChartData { get; set; }
}
public partial class Coins
{
public static Dictionary<string, Coins> FromJson(string json) => JsonConvert.DeserializeObject<Dictionary<string, Coins>>(json, paribu_console_app.Converter.Settings);
}
public static class Serialize
{
public static string ToJson(this Dictionary<string, Coins> self) => JsonConvert.SerializeObject(self, paribu_console_app.Converter.Settings);
}
internal static class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
Converters =
{
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
},
};
}
}
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;
namespace paribu_console_app
{
internal class Program
{
private static void Main()
{
start:
var webRequest = WebRequest.Create("https://v3.paribu.com/app/markets/btc-tl?interval=1000") as HttpWebRequest;
if (webRequest == null)
{
return;
}
webRequest.ContentType = "application/json";
webRequest.UserAgent = "Nothing";
using (var s = webRequest.GetResponse().GetResponseStream())
{
using (var sr = new StreamReader(s))
{
var contributorsAsJson = sr.ReadToEnd();
var orderResponse = Coins.FromJson(contributorsAsJson);
// orderResponse üzerinden otomasyon
}
}
System.Threading.Thread.Sleep(60000);
System.Console.Clear();
goto start;
}
}
public partial class Coins
{
[JsonProperty("success")]
public bool Success { get; set; }
[JsonProperty("data")]
public Data Data { get; set; }
}
public partial class Data
{
[JsonProperty("orderBook")]
public OrderBook OrderBook { get; set; }
[JsonProperty("marketMatches")]
public MarketMatch[] MarketMatches { get; set; }
[JsonProperty("charts")]
public Charts Charts { get; set; }
}
public partial class Charts
{
[JsonProperty("market")]
public string Market { get; set; }
[JsonProperty("interval")]
[JsonConverter(typeof(ParseStringConverter))]
public long Interval { get; set; }
[JsonProperty("t")]
public object[] T { get; set; }
[JsonProperty("c")]
public object[] C { get; set; }
[JsonProperty("v")]
public object[] V { get; set; }
}
public partial class MarketMatch
{
[JsonProperty("timestamp")]
public long Timestamp { get; set; }
[JsonProperty("amount")]
public string Amount { get; set; }
[JsonProperty("price")]
public string Price { get; set; }
[JsonProperty("trade")]
public Trade Trade { get; set; }
}
public partial class OrderBook
{
[JsonProperty("buy")]
public Dictionary<string, double> Buy { get; set; }
[JsonProperty("sell")]
public Dictionary<string, double> Sell { get; set; }
}
public enum Trade { Buy, Sell };
public partial class Coins
{
public static Coins FromJson(string json) => JsonConvert.DeserializeObject<Coins>(json, paribu_console_app.Converter.Settings);
}
public static class Serialize
{
public static string ToJson(this Coins self) => JsonConvert.SerializeObject(self, paribu_console_app.Converter.Settings);
}
internal static class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
Converters =
{
TradeConverter.Singleton,
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
},
};
}
internal class ParseStringConverter : JsonConverter
{
public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null) return null;
var value = serializer.Deserialize<string>(reader);
long l;
if (Int64.TryParse(value, out l))
{
return l;
}
throw new Exception("Cannot unmarshal type long");
}
public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
{
if (untypedValue == null)
{
serializer.Serialize(writer, null);
return;
}
var value = (long)untypedValue;
serializer.Serialize(writer, value.ToString());
return;
}
public static readonly ParseStringConverter Singleton = new ParseStringConverter();
}
internal class TradeConverter : JsonConverter
{
public override bool CanConvert(Type t) => t == typeof(Trade) || t == typeof(Trade?);
public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null) return null;
var value = serializer.Deserialize<string>(reader);
switch (value)
{
case "buy":
return Trade.Buy;
case "sell":
return Trade.Sell;
}
throw new Exception("Cannot unmarshal type Trade");
}
public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
{
if (untypedValue == null)
{
serializer.Serialize(writer, null);
return;
}
var value = (Trade)untypedValue;
switch (value)
{
case Trade.Buy:
serializer.Serialize(writer, "buy");
return;
case Trade.Sell:
serializer.Serialize(writer, "sell");
return;
}
throw new Exception("Cannot marshal type Trade");
}
public static readonly TradeConverter Singleton = new TradeConverter();
}
}
Tesekkurler hocam,
Burada ki 'https://www.paribu.com/app/markets/avax-tl?interval=1d' apisini kullanirken 'userMathces'leri cekmek icin tarayicidan giris mi yapmis olmak gerekiyor ? Kullaniciya ait alis - satis emirlerini nasil cekebilirim ?
Merhaba
@buraksahin59 https://www.paribu.com/app/markets/btc-tl?interval=1d üzerinden marketMatches'i kullabiliriz sanırım istediğin bilgi için fakat @denizhantoy 'a katılıyorum, eğer borsalar arasında arbitraj kullanacaksan paribu üzerinden deneme yapabilirsin fakat bot yazmak istiyorsan binance gibi yüksek hacimli piyasalarda işlem yapmak daha mantıklı olabilir.
Ek olarak python için EMA20 EMA50 kontrülünü ve al sat sinyalini oluşturan basit kodlarıda bırakıyorum. Bunlar sadece konu hakkında bilgisi olmayan ve ilgilenmek isteyenlere ilk başlangıc olabilecek seviyede kodlardır.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import datetime
import os
import package
import pandas_datareader.data as web
set start and end dates
start = datetime.datetime(2018, 2, 1)
end = datetime.datetime(2021, 2, 2)
extract the closing price data
df = web.DataReader(['BTC-USD'], 'yahoo', start = start, end = end)['Close']
df.columns = {'Close Price'}
df.head(10)
df['Close Price'].plot(figsize = (15, 8))
plt.grid()
plt.ylabel("Price in USD")
wdir = os.getcwd() + "\Result.csv"
df.to_csv(wdir)
create 20 days simple moving average column
df['20_SMA'] = df['Close Price'].rolling(window = 20, min_periods = 1).mean()
create 50 days simple moving average column
df['50_SMA'] = df['Close Price'].rolling(window = 50, min_periods = 1).mean()
display first few rows
df.head()
df['Signal'] = 0.0
df['Signal'] = np.where(df['20_SMA'] > df['50_SMA'], 1.0, 0.0)
df['Position'] = df['Signal'].diff()
display first few rows
df.head()
colors = {'k':'red', 'b':'blue', 'g':'green', 'G':'black'}
plt.figure(figsize = (20,10))
plot close price, short-term and long-term moving averages
df["Close Price"].plot(color = "k", label= "Close Price")
df['20_SMA'].plot(color = 'b',label = '20-day SMA')
df['50_SMA'].plot(color = 'g', label = '50-day SMA')
plot 'buy' signals
plt.plot(df[df['Position'] == 1].index,
df['20_SMA'][df['Position'] == 1],
'^', markersize = 15, color = 'g', label = 'buy')
plot 'sell' signals
plt.plot(df[df['Position'] == -1].index,
df['20_SMA'][df['Position'] == -1],
'v', markersize = 15, color = 'r', label = 'sell')
plt.ylabel('Price in USD', fontsize = 15 )
plt.xlabel('Date', fontsize = 15 )
plt.title('BTC-USD', fontsize = 20)
plt.legend()
plt.grid()
plt.show()
2 saniyede bir istek göndermeme rağmen rate limite takılıp ban yiyorum 60 saniyede kaç istek atabiliyoruz ?
@denizhantoy hocam tam istediğim şeyi yapmışsın ama link ölmüş. Rica etsem linki yenileyip, tekrar paylaşabilir misin?
Benimde susekilde anlık alîm satımları toplayıp fikir olusturabilecek bir programım var kodlar acik halde düzenleyebilirsiniz. https://repl.it/talk/share/Paribu-anlik-ALIM-SATIM-ve-TOPLAM-ALIM-SATIM-GOSTEREN-PROGRAM/111193
paribu alım satım için api sağlıyor mu?
post("https://v3.paribu.com/app/user/orders",t)
Buradaki t neyi ifade ediyor ?
Bu postlardaki T ne oluyor arkadaşlar. 1 aydır cevap alamadık
Peki Bakiye mizi TL ve coin bazından çekebiliyor muyuz ?
Hala cevap veren yok. Bunları calıstırabılen bı arkadas var mı ?
Parametrelerı hala anlayamadık. Apinin neden dökümantasyonu yok ?
Lütfen yardımcı olun arkadaşlar ?
Bonus
get("https://v3.paribu.com/app/initials")
post("https://v3.paribu.com/app/login",t)
post("https://v3.paribu.com/app/register",t)
post("https://v3.paribu.com/app/user/id-verify",t)
post("https://v3.paribu.com/app/two-factor",t)
post("https://v3.paribu.com/app/retry-sms",t)
get("https://v3.paribu.com/app/markets/"+t+'?interval='+s)
get("https://v3.paribu.com/app/charts/"+t+'?interval='+s)
post("https://v3.paribu.com/app/user/orders",t)
post("https://v3.paribu.com/app/user/addresses/assign",t)
post("https://v3.paribu.com/app/user/papara/deposit",t)
post("https://v3.paribu.com/app/user/withdraws",t)
post("https://v3.paribu.com/app/user/alerts",t)
delete("https://v3.paribu.com/app/user/alerts/"+t)
post("https://v3.paribu.com/app/user/papara/"+t,s)
put("https://v3.paribu.com/app/user/password",t)
put("https://v3.paribu.com/app/user/email",t)
put("https://v3.paribu.com/app/user/two-factor")
post("https://v3.paribu.com/app/reset/password",t)
put("https://v3.paribu.com/app/reset/password",t)
post("https://v3.paribu.com/app/user/email/confirmation",t)
post("https://v3.paribu.com/app/tickets",t)
get('https://www.paribu.com/app/notification-trigger?label='+t)
@karatesi T tabiki time :) Paribu api üzerinden al sat işlemi yaptırmıyor. Korkuyorlar. Kendileride açıklıyor borsa manipüle edilir diye... Çünkü paribunun al sat çalışma mantığı 10 saniye boyunca emir topla. 10 saniyede bir cron çalıştır emirleri eşleştir :D bundan ibaret maalesef.
Ben login ve 2factor ile sms i calistirdim sadece orders girebilmem icin header da veya paramslarda bir sey gondermem lazim v3 laravel ile yapilmis jwt.io taktikleri denedim yemedi. o veriyi bulabilirsem al sat yapacagim otomatik olarak. Benim incelemem dogrultusunda soyle bir kaniya vardim API ler calisiyor ama ne yazik ki Paribu bu apilerin calisma sekillerini partnerlerine veriyor. Yani partnerler su an takir takir API yi kullaniyor. Partner olmak icin ne gerekiyor bilmiyorum.
Arkadaşlar merhabalar. Excelde borsalardan gelen fiyat bilgilerinin çekildiği api kaynak kodları var. Ben birkaç borsanın api verisini bulup excell tablosuna veri getirmeye çalışıyorum. Api lerin yazım mantığını anlamaya çalışıyorum. Excell tablosuna veri çekip portföy güncellenmiş verilerini görebiliyorum. Bu arada şunuda araştırıyorum. Excell tabloları üzerinden borsalara connect olup ilgili coin/coinlerin alım, satım, toplu alım satım gibi fonksiyonlarını api üzerinden kontrol etme şansımız var mı? Bunu excell tabloları üzerinden kontrol etme şansımızın olup olmadığını merak ediyorum. Bilgisi olan arkadaşımız varsa bilgi verebilirse sevinirim. Teşekkürler.
User-agenti doğru göndermediğiniz müddetçe token elde edemezsiniz.
selamlar arkadaslar ben bu işte yeniyim ve ciddi anlamda profesyonel online ders almak istiyorum yardımcı olabilirmisiniz.
Bağlantıları güncelledim.