From de6fbf88db2dfe66986af79a00d2f2d03d091cd4 Mon Sep 17 00:00:00 2001 From: Brian Ziemek Date: Sun, 18 Mar 2018 02:41:56 -0400 Subject: [PATCH 01/13] Refactor getPrice() in tools.class.php $this->config['currency'] as $strBase $this->config['price']['currency'] as $strQuote --- include/classes/tools.class.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/include/classes/tools.class.php b/include/classes/tools.class.php index 19f4ce0e..befebab3 100644 --- a/include/classes/tools.class.php +++ b/include/classes/tools.class.php @@ -97,7 +97,8 @@ class Tools extends Base { **/ public function getPrice() { $aData = $this->getApi($this->config['price']['url'], $this->config['price']['target']); - $strCurrency = $this->config['currency']; + $strBase = $this->config['currency']; + $strQuote = $this->config['price']['currency']; // Check the API type for configured URL if (!$strApiType = $this->getApiType($this->config['price']['url'])) return false; @@ -106,7 +107,7 @@ class Tools extends Base { switch ($strApiType) { case 'coinchose': foreach ($aData as $aItem) { - if($strCurrency == $aItem[0]) + if($strBase == $aItem[0]) return $aItem['price']; } break; @@ -114,13 +115,13 @@ class Tools extends Base { return $aData['ticker']['last']; break; case 'cryptsy': - return @$aData['return']['markets'][$strCurrency]['lasttradeprice']; + return @$aData['return']['markets'][$strBase]['lasttradeprice']; break; case 'cryptopia': return @$aData['Data']['LastPrice']; break; case 'cryptorush': - return @$aData["$strCurrency/" . $this->config['price']['currency']]['last_trade']; + return @$aData["{$strBase}/{$strQuote}"]['last_trade']; break; case 'mintpal': return @$aData['0']['last_price']; From c2f3171d1a89508209592a8e02c3bc4b2f6207bb Mon Sep 17 00:00:00 2001 From: Brian Ziemek Date: Sun, 18 Mar 2018 02:44:54 -0400 Subject: [PATCH 02/13] Update BTC-e API domain btc-e.com was seized by the US DOJ; use btc-e.nz instead --- include/classes/tools.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/classes/tools.class.php b/include/classes/tools.class.php index befebab3..5d434f84 100644 --- a/include/classes/tools.class.php +++ b/include/classes/tools.class.php @@ -73,7 +73,7 @@ class Tools extends Base { private function getApiType($url) { if (preg_match('/coinchoose.com/', $url)) { return 'coinchose'; - } else if (preg_match('/btc-e.com/', $url)) { + } else if (preg_match('/btc-e.nz/', $url)) { return 'btce'; } else if (preg_match('/cryptsy.com/', $url)) { return 'cryptsy'; From 53c311563b012304c44c3a8c2f4dc8567236a369 Mon Sep 17 00:00:00 2001 From: Brian Ziemek Date: Sun, 18 Mar 2018 02:45:24 -0400 Subject: [PATCH 03/13] Update BTC-e ticker URL --- include/config/global.inc.dist.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/config/global.inc.dist.php b/include/config/global.inc.dist.php index 89ef4f7e..f425c03a 100644 --- a/include/config/global.inc.dist.php +++ b/include/config/global.inc.dist.php @@ -113,7 +113,7 @@ $config['gettingstarted']['stratumport'] = '3333'; * https://github.com/MPOS/php-mpos/wiki/Config-Setup#wiki-ticker-api **/ $config['price']['enabled'] = false; -$config['price']['url'] = 'https://btc-e.com'; +$config['price']['url'] = 'https://btc-e.nz'; $config['price']['target'] = '/api/2/ltc_usd/ticker'; $config['price']['currency'] = 'USD'; From 028889584c6a2aa8c544b7d3acefdbdb4ac6ae7c Mon Sep 17 00:00:00 2001 From: Brian Ziemek Date: Sun, 18 Mar 2018 02:46:48 -0400 Subject: [PATCH 04/13] Remove Cryptsy ticker support The '90s are dead --- include/classes/tools.class.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/include/classes/tools.class.php b/include/classes/tools.class.php index 5d434f84..b00cb5ee 100644 --- a/include/classes/tools.class.php +++ b/include/classes/tools.class.php @@ -75,8 +75,6 @@ class Tools extends Base { return 'coinchose'; } else if (preg_match('/btc-e.nz/', $url)) { return 'btce'; - } else if (preg_match('/cryptsy.com/', $url)) { - return 'cryptsy'; } else if (preg_match('/cryptopia.co.nz/', $url)) { return 'cryptopia'; } else if (preg_match('/cryptorush.in/', $url)) { @@ -114,9 +112,6 @@ class Tools extends Base { case 'btce': return $aData['ticker']['last']; break; - case 'cryptsy': - return @$aData['return']['markets'][$strBase]['lasttradeprice']; - break; case 'cryptopia': return @$aData['Data']['LastPrice']; break; From 8f33ceb3a4894fcb17850d76c132aafac4847764 Mon Sep 17 00:00:00 2001 From: Brian Ziemek Date: Sun, 18 Mar 2018 02:47:37 -0400 Subject: [PATCH 05/13] Correct "coinchoose" spelling in ticker code --- include/classes/tools.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/classes/tools.class.php b/include/classes/tools.class.php index b00cb5ee..9766ce68 100644 --- a/include/classes/tools.class.php +++ b/include/classes/tools.class.php @@ -72,7 +72,7 @@ class Tools extends Base { **/ private function getApiType($url) { if (preg_match('/coinchoose.com/', $url)) { - return 'coinchose'; + return 'coinchoose'; } else if (preg_match('/btc-e.nz/', $url)) { return 'btce'; } else if (preg_match('/cryptopia.co.nz/', $url)) { @@ -103,7 +103,7 @@ class Tools extends Base { // if api data is valid, extract price depending on API type if (is_array($aData)) { switch ($strApiType) { - case 'coinchose': + case 'coinchoose': foreach ($aData as $aItem) { if($strBase == $aItem[0]) return $aItem['price']; From 0dbb4d8bc9f8a27c41ce0e77d6fffbbbb3f6edc1 Mon Sep 17 00:00:00 2001 From: Brian Ziemek Date: Sun, 18 Mar 2018 02:48:18 -0400 Subject: [PATCH 06/13] Add Crypto-Bridge ticker API --- include/classes/tools.class.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/include/classes/tools.class.php b/include/classes/tools.class.php index 9766ce68..9283bca7 100644 --- a/include/classes/tools.class.php +++ b/include/classes/tools.class.php @@ -85,6 +85,8 @@ class Tools extends Base { return 'c-cex'; } else if (preg_match('/bittrex.com/', $url)) { return 'bittrex'; + } else if (preg_match('/crypto-bridge.org/', $url)) { + return 'cryptobridge'; } $this->setErrorMessage("API URL unknown"); return false; @@ -127,6 +129,11 @@ class Tools extends Base { case 'bittrex': return @$aData['result']['Last']; break; + case 'cryptobridge': + foreach ($aData as $aItem) { + if("{$strBase}_{$strQuote}" == $aItem['id']) + return $aItem['last']; + } } } else { $this->setErrorMessage("Got an invalid response from ticker API"); From 8c683b756a4fada269c392caa734f9cc972eb4ab Mon Sep 17 00:00:00 2001 From: Brian Ziemek Date: Sun, 18 Mar 2018 02:49:01 -0400 Subject: [PATCH 07/13] Add Yobit ticker API --- include/classes/tools.class.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/classes/tools.class.php b/include/classes/tools.class.php index 9283bca7..a9778c8f 100644 --- a/include/classes/tools.class.php +++ b/include/classes/tools.class.php @@ -87,6 +87,8 @@ class Tools extends Base { return 'bittrex'; } else if (preg_match('/crypto-bridge.org/', $url)) { return 'cryptobridge'; + } else if (preg_match('/yobit.net/', $url)) { + return 'yobit'; } $this->setErrorMessage("API URL unknown"); return false; @@ -134,6 +136,9 @@ class Tools extends Base { if("{$strBase}_{$strQuote}" == $aItem['id']) return $aItem['last']; } + case 'yobit': + return @$aData[strtolower($strBase) . "_" . strtolower($strQuote)]['last']; + break; } } else { $this->setErrorMessage("Got an invalid response from ticker API"); From 79d9d0871afe23495bf9b2c7b6b8e0c5ab1f90df Mon Sep 17 00:00:00 2001 From: Brian Ziemek Date: Sun, 18 Mar 2018 02:49:27 -0400 Subject: [PATCH 08/13] Add Binance ticker API --- include/classes/tools.class.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/classes/tools.class.php b/include/classes/tools.class.php index a9778c8f..72cfa970 100644 --- a/include/classes/tools.class.php +++ b/include/classes/tools.class.php @@ -89,6 +89,8 @@ class Tools extends Base { return 'cryptobridge'; } else if (preg_match('/yobit.net/', $url)) { return 'yobit'; + } else if (preg_match('/binance.com/', $url)) { + return 'binance'; } $this->setErrorMessage("API URL unknown"); return false; @@ -139,6 +141,9 @@ class Tools extends Base { case 'yobit': return @$aData[strtolower($strBase) . "_" . strtolower($strQuote)]['last']; break; + case 'binance': + return @$aData['price']; + break; } } else { $this->setErrorMessage("Got an invalid response from ticker API"); From 6cc9cba0f5619c8133f37d942b2c272b89902784 Mon Sep 17 00:00:00 2001 From: Brian Ziemek Date: Sun, 18 Mar 2018 02:49:59 -0400 Subject: [PATCH 09/13] Add SouthXChange ticker API --- include/classes/tools.class.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/classes/tools.class.php b/include/classes/tools.class.php index 72cfa970..0a4c9125 100644 --- a/include/classes/tools.class.php +++ b/include/classes/tools.class.php @@ -91,6 +91,8 @@ class Tools extends Base { return 'yobit'; } else if (preg_match('/binance.com/', $url)) { return 'binance'; + } else if (preg_match('/southxchange.com/', $url)) { + return 'southxchange'; } $this->setErrorMessage("API URL unknown"); return false; @@ -144,6 +146,9 @@ class Tools extends Base { case 'binance': return @$aData['price']; break; + case 'southxchange': + return @$aData['Last']; + break; } } else { $this->setErrorMessage("Got an invalid response from ticker API"); From 77687d971344c503710820b10c067ca35f580ce9 Mon Sep 17 00:00:00 2001 From: Brian Ziemek Date: Sun, 18 Mar 2018 02:50:23 -0400 Subject: [PATCH 10/13] Add Mercatox ticker API --- include/classes/tools.class.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/classes/tools.class.php b/include/classes/tools.class.php index 0a4c9125..13e983aa 100644 --- a/include/classes/tools.class.php +++ b/include/classes/tools.class.php @@ -93,6 +93,8 @@ class Tools extends Base { return 'binance'; } else if (preg_match('/southxchange.com/', $url)) { return 'southxchange'; + } else if (preg_match('/mercatox.com/', $url)) { + return 'mercatox'; } $this->setErrorMessage("API URL unknown"); return false; @@ -149,6 +151,9 @@ class Tools extends Base { case 'southxchange': return @$aData['Last']; break; + case 'mercatox': + return @$aData["{$strBase}_{$strQuote}"]['last']; + break; } } else { $this->setErrorMessage("Got an invalid response from ticker API"); From 6ff468a15288ee02ab6a577c3a30fa11c0356ed0 Mon Sep 17 00:00:00 2001 From: Brian Ziemek Date: Sun, 18 Mar 2018 03:40:49 -0400 Subject: [PATCH 11/13] Add TradeOgre ticker API --- include/classes/tools.class.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/classes/tools.class.php b/include/classes/tools.class.php index 13e983aa..f0eb8694 100644 --- a/include/classes/tools.class.php +++ b/include/classes/tools.class.php @@ -95,6 +95,8 @@ class Tools extends Base { return 'southxchange'; } else if (preg_match('/mercatox.com/', $url)) { return 'mercatox'; + } else if (preg_match('/tradeogre.com/', $url)) { + return 'tradeogre'; } $this->setErrorMessage("API URL unknown"); return false; @@ -154,6 +156,9 @@ class Tools extends Base { case 'mercatox': return @$aData["{$strBase}_{$strQuote}"]['last']; break; + case 'tradeogre': + return @$aData['price']; + break; } } else { $this->setErrorMessage("Got an invalid response from ticker API"); From 8a87239adbba9c018fa9a5239f1444de260b6f24 Mon Sep 17 00:00:00 2001 From: Brian Ziemek Date: Sun, 18 Mar 2018 13:36:18 -0400 Subject: [PATCH 12/13] Handle redundant slashes in ticker config I.e. `https://api.example.com//ticker/target` becomes `https://api.example.com/ticker/target` --- include/classes/tools.class.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/include/classes/tools.class.php b/include/classes/tools.class.php index f0eb8694..029b8cb4 100644 --- a/include/classes/tools.class.php +++ b/include/classes/tools.class.php @@ -44,9 +44,13 @@ class Tools extends Base { curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; PHP client; '.php_uname('s').'; PHP/'.phpversion().')'); } - curl_setopt($ch, CURLOPT_URL, $url . $target); + + $url = rtrim($url, '/'); + $target = ltrim($target, '/'); + curl_setopt($ch, CURLOPT_URL, $url . '/' . $target); // curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); From e0dc0cbc1bb135981b113eebd5d2833efe138e13 Mon Sep 17 00:00:00 2001 From: Brian Ziemek Date: Sun, 18 Mar 2018 14:26:30 -0400 Subject: [PATCH 13/13] Fix Mercatox ticker API --- include/classes/tools.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/classes/tools.class.php b/include/classes/tools.class.php index 029b8cb4..34c549fb 100644 --- a/include/classes/tools.class.php +++ b/include/classes/tools.class.php @@ -158,7 +158,7 @@ class Tools extends Base { return @$aData['Last']; break; case 'mercatox': - return @$aData["{$strBase}_{$strQuote}"]['last']; + return @$aData['pairs']["{$strBase}_{$strQuote}"]['last']; break; case 'tradeogre': return @$aData['price'];