麻烦在线阅读.csv文件?

时间:2013-07-07 19:33:11

标签: php http yql

雅虎拥有财务API,允许个人获取当前和历史股票信息。他们有多种方法来检索这些信息,其中一种是使用Yahoo Query Language,另一种是直接下载/读取他们的.csv(逗号分隔文件)文件。

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

php是否限制我,雅虎是否限制我(似乎不太可能),或者只是一个人只能通过http协议传递这么多信息?我欢迎任何有见识的评论,并非常感谢任何建设性的批评。我的代码如下:

<?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
}

?>
编辑:非常感谢所有建设性的建议,非常感谢:)。)。

2 个答案:

答案 0 :(得分:3)

由于它是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);
}
?>

答案 1 :(得分:1)

$CSV = file_get_contents('http://ichart.yahoo.com/table.csv?s=GOOG&a=0&b=1&c=2000&d=0&e=31');
var_dump($CSV);

^尝试这个尺寸。

您只需fread一次。很自然你没有得到整件事。它需要在feof()之前阅读。您不能指望TCP / IP传递预期的缓冲区大小。你说fread()最多只有#####字节,但你得到的回报就像服务器希望(/可以)一次发送一样多。

PS :要完全出色,请使用cURL!但是file_get_contents应该在这里做。