PHP Daten von einem URL auslesen

moin,
ich konnte inzwischen das projekt von hier https://github.com/mrteye/GDAX zum laufen bekommen.
Projekt ist im folgenden Ordner:
Ordner_htdocs_mrteye_GDAX.PNG

index.php sieht so aus:
PHP:
<?php
// Set the base path; run composers autoload.
if (! $docRoot = $_SERVER['DOCUMENT_ROOT']) {
  // Repo clone - root path - no web server.
  $docRoot = dirname(dirname(__FILE__));
}
require_once "$docRoot/vendor/autoload.php";

// ~ Create credentials on the gdax site -> api section.
// ~ copy config.php.example to $docRoot/config.php.
require_once "$docRoot/mrteye/GDAX/config.php";

/***
<?php
// Example Config File
$config = array(
  'key' => '',
  'secret' => '',
  'pass' => '',

  'api_url' => 'https://api-public.sandbox.gdax.com',
  'time_url' => 'https://api-public.sandbox.gdax.com/time'
);
***/

$time = time();
$test = false;
include 'test_basic_public.php';
//include 'test_basic_private.php';
//include 'test_advanced.php';

// Print any failed tests.
$t2 = time();
$sec = ($t2 - $time) % 60;
$min = (int) (($t2 - $time) / 60);
echo "<pre>
Time: ". date('i:s', $t2 - $time). "
</pre>";

// Display results of previous examples.
if ($test) {
  foreach($test as $fail) {
    $path = basename($fail->name);
    $file_link = "<a href=\"file://{$fail->name}\">$path</a>";

    echo "$file_link | <b>{$fail->msg}</b> | Details<hr>";
    echo '<pre>'. print_r($fail->detail, true) .'</pre>';
  }
}

test_basic_public.php sieht so aus:
PHP:
<?php
// Example #1 Basic - Pubic access, get product information.
// This example is loaded from index.php file which sets an autoload and
// creates $basePath and $config variables.

use mrteye\Gdax\Api;
use mrteye\Gdax\Auth;

// Get the GDAX API and start making calls.
$gdax = new Api($config->api_url);
$products = false;

// Debugging is enabled by default.
//$gdax->setDebug(false);

// Example usage of public calls.
try {
  $productId = 'ETH-EUR';
  $products = $gdax->getProducts();
  $productOrderBook = $gdax->getProductOrderBook($productId, $param = [
      'level' => 1
  ]);
  $productTrades = $gdax->getProductTrades($productId, $param = [
      'before' => 1,
      'limit' => 100
  ]);

} catch (\Exception $e) {
  $test[] = (object) array(
    'name' => __FILE__,
    'msg' => $e->getMessage(),
    'detail' => $gdax->getError()
  );
}


if ($products) {
  echo 'Products: <pre>'. print_r($products, true) .'</pre>';
}

Und das Egebnis sieht so aus:
Ergebnis_htdocs_mrteye_GDAX.png

Mein Problem ist jetzt, ich brauche die aktuellen Ask- und Bid-Werte.
Also habe ich das gefunden https://docs.gdax.com/#get-product-ticker
www_gdax_doc_get_product_ticker.PNG
Aber leider komme ich nicht weiter. Wie muss man das Handhaben?
Im test_basic_public.php sind die getProductOrderbook und getProductTrades drin:
PHP:
$productOrderBook = $gdax->getProductOrderBook($productId, $param = [
      'level' => 1
  ]);
  $productTrades = $gdax->getProductTrades($productId, $param = [
      'before' => 1,
      'limit' => 100
  ]);

Und ich dachte mir dann muss es mit getProductTicker(...) auch ähnlich gehen, aber woher bekomme ich jetzt die Parameter für getProductTicker(...) her ?
Ergänzung ()

ich habe jetzt als Parameter für GetProductTicker(...) einfach die $productId genommen:
test_basic_public.php:
PHP:
<?php
// Example #1 Basic - Pubic access, get product information.
// This example is loaded from index.php file which sets an autoload and
// creates $basePath and $config variables.

use mrteye\Gdax\Api;
use mrteye\Gdax\Auth;

// Get the GDAX API and start making calls.
$gdax = new Api($config->api_url);
$products = false;

// Debugging is enabled by default.
//$gdax->setDebug(false);

// Example usage of public calls.
try {
  $productId = 'ETH-EUR';
  $products = $gdax->getProducts();
  $productOrderBook = $gdax->getProductOrderBook($productId, $param = [
      'level' => 1
  ]);
  $productTrades = $gdax->getProductTrades($productId, $param = [
      'before' => 1,
      'limit' => 100
  ]);
  $productTicker = $gdax->getProductTicker($productId);

} catch (\Exception $e) {
  $test[] = (object) array(
    'name' => __FILE__,
    'msg' => $e->getMessage(),
    'detail' => $gdax->getError()
  );
}


if ($productTicker) {
  echo 'Products: <pre>'. print_r($productTicker, true) .'</pre>';
}


und das kommt dabei raus:
ergebnis_mrteye_GDAX_test_getProductTicker.PNG

Also nur müll, nicht mal das datum stimmt.
Warum? Was mache ich falsch?
Ergänzung ()

So jetzt habe ich die URL in config.php geändert, hab die Sandbox gedöns entfernt und ersetzt durch:
config.php

PHP:
<?php
$config = (object) array(
  'key' => '',
  'secret' => '',
  'pass' => '',

  //'api_url' => 'https://api-public.sandbox.gdax.com',
  //'time_url' => 'https://api-public.sandbox.gdax.com/time'

  'api_url' => 'https://api.gdax.com',
  'time_url' => 'https://api.gdax.com/time'
);

und test_basic_public.php sieht so aus:
PHP:
<?php
// Example #1 Basic - Pubic access, get product information.
// This example is loaded from index.php file which sets an autoload and
// creates $basePath and $config variables.

use mrteye\Gdax\Api;
use mrteye\Gdax\Auth;

// Get the GDAX API and start making calls.
$gdax = new Api($config->api_url);
$products = false;

// Debugging is enabled by default.
//$gdax->setDebug(false);

// Example usage of public calls.
try {
  $productId = 'ETH-EUR';
  $products = $gdax->getProducts();
  $productOrderBook = $gdax->getProductOrderBook($productId, $param = [
      'level' => 1
  ]);
  $productTrades = $gdax->getProductTrades($productId, $param = [
      'before' => 1,
      'limit' => 100
  ]);
  $productTicker = $gdax->getProductTicker($productId);

} catch (\Exception $e) {
  $test[] = (object) array(
    'name' => __FILE__,
    'msg' => $e->getMessage(),
    'detail' => $gdax->getError()
  );
}


if ($productTicker) {
  echo 'Products: <pre>'. print_r($productTicker, true) .'</pre>';
}

Ergebnis, jetzt bekomme ich die richtige daten:
ergebnis_mrteye_GDAX_test_getProductTicker_config.PNG

Wie bekommt man jetzt z.b. den Ask-Wert in eine Variable geschrieben, weil ist ja kein Array mehr wie bei TheRock sondern irgend wie ein "stdClass Object"?
 
Zuletzt bearbeitet:
okay danke, das hat geklappt.

Wie kriegt man beim "echo" ein Zeilenumbruch hin ?
Ich habe verschidene sachen probiert aber irgend wie klappts nicht.
PHP:
echo "GDAX Askwert: $AskwertGDAX" . "\n";
Ergänzung ()

dieses problemchen hat sich erledigt dank:
PHP:
echo("<br />");
Ergänzung ()

Jetzt habe ich aber nächste problemchen.
PHP code sollte jetzt z.b. jede sekunde die Werte holen und im chrome browser untereinander auflisten.
Ich dachte da eine do-while schleife mit abbruch Möglichkeit durch Tastendruck und in der schleife ein delay Funktion.

Meine konkrete Frage wäre wie kann man in PHP die Tasten abfragen und gibt es eine fertige delay Funktion ?
 
php läuft Serverseitig, da kannst du keine Tasten abfragen. Das würde nur mit JavaScript im Frontend gehen. Das kommuniziert dann mit deiner php-Datei, Stichwort: Ajax.

Falls du es überlesen hast:
Polling is discouraged in favor of connecting via the websocket stream and listening for match messages.
U.u. wirst bei deinen sekündlichen Abfragen gesperrt.
 
Oh das wird immer besser, JS, Ajax. Ich kann nicht mal richtig PHP :(.
Habe ich übersehen und habe es auch schon gemerkt. Chrome tut nähmlich gar nix wenn while schleife und sleep() drin ist.
Wenn ich jede sekunde auf F5 drücke funktionierts!
 
Das Problem ist, dass du eigentlich nur "ganze" Webseiten anzeigen kannst, das heißt, du kannst nicht in der Mitte "warten" oder in ne schleife gehen, dann zeigt dir Chrome nix an, weil er brav wartet, bis alles da ist (dazu kommt noch Caching aus allen Ecken).

​JS ist gar nicht so schwer:

Code:
​<div id="myid"></div>
<script>
​d=new Date();
​​document.getElementById('myid').innerHTML="<h1>"+d+"</h1>";
​</script>

​

​Es ist sehr einfach, schlechtes JS zu schreiben, dafür gibt es in jedem Browser ne Entwicklerkonsole, die einem echt helfen kann (F12 drücken).
 
was macht diese Codeschnippsel genau?
Wo muss ich diesen Codeschnippsel rein machen?
Das Projekt ist hier drin: C:\xampp\htdocs\mrteye\GDAX
und der index.php und test_basic_public.php unter C:\xampp\htdocs\mrteye\GDAX\test
 
Ich habe keine html datei nur php.
Ich habe den obigen code in mein test_basic_public.php eingefügt. Passiert aber nix.
Code:
<div id="myid"></div>
<script>
​d=new Date();
​​document.getElementById('myid').innerHTML="<h1>"+d+"</h1>";
​</script>

<?php
// Example #1 Basic - Pubic access, get product information.
// This example is loaded from index.php file which sets an autoload and
// creates $basePath and $config variables.

use mrteye\Gdax\Api;
use mrteye\Gdax\Auth;

// Get the GDAX API and start making calls.
$gdax = new Api($config->api_url);
$products = false;
:
:
 
Zuletzt bearbeitet:
Vielleicht funktioniert es besser wenn du auch ein valides HTML-Dokument ausgeben würdest. Also etwas das mit <html> anfängt und mit </html> aufhört und 'nem <body> dazwischen.
Dass du bisher überhaupt etwas angezeigt bekommen hast liegt daran, dass die Browser nicht auf valides HTML bestehen, wie du es vielleicht von C her kennst. Sonst würden viele Seiten gar nicht mehr funktionieren.
Du hast aber nicht zufälligerweise einen Script-Blocker aktiv?
 
Habe ich das richtig verstanden in meinem PHP Datei ein HTML Code (obige Beispiel) einfügen ?
Wo inde ich ob ein Script Blocker aktiv ist bei Chrome?
 
Grundsätzlich ja, aber es ist eben kein valides HTML, also musst du dich nicht wundern, wenn etwas nicht funktioniert.
Wenn du keinen Script-Blocker installierst oder aktiviert hast, sollte das auch nicht geblockt werden.
 
Ich habe das hier in mein PHP Datei eingefügt:
Code:
<html>
<head>
  <script>
    <div id="myid"></div>
​     d=new Date();
​​     document.getElementById('myid').innerHTML="<h1>"+d+"</h1>";
  </script>
</head>
<body>

</body>
</html>


<?php
// Example #1 Basic - Pubic access, get product information.
// This example is loaded from index.php file which sets an autoload and
// creates $basePath and $config variables.

use mrteye\Gdax\Api;
use mrteye\Gdax\Auth;

// Get the GDAX API and start making calls.
$gdax = new Api($config->api_url);
$products = false;
:
:

funktioniert leider nicht.
Wie bekommt man ein solides HTML + PHP?
 
Zuletzt bearbeitet:
Klar funktioniert es nicht, weil du es noch schlimmer gemacht hast. Das Beispiel gehört erst mal in den <body> und nicht <head>, und das <script> ist auch verrutscht.
Schau' dir doch erst mal ein paar Tutorials zu php an, damit du das Konzept dahinter verstehst. Das ist offenbar noch nicht der Fall.
Warum ist denn die Entscheidung für php gefallen? Wolltest du neben C noch eine Sprache lernen?
 
Ich will eigendlich nur ein Mini-Tradingbot bauen, welche zwischen z.b. TheRock und Gdax handelt.
API von TheRockTrading ist in PHP und teilweise in Ruby geschrieben und API von Gdax sollte in NodeJS, PHP, Ruby, Python aber soweit bin ich noch nicht. Die anderen exchanger habe ich noch nicht geschaut.
https://api.therocktrading.com/doc/v1/index.html#api-Market_API-Ticker
https://docs.gdax.com/

Mit eure Hilfe habe ich soweit geschaft dass Ask-Werte im Browser angezeigt werden, aber neue Werte werden nur geholt wenn ich F5 drücke.

Das war der Visual Studio Code. Ich habe dann im script bereich den Beispielcode eingebaut.
HTML:
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>Page Title</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" type="text/css" media="screen" href="main.css" />
  <script src="main.js"></script>
</head>
<body>
  
</body>
</html>
 
Die APIs sind zwar in PHP, JS, Ruby etc. geschrieben, aber ansprechen kannst du sie mit jedem Programm, dass HTTP GET, POST und das JSON Format beherrscht.
Dafür gibts sicher fertige Bibliotheken in C.

Wenn du das im Browser umsetzen willst, brauchst du nicht nur PHP sondern auch JavaScript. Bis du dich in diese zwei Sprachen eingearbeitet hast, wäre dein Programm in C schon längst fertig.
 
Einen Bot baut man doch nicht als Internetseite auf.
Dafür nimmt man doch eine CLI Applikation?!
Kann man zwar auch in PHP schreiben aber auch in Node, C, C#, ...
 
Okay danke für eure Hilfe.
Das wird dann komplizierter, ich lege das projekt aktuell auf Eis.
Gruß
 
Zurück
Oben