0

データを削除して取得したい次のテキストがあります。

(function() {})({
    "Data": {
        "Status": "SUCCESS",
        "Name": "Facebook Inc",
        "Symbol": "FB",
        "LastPrice": 31.91,
        "Change": -1.12,
        "ChangePercent": -3.39085679685135,
        "Timestamp": "Fri May 25 16:00:05 UTC-04:00 2012",
        "MarketCap": 20214729720,
        "Volume": 37189630,
        "ChangeYTD": 0,
        "ChangePercentYTD": 0,
        "High": 32.95,
        "Low": 31.11,
        "Open": 32.9
    }
})

私はまた、今年10月に私たちを去るグーグルAPIで動作している次のコードを持っています。

<?php

//Obtain Quote Info
$quote = file_get_contents('http://finance.google.com/finance/info?client=ig&q=NASDAQ:'  . $stock . '');

//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
$perc = $json_output->c;
$last = $json_output->l;
$date = $json_output->lt;
$name = $json_output->t;
?>

なんらかの理由で、他の人が自分のコードで動作するようにする方法を理解できません。誰か提案がありますか?

4

2 に答える 2

0

http://dev.markitondemand.com/Api/Quote/json?symbol=AAPLjsonのpを省略して、URLとして使用するだけです。

<?php
$stock = "FB";
//Obtain Quote Info
//$quote = file_get_contents('http://dev.markitondemand.com/Api/Quote/json?symbol='.$stock);

//or with curl
$quote = curl_get('http://dev.markitondemand.com/Api/Quote/json?symbol='.$stock);

function curl_get($url){
    if (!function_exists('curl_init')){
        die('Sorry cURL is not installed!');
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/1.0");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}

//decode JSON data
$json_output = json_decode(utf8_decode($quote));

$perc = $json_output->Data->ChangePercent;
$last = $json_output->Data->LastPrice;
$date = $json_output->Data->Timestamp;
$name = $json_output->Data->Name;

print_r($json_output);
/*
stdClass Object
(
    [Data] => stdClass Object
        (
            [Status] => SUCCESS
            [Name] => Facebook Inc
            [Symbol] => FB
            [LastPrice] => 31.91
            [Change] => -1.12
            [ChangePercent] => -3.3908567968514
            [Timestamp] => Fri May 25 16:00:05 UTC-04:00 2012
            [MarketCap] => 20214729720
            [Volume] => 37189630
            [ChangeYTD] => 0
            [ChangePercentYTD] => 0
            [High] => 32.95
            [Low] => 31.11
            [Open] => 32.9
        )

)*/
?>
于 2012-05-28T01:53:19.443 に答える
-1

Google Financeに使用しているコードは、使用しているGoogleFinanceAPIからの出力を処理するように直接カスタマイズされています。

GoogleFinanceからの出力は次のとおりです。

// [
{
"id": "296878244325128"
,"t" : "FB"
,"e" : "NASDAQ"
,"l" : "31.91"
,"l_cur" : "31.91"
,"s": "0"
,"ltt":"4:00PM EDT"
,"lt" : "May 25, 4:00PM EDT"
,"c" : "-1.12"
,"cp" : "-3.39"
,"ccol" : "chr"
}
]

次のことを行うコードの部分:

$data = substr($json, 4, strlen($json) -5);

GF出力から不要な文字を正確に削除しています。匿名関数内にラップされた新しい出力については、次のことをお勧めします。

<?php
preg_match('/\(function\(\) \{\}\)\((.*)\)/', $input_string, $matches);
$data_json = $matches[1];
$json_output = json_decode($data_json, true); //true = assoc array
$final_json = $json_output['Data'];

これにより、有効なjson文字列が$ json変数に割り当てられます。ここで、$ input_stringは、質問にリストした入力です。また、$ final_jsonには、元のjsonのData:プロパティ内にあるものがすべて含まれます。

于 2012-05-28T01:53:19.820 に答える