【问题标题】:What is the proper way to parse yahoo currency http://finance.yahoo.com/connection/currency-converter-cache?date?解析雅虎货币 http://finance.yahoo.com/connection/currency-converter-cache?date 的正确方法是什么?
【发布时间】:2015-10-12 14:51:02
【问题描述】:

作为我尝试并通过试用删除以从返回中获取 json 内容的代码如下 我用的方法。

$date= YYYYMMDD; 

//example '20140113'

$handle = fopen('http://finance.yahoo.com/connection/currency-converter-cache?date='.$date.'', 'r');

//sample code is http://finance.yahoo.com/connection/currency-converter-cache?date=20140208 paste the url in browser;

// use loop to get all until end of content 

   while (!feof($handle)) {
            $contents .= fread($handle, 8192);
        }
        fclose($handle);

代码以 yahoo 和 json 格式返回给定的批量

所以删除未知格式

   "/**/YAHOO.Finance.CurrencyConverter.addConversionRates (" and ends with ");"

  $contents = str_replace('/**/YAHOO.Finance.CurrencyConverter.addConversionRates(','',$contents);
        $contents = str_replace(');','',$contents);
        $obj = json_decode($contents,true);


then loop the content by 
foreach($obj['list']['resources'] as $key0 => $value0){

}

【问题讨论】:

  • 此端点设计为与 javascript 一起使用。您所说的“未知格式”是在命中此端点并且您正在使用他们的框架时调用的回调函数。

标签: php json parsing yahoo-api yahoo-finance


【解决方案1】:

我更喜欢使用file_get_contents 来获取htmlpreg_match_all 来清理json,即:

<?php
$json = file_get_contents("http://finance.yahoo.com/connection/currency-converter-cache?date=20140113");
preg_match_all('/\((.*)\);/si', $json, $json, PREG_PATTERN_ORDER);
$json =  $json[1][0];
$json = json_decode($json,true);

foreach ($json["list"]["resources"] as $resource){
    echo $resource["resource"]["fields"]["date"];
    echo $resource["resource"]["fields"]["price"];
    echo $resource["resource"]["fields"]["symbol"];
    echo $resource["resource"]["fields"]["price"];
}

注意:

我已经测试了代码,它按预期工作。

【讨论】:

    猜你喜欢
    • 2011-10-06
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多