Schrägstriche in JSON von Google Finance API-Aufruf
-
12-10-2019 - |
Frage
Ich habe den Google Finance API wurde mit einigen Börseninformationen erfolgreich zu sammeln. Das Problem ist, dass nach einem Aufruf von http://www.google.com/finance/info?infotype=infoquoteall&q=[$tickerSymbol]
hat die JSON, dass Google kehrt //
hinzugefügt, bevor es und damit die Zeichenfolge nicht mit PHP json_encode()
codiert werden können. Die JSONLint JSON Validator bestätigt, dass die //
s sind nicht gültig. Die offensichtliche Abhilfe ist die Schrägstriche vom Anfang des JSON abzustreifen. None-the-less, ich frage mich, links, warum Google Hiebe auf die JSON Hinzufügen es zurückkehrt. Gibt es einen Zweck hinter den zusätzlichen Schrägstriche? Ist das eine Marotte mit PHP json_encode()
, wenn andere Sprachen einfach die zusätzlichen Zeichen ignorieren würde? Bin ich etwas zu tun, falsch?
Hier ist ein Beispiel für das Ergebnis einer Anfrage für http://www.google.com/finance/info?infotype=infoquoteall&q=AAPL
mit den führenden Schrägstrichen.
// [ {
"id": "22144"
,"t" : "AAPL"
,"e" : "NASDAQ"
,"l" : "340.65"
,"l_cur" : "340.65"
,"ltt":"4:00PM EST"
,"lt" : "Jan 18, 4:00PM EST"
,"c" : "-7.83"
,"cp" : "-2.25"
,"ccol" : "chr"
,"el": "345.20"
,"el_cur": "345.20"
,"elt" : "Jan 18, 5:45PM EST"
,"ec" : "+4.55"
,"ecp" : "1.34"
,"eccol" : "chg"
,"div" : ""
,"yld" : ""
,"eo" : ""
,"delay": ""
,"op" : "327.05"
,"hi" : "344.76"
,"lo" : "326.00"
,"vo" : "66.34M"
,"avvo" : "11.28M"
,"hi52" : "348.48"
,"lo52" : "190.25"
,"mc" : "313.75B"
,"pe" : "22.49"
,"fwpe" : ""
,"beta" : "1.38"
,"eps" : "15.15"
,"name" : "Apple Inc."
,"type" : "Company"
}
]
Lösung
Für die Suche nach einer Antwort bereit suchen, hier ist ein funktionierendes Beispiel mit PHP; Die JSON wird gereinigt und in ein Objekt umgewandelt. Die Werte können leicht extrahiert werden.
Die zweite ist nur, um es fantastisch, es sendet eine Push-Nachricht, die Sie ein PubNub Kanal, wenn Seite zugegriffen wird (cron ist dein Freund). PubNub Nachricht kann leicht über Javascript empfangen werden daher leben ...
<?php
//Obtain Quote Info
$quote = file_get_contents('http://finance.google.com/finance/info?client=ig&q=INDEXDB:DAX');
//Remove CR's from ouput - make it one line
$json = str_replace("\n", "", $quote);
//Remove //, [ and ] to build qualified string
$data = substr($json, 4, strlen($json) -5);
//decode JSON data
$json_output = json_decode(utf8_decode($data));
// get the last price
$last = $json_output->l;
//Output Stock price .
echo 'DAX: ' . $last;
//////////////////////////////
// send it through pubnub //
//////////////////////////////
require_once('Pubnub.php');
// Publish and Subscribe Keys
$publish_key = 'demo';
$subscribe_key = 'demo';
$subscribe_key = false;
// Create Pubnub Object
$pubnub = new Pubnub( $publish_key, $subscribe_key, $secret_key );
// Publish !
$channel = 'quoteTheDax';
$timestamp = $pubnub->time();
$pubish_success = $pubnub->publish(array(
'channel' => $channel,
'message' => array("last" => $last2, "ts" => $timestamp)
));
//Boom its send to ppl subscribed to this channel arround the world
?>
natürlich, wenn Sie etwas Live-Aktualisierung die ganze Zeit dort brauchen, sind bessere Möglichkeiten. Ich war gerade auf der Suche alle 30min / 60min zu aktualisieren.
Andere Tipps
Ich denke, es ist, weil Google nicht wahr, mit zu arbeiten möchten, dass JSON, sie empfehlen, die Google Data API zu verwenden.