清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
#!/usr/bin/perl
#
# Script to download a table of daily stock data in .csv format
# from yahoo.com
#
# Syntax: yahoo.pl <symbol> <startdate> <stopdate>
# where startdate and stopdate can be in almost any format
#
use Date::Manip;
($symbol,$startdate,$stopdate)=@ARGV;
$startdate = &ParseDate($startdate);
$stopdate = &ParseDate($stopdate);
#print "symbol=$symbol start=$startdate stop=$stopdate\n";
$startday = &UnixDate($startdate,"%d");
$startmon = &UnixDate($startdate,"%m");
$startyear = &UnixDate($startdate,"%y");
$stopday = &UnixDate($stopdate,"%d");
$stopmon = &UnixDate($stopdate,"%m");
$stopyear = &UnixDate($stopdate,"%y");
$port=80; # HTTP
$dataserver="chart.yahoo.com";
$AF_INET=2;
$SOCK_STREAM=1;
$sockaddr='S n a4 x8';
($name,$aliases,$proto)=getprotobyname('tcp');
($name,$aliases,$type,$len,$remoteaddr)=gethostbyname($dataserver);
$remote=pack($sockaddr,$AF_INET,$port,$remoteaddr);
($a,$b,$c,$d)=unpack('C4',$remoteaddr);
#print "remoteaddr=$a.$b.$c.$d port=$port\n";
if (socket(SOCK,$AF_INET,$SOCK_STREAM,$proto)) {
#print "Socket OK\n";
} else {
die $!;
}
if (connect(SOCK,$remote)) {
#print "connect OK\n";
} else {
die $!;
}
$local=getsockname(SOCK);
($family,$port,$localaddr)=unpack($sockaddr,$local);
($a,$b,$c,$d)=unpack('C4',$localaddr);
#print "remoteaddr=$a.$b.$c.$d port=$port\n";
select(SOCK); $|=1; select(STDOUT);
print SOCK "GET /table.csv?s=$symbol&a=$startmon&b=$startday&c=$startyear&d=$stopmon&e=$stopday&f=$stopyear&g=d&q=q&y=0&z=$symbol&x=.csv HTTP-1.0\n\n";
$start = 0;
while (<SOCK>) {
if ($start) {
($date,$open,$high,$low,$close,$volume) = split(/,/);
($day,$month,$year) = split('-',$date);
$year = int $year;
if ($year < 80) {
$year = $year + 2000;
}
$dateint = &ParseDate("$month $day, $year");
$date = &UnixDate($dateint,"%Y/%m/%d");
print $date,' ',$open,' ',$high,' ',$low,' ',$close,' ',$volume;
}
/^Date/ && ($start = 1);
}