Skip to content

Instantly share code, notes, and snippets.

@yasinkuyu
Last active November 15, 2022 20:02
Show Gist options
  • Star 39 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save yasinkuyu/9d7098bb83fd5c90e8e76c3f1eefce16 to your computer and use it in GitHub Desktop.
Save yasinkuyu/9d7098bb83fd5c90e8e76c3f1eefce16 to your computer and use it in GitHub Desktop.
Paribu Bitcoin Rates
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
@denizhantoy
Copy link

Bana mail atarsanız paribunun 1 saniyelik

success true
data  
orderBook {…}
marketMatches […]
charts  
market "xrp-tl"
interval "1d"
t […]
c […]
v […]

verilerini atabilirim. denizhan49@gmail.com

@ebubekirbastama
Copy link

ebubekirbastama commented Jan 5, 2021

(5.1.2021 tarihli) (https://www.paribu.com/endpoint/state) çalışmıyor 👎

@denizhantoy
Copy link

denizhantoy commented Jan 5, 2021 via email

@yasinkuyu
Copy link
Author

Rica ederim.

@denizhantoy
Copy link

denizhantoy commented Jan 12, 2021 via email

@yasinkuyu
Copy link
Author

Bağlantıları güncelledim.

@denizhantoy
Copy link

denizhantoy commented Jan 12, 2021 via email

@yasinkuyu
Copy link
Author

Sorgu sınırını bilmiyorum açıkçası

@burakgunvar
Copy link

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();
}

}

@buraksahin59
Copy link

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 ?

Screenshot at Feb 24 21-46-39

@denizhantoy
Copy link

denizhantoy commented Feb 24, 2021 via email

@burakgunvar
Copy link

burakgunvar commented Feb 25, 2021

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()

@denizhantoy
Copy link

denizhantoy commented Feb 25, 2021 via email

@safaksonmez
Copy link

2 saniyede bir istek göndermeme rağmen rate limite takılıp ban yiyorum 60 saniyede kaç istek atabiliyoruz ?

@Ekaya76
Copy link

Ekaya76 commented Apr 7, 2021

@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

@EminnTR
Copy link

EminnTR commented Apr 20, 2021

paribu alım satım için api sağlıyor mu?

@denizhantoy
Copy link

denizhantoy commented Apr 20, 2021 via email

@canerd7u
Copy link

canerd7u commented May 5, 2021

post("https://v3.paribu.com/app/user/orders",t)

Buradaki t neyi ifade ediyor ?

@kemalsaybakan
Copy link

Bu postlardaki T ne oluyor arkadaşlar. 1 aydır cevap alamadık

@denizhantoy
Copy link

denizhantoy commented Jun 23, 2021 via email

@kemalsaybakan
Copy link

Peki Bakiye mizi TL ve coin bazından çekebiliyor muyuz ?

@denizhantoy
Copy link

denizhantoy commented Jun 25, 2021 via email

@ilkersen3
Copy link

@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.

@denizhantoy
Copy link

denizhantoy commented Oct 11, 2021 via email

@puuble
Copy link

puuble commented Nov 2, 2021

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.

@denizhantoy
Copy link

denizhantoy commented Nov 2, 2021 via email

@mixman18
Copy link

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.

@0x83k1r
Copy link

0x83k1r commented Mar 27, 2022

User-agenti doğru göndermediğiniz müddetçe token elde edemezsiniz.

@apoeren
Copy link

apoeren commented May 12, 2022

selamlar arkadaslar ben bu işte yeniyim ve ciddi anlamda profesyonel online ders almak istiyorum yardımcı olabilirmisiniz.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment