Adding multi-API support
This will allow users to change the API url, added coinchose as an example as pointed out by @vias79 . * tools class detects the API type * getPrice returns the price based on API URL parsed Fixes #236
This commit is contained in:
parent
39dc7cdb28
commit
4113e05a10
@ -26,11 +26,13 @@ require_once('shared.inc.php');
|
||||
require_once(CLASS_DIR . '/tools.class.php');
|
||||
|
||||
verbose("Running updates\n");
|
||||
if ($aData = $tools->getApi($config['price']['url'], $config['price']['target'])) {
|
||||
if (!$setting->setValue('price', $aData['ticker']['last']))
|
||||
verbose("ERR Table update failed");
|
||||
verbose(" Price API Call ... ");
|
||||
if ($price = $tools->getPrice()) {
|
||||
verbose("found $price as price\n");
|
||||
if (!$setting->setValue('price', $price))
|
||||
verbose("unable to update value in settings table\n");
|
||||
} else {
|
||||
verbose("ERR Failed download JSON data from " . $config['price']['url'].$config['price']['target'] . "\n");
|
||||
verbose("failed to fetch API data: " . $tools->getError() . "\n");
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@ -9,11 +9,7 @@ if (!defined('SECURITY'))
|
||||
* Implements some common cron tasks outside
|
||||
* the scope of our web application
|
||||
**/
|
||||
class Tools {
|
||||
public function __construct($debug) {
|
||||
$this->debug = $debug;
|
||||
}
|
||||
|
||||
class Tools extends Base {
|
||||
/**
|
||||
* Fetch JSON data from an API
|
||||
* @param url string API URL
|
||||
@ -21,13 +17,13 @@ class Tools {
|
||||
* @param auth array Optional authentication data to be sent with
|
||||
* @return dec array JSON decoded PHP array
|
||||
**/
|
||||
public function getApi($url, $target, $auth=NULL) {
|
||||
private function getApi($url, $target, $auth=NULL) {
|
||||
static $ch = null;
|
||||
static $ch = null;
|
||||
if (is_null($ch)) {
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; BTCE PHP client; '.php_uname('s').'; PHP/'.phpversion().')');
|
||||
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; PHP client; '.php_uname('s').'; PHP/'.phpversion().')');
|
||||
}
|
||||
curl_setopt($ch, CURLOPT_URL, $url . $target);
|
||||
// curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
|
||||
@ -41,6 +37,49 @@ class Tools {
|
||||
if (!$dec) throw new Exception('Invalid data received, please make sure connection is working and requested API exists');
|
||||
return $dec;
|
||||
}
|
||||
|
||||
/**
|
||||
* Detect the API to properly extract information
|
||||
* @param url string API URL
|
||||
* @return data string API type
|
||||
**/
|
||||
private function getApiType($url) {
|
||||
if (preg_match('/coinchoose.com/', $url)) {
|
||||
return 'coinchose';
|
||||
} else if (preg_match('/btc-e.com/', $url)) {
|
||||
return 'btce';
|
||||
}
|
||||
$this->setErrorMessage("API URL unknown");
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract price information from API data
|
||||
**/
|
||||
public function getPrice() {
|
||||
$aData = $this->getApi($this->config['price']['url'], $this->config['price']['target']);
|
||||
$strCurrency = $this->config['currency'];
|
||||
// Check the API type for configured URL
|
||||
if (!$strApiType = $this->getApiType($this->config['price']['url']))
|
||||
return false;
|
||||
// Extract price depending on API type
|
||||
switch ($strApiType) {
|
||||
case 'coinchose':
|
||||
foreach ($aData as $aItem) {
|
||||
if($strCurrency == $aItem[0])
|
||||
return $aItem['price'];
|
||||
}
|
||||
break;
|
||||
case 'btce':
|
||||
return $aData['ticker']['last'];
|
||||
break;
|
||||
}
|
||||
// Catchall, we have no data extractor for this API url
|
||||
$this->setErrorMessage("Undefined API to getPrice() on URL " . $this->config['price']['url']);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$tools = new Tools($debug);
|
||||
$tools = new Tools();
|
||||
$tools->setDebug($debug);
|
||||
$tools->setConfig($config);
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
<?php
|
||||
// Make sure we are called from index.php
|
||||
if (!defined('SECURITY'))
|
||||
die('Hacking attempt');
|
||||
if (!defined('SECURITY')) die('Hacking attempt');
|
||||
|
||||
// What is our overall theme
|
||||
define('THEME', 'mmcFE');
|
||||
@ -18,6 +17,7 @@ define('PAGES_DIR', INCLUDE_DIR . '/pages');
|
||||
// Set debugging level for our debug class
|
||||
define('DEBUG', 0);
|
||||
|
||||
// SALT used to hash passwords
|
||||
define('SALT', 'PLEASEMAKEMESOMETHINGRANDOM');
|
||||
|
||||
$config = array(
|
||||
@ -26,6 +26,14 @@ $config = array(
|
||||
'target' => '/ltc_usd/ticker',
|
||||
'currency' => 'USD' // Used in ministats template
|
||||
),
|
||||
/**
|
||||
* Another Example for API
|
||||
'price' => array(
|
||||
'url' => 'http://www.coinchoose.com',
|
||||
'target' => '/api.php',
|
||||
'currency' => 'BTC'
|
||||
),
|
||||
**/
|
||||
'ap_threshold' => array(
|
||||
'min' => 1,
|
||||
'max' => 250
|
||||
|
||||
Loading…
Reference in New Issue
Block a user