php - 在 php 中读取在线 .csv 文件时遇到问题?

标签 php http yql

Yahoo 有一个财务 api,允许个人获取当前和历史股票信息。他们有多种检索此信息的方法,其中一种是使用 Yahoo 查询语言,另一种是直接下载/阅读他们的 .csv(逗号分隔文件)文件。

我找到了一个非常有用的脚本,用于通过 php 读取 csv 文件。但是,我似乎只获得了 csv 文件的前 9,000 个字符左右。我试过调整文件大小但无济于事,我想知道我到底在哪里受到限制,是否有办法解决这个问题。

是php给我封顶了,还是yahoo给我封顶了(好像不太可能),还是说只能通过http协议(protocol)传递这么多信息?我欢迎任何有根据的评论,并非常感谢任何建设性的批评。我的代码如下:

<?php

// Setup Variables
$requestUrl = "http://ichart.yahoo.com/table.csv?s=GOOG&a=0&b=1&c=2000&d=0&e=31";

// Pull data (download CSV as file)
$filesize=1000000;
$handle = fopen($requestUrl, "r");
$raw = fread($handle, $filesize);
fclose($handle);

echo $raw; //error checking, turns out the $raw is only about 8000 characters long


// Split results, trim way the extra line break at the end
$quotes = explode("\n",trim($raw));


foreach($quotes as $quoteraw) {
$quoteraw = str_replace(", I", " I", $quoteraw);
$quote = explode(",", $quoteraw);

echo $quote[0]."
"; // output the first element of the array, the Company Name
}

?>

编辑:将对所有建设性建议投赞成票,非常感谢 :))。

最佳答案

因为它是 csv 文件,所以使用 fgetcsv相反。

来自 php.net 的示例代码:

<?php
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}
?>

关于php - 在 php 中读取在线 .csv 文件时遇到问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17515546/

相关文章:

javascript - 通过 AJAX 进行简单表单 POST 时出现 500 错误 - 不确定出了什么问题?

json - Angular $http 服务 - 强制不解析对 JSON 的响应

jquery - 有人可以帮我使用 livestream 的 api 发出跨域 xml 请求吗?

YQL Finance 结果为空

javascript - 如果值为 0,Highcharts 不应绘制图表

php - 如何与 PHP 建立 SSL 连接

java - HTTP header 结束

python - 如何使用 REST API 复制 protected Google 表格范围内的用户?

javascript - YQL 不按文档顺序返回带有联合运算符 (a|b) 的 xpath 选择查询

php - MySQL 独特数据