PHP Daten von einem URL auslesen

0ahnung

Cadet 3rd Year
Registriert
Nov. 2012
Beiträge
37
Hallo,
ich krieg die kriese und brauche eure Hilfe.
ich habe folgende php code:
Code:
<html>
<head>
    <title>Unsere erste Seite</title>
</head>
<body>
    <?php
    $fund_id="BTCEUR";

    $url="https://api.therocktrading.com/v1/funds/".$fund_id."/ticker";

    $headers=array(
    "Content-Type: application/json"
    );

    $ch=curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    $callResult=curl_exec($ch);
	curl_exec($ch);
    curl_close($ch);

    $result=json_decode($callResult,true);
	echo $callResult;
    print_r($result,true);
    ?>
</body>
</html>

Es tut sich gar nix.

1. Ich habe XAMPP installiert
2. Im Verzeichnis C:\xampp\htdocs\Tutorial\ eine index.html Datei erstellt und den obigen code eingefügt
3. im Firefox bzw. chrom http://localhost/Tutorial/ eingegeben
4. Tut sich aber gar nix. Nicht mal eine Fehlermeldung

Wenn ich die URL aber direkt im Firefox bzw. chrom eingebe dann werden die daten angezeit.
Als total neuling bin ich voll aufgeschmissen.
Bitte um eure Hilfe.
Gruß
 
Zuletzt bearbeitet:
error_reporting steht sicherlich bei dir auf E_ALL oder so und du hast auch keine Fehlerunterdrückung aktiviert? (Les dich mal ein, wie man die developer settings einstellt).

​Als schnelle Lösung: echo Debugging, also nach jeder Zeile ein echo, kommt das nicht, ist wohl da ein Fehler.

​Sonst: Mglw. kannst du file_get_contents verwenden, find ich kompakter als curl.

​Curl hast du ja auch sicher aktiviert (phpinfo(); und Strg+F curl)?
 
Content-Type ist kein Header den du senden solltest, schließlich sendest du keinen POST Request und somit keine Daten und somit gibt es auch nix, was deinerseits einen Content-Type hat.

Wenn man die URL im Browser aufruft (der macht per URL immer einen GET Request) kriegt man die gewünschten JSON-Daten.
 
0ahnung schrieb:
2. Im Verzeichnis C:\xampp\htdocs\Tutorial\ eine index.html Datei erstellt und den obigen code eingefügt

*hust*

PS: Der code funktioniert so wie er ist (hier lokal mit xampp) und gibt die Antwort der Seite aus ;)
PPS: Du siehst nichts weil <?php ... ?> in html als tag interpretiert wird.
 
Zuletzt bearbeitet:
Wow so schnell so viele Antworten, vielen Lieben Dank Leute.
Ich fang mal mit dem einfachsten an, die ich als Anfänger so ungefähr verstanden habe.

coolmodi:
Das mit dem <?php...?> habe von einem youtube video.
Was muss ich ändern damit es bei mir auch funktioniert?
Index.html in index.php ändern ?

Übrigens habe ich den Code von hier:
https://api.therocktrading.com/doc/v1/#api-Market_API-Ticker
MARKET API -> Ticker
Ergänzung ()

Mir ist im Code ein Fehler unterlaufen.
Und zwar habe ich beim rum probieren Zeile 24: echo $callResult; eingebaut.
Das ist beim original code nicht drin.
https://api.therocktrading.com/doc/v...ket_API-Ticker
MARKET API -> Ticker

ich habe index.html in index.php geändert.
Mit der Zeile 24: echo $callResult; werden die daten reingeholt un angezeigt aber ohne die Zeile 24 wird nichts angezeigt.

mit Zeile 24.PNG
Ergänzung ()

Hancock:
wenn ich echo Debugging; einfüge (Zeile 8 und 10) wird das hier angezeigt:
echo debugging.PNG

cURL ist enabeld
cURL.PNG
 
Zuletzt bearbeitet:
Wie gut kannst du PHP? :-) echo-Debugging ist ein Begriff, kein PHP Befehl.
Code:
​echo "balh";
befehl();
echo "blub";
​$foo=bar();
​echo "blah".$foo;
​
So in der Art geht das.

​Dein erster Screenshot ist genau das, was zu erwarten ist. Du gibst die Antwort des Servers aus (was in diesem Fall eine JSON-Antwort ist, wie du sie angefordert hast).

​Komischerweise gibt print_r nichts aus...

​curl_exec() rufst du zwei mal auf, mach mal das zweite weg.

​mach mal zusätzlich zum print_r ein echo $result;
 
Ich bin eher ein Mikrocontroller Programmierer in C.
Oh mist. Beim rum probieren habe ich noch mehr sachen drin gehabt, aber jetzt habe ich den original code reingemacht.
Entschuldigung war mein Fehler.
Jetzt sieht mein index.php so aus:

Code:
<html>
<head>
    <title>Unsere erste Seite</title>
</head>
<body>
    <?php
    $fund_id="BTCEUR";

    $url="https://api.therocktrading.com/v1/funds/".$fund_id."/ticker";
    
    $headers=array(
      "Content-Type: application/json"
    );
    
    $ch=curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    $callResult=curl_exec($ch);
    curl_close($ch);
    
    $result=json_decode($callResult,true);
    
    print_r($result);
    
    ?>
</body>
</html>

Und wenn ich das dann im chrome laufen lasse, sieht es dann so aus, d.h. die Daten kommen jetzt rein :) supie.

original code von TheRock.PNG

Wie kann man den Ask-Wert aus der Variablen "$result" rausholen und zum Berechnen in eine andere Variable kopieren?
Weil mein nächster Schritt wäre die Daten von GDAX API reinzuholen und die beiden Ask-Werte miteinander verrechnen und dann mir eine email schicken lassen.
 
Array-Zugriffe gehen ganz simpel mit $meinArray[meinIndex]. Mit isset() kann man prüfen, ob der Index überhaupt existiert. Man kann auch über das Array iterieren, das macht bei einem bekannten Index aber keinen Sinn.
 
Ich nehme an dass der $result ein String Array ist!?

Code:
<html>
<head>
    <title>Unsere erste Seite</title>
</head>
<body>
    <?php
    $fund_id="BTCEUR";

    $url="https://api.therocktrading.com/v1/funds/".$fund_id."/ticker";
    
    $headers=array(
      "Content-Type: application/json"
    );
    
    $ch=curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    $callResult=curl_exec($ch);
    curl_close($ch);
    
    $result=json_decode($callResult,true);
    
    print_r($result);
    echo  $result[10];
    var_dump(isset($result)); 
    ?>
</body>
</html>

Dann kommt leider das dabei raus:
Ask-Wert auslesen.PNG
 
Versuche es mal mit dem Index 'ask'.
 
Cool das funktioniert :).
Und es ist sogar ein numerischer Wert, so dass ich damit rechnen kann:

Code:
<html>
<head>
    <title>Unsere erste Seite</title>
</head>
<body>
    <?php
    $fund_id="BTCEUR";

    $url="https://api.therocktrading.com/v1/funds/".$fund_id."/ticker";
    
    $headers=array(
      "Content-Type: application/json"
    );
    
    $ch=curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    $callResult=curl_exec($ch);
    curl_close($ch);
    
    $result=json_decode($callResult,true);
    
    print_r($result);
    $Askwert = $result["ask"];
    $Askwert = $Askwert + 100;
    echo  $Askwert;
    ?>
</body>
</html>

Ergebnis:
Ask-Wert auslesen funkt.PNG

Die Daten von GDAX API reinholen ist nich so einfach wie bei TheRock.
Könnt ihr etwas damit anfangen?
https://docs.gdax.com/?php#get-product-order-book
GDAX Get Ticker.PNG
 

Anhänge

  • Ask-Wert auslesen funkt.PNG
    Ask-Wert auslesen funkt.PNG
    86,4 KB · Aufrufe: 410
Wo liegt das Problem? Weist du nicht wo du die Produkt-ID herholen sollst?
 
Ich habe mal google gefragt ob etwas mit GDAX PHP gibt und habe das hier gefunden:
https://github.com/mrteye/GDAX

Ich verstehe das hier nicht:
Install gdax mrmeyte.PNG

Wo muss man das Projekt hin kopieren? In den XAMPP Ordner?
Wo muss man die config.php kopieren? In den Dokumenten Ordner der Windows, komisch oder?
Wo muss man diese "composer require mrteye/gdax" ausführen und was macht das genau?

Ich habe mal einfach index.php erstellt und die erste Beispiel eingefügt und siehe da es funktioniert nicht :(.
gdax php beispiel1.PNG
 
Composer kann dir das Projekt in dein eigenes integrieren und automatisch den Classloader anpassen. Du hast aber weder noch.
Bei den paar Klassen kannst du die auch manuell 'requiere'en. Also einfach die 4 Dateien unter src neben deine index.php legen und jeweils 'require xy.php' aufrufen (der Classloader hätte das ansonsten automatisch gemacht). Evtl. müssen noch die namespace und use-Zeilen rausgelöscht werden, bin mir aber nicht sicher.
 
Wo muss ich diese 'require xy.php' eingeben und aufrufen?
Brauche ich den config.php auch nicht?

In diesem Beispiel 1 gibt es nur oben diese use Befehle, die einfach löschen?
Code:
<?php
use mrteye\Gdax\Api as Api;
use mrteye\Gdax\Auth as Auth;

// Get the GDAX API and start making calls.
$gdax = new Api('https://api-public.sandbox.gdax.com');
$products = false;

try {
  // Example usage of public calls.
  $products = $gdax->getProducts();
  $productId = 'BTC-USD';
  $productOrderBook = $gdax->getProductOrderBook($productId, $param = [
      'level' => 1
  ]);
  $productTrades = $gdax->getProductTrades($productId, $param = [
      'before' => 1,
      'limit' => 100
  ]);
} catch (\Exception $e) {
  echo $e->getMessage();
  echo '<pre>'. print_r($gdax->getError(), true) .'</pre>';
}

if ($products) {
  echo 'Products: <pre>'. print_r($products, true) .'</pre>';
} else {
  echo 'Something went wrong.';
}
 
Zuletzt bearbeitet:
So jetzt sieht mein code so aus, ist das so richtig?
Code:
<?php
//use mrteye\Gdax\Api as Api;
//use mrteye\Gdax\Auth as Auth;

require 'Api.php';
require 'ApiInterface.php';
require 'ApiCurl.php';
require 'Auth.php';
require 'Config.php';

// Get the GDAX API and start making calls.
$gdax = new Api('https://api-public.sandbox.gdax.com');
$products = false;
.....
?>

Als Ergebnis habe ich das hier bekommen:
Install gdax mrmeyte 2.PNG

Und dann habe ich namespace in Api.php auskommentiert:
Code:
<?php
/** */
//namespace mrteye\Gdax;
use Curl\Curl;

/** */
class Api implements ApiInterface{
  protected $_error = []; /** Error Array */
  /** Provide detailed debug information when an error is detected. */
  protected $_debug = true;
.....

Und das hier als Ergebnis bekommen:
Install gdax mrmeyte 3.PNG

Irgend etwas habe ich da falsch gemacht :(
Ergänzung ()

Die Dateien liegen hier drin:
mrteye Dateien.PNG
 
Du musst die Dateien in der richtigen Reihenfolge einbinden. Die Api-Klasse braucht das ApiInterface, also muss das vorher eingebunden werden.

Alternativ kannst du dir auch einen Classloader holen und das Projekt entsprechend strukturieren, wenn du Lust dazu hast. Ich weis halt nicht, wie groß das Projekt noch werden soll.
 
Ich habe vorhin composer installiert und "composer require mrteye/gdax" in cmd ausgeführt:

mrteye_GDAX_composer_CMD.PNG

Phadstruktur sieht so aus:
mrteye_GDAX_composer.PNG

Und index.php ist im test Ordner:
mrteye_GDAX_phad.PNG

Ergebnis sieht so aus:
ergebnis_mrteye_GDAX_test.PNG

Was mache ich da falsch?
Woher bekomme ich den Classloader her?
Ist es die Java Classloader?
Warum ist das soschwer ein fertiges Projekt zum laufen zu bringen, ich krieg die kriese :(.

das eigendliche Ziel ist es ein Mini-Tradingbot zu programmieren, die aktuellen Ask/Bid Werte von TheRock und GDAX auszulesen und entsprechend verrechnen und dann automatisch BTC/ETH bei einem kauft und beim anderen verkauft und alles loggt und wenn ein Trade erfolgt ist soll der Bot mir eine email schicken.
 
Zuletzt bearbeitet:
Mit Java hat das nichts zu tun. Die Funktion heißt eigentlich Autoloader, wird aber auch als Classloader bezeichnet weil es eben genau das macht.
Vielleicht ist das, was du suchst im src anstatt test-Ordner zu finden. Ich habe Composer selbst noch nicht benutzt, ich mache das manuell. Ich integriere aber auch selten andere Projekte.
 
Zurück
Oben