雅虎有一个金融api,允许个人获得当前和历史股票信息。他们有多种方法来检索这些信息,一种是使用雅虎查询语言,另一种是直接下载/读取他们的.csv (逗号分隔文件)文件。
我发现了一个非常有用的脚本,可以通过php读取csv文件。然而,我似乎只得到了csv文件的前9000个字符。我试着调整文件大小,但都无济于事,我想知道我到底在哪里被封顶,以及是否有办法绕过这个问题。
是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
}
?>编辑:将对所有有建设性的建议进行投票,非常感谢:))。
发布于 2013-07-08 03:39:07
$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()最多包含#####字节,但是您可以在一次攻击中得到服务器希望(/ can)发送的任意数量的结果。
PS:使用cURL就可以了!但是file_get_contents应该在这里做。
发布于 2013-07-08 03:48:46
因为它是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);
}
?>https://stackoverflow.com/questions/17515546
复制相似问题