1

雅虎有一个金融 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
}

?>

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

4

2 回答 2

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);
}
?>
于 2013-07-07T19:48:45.887 回答
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应该在这里做。

于 2013-07-07T19:39:07.470 回答