АРХИВ ПО ТЭГУ "OCHL"
ИЮЛЬ 16, 2011

Хаи.

Обожаю гугл.

30 минутный php скрипт, который грабит исторические данные с Google Financial по всем стакам в период с 1 января 1995 по 1 июля 2011 и сохраняет в CSV файлики вида <CUR_DIR>/<MarketName>/<Ticker>.csv

Внутри данные OCHL + Volume.

Я его правда еще не запускал на CID до 30к, но думаю там должно в итоге получиться не мало стаков.

date_default_timezone_set('UTC');
  1.  
  2. define('GRABBER_PATH', dirname(__FILE__));
  3.  
  4. // Jan-1-1995 up to Jul-1-2011
  5. $url = 'http://www.google.com/finance/historical?cid=!CID!&startdate=Jan+1%2C+1995&enddate=Jul+1%2C+2011&num=30';
  6. $exportUrlPostfix = '&output=csv';
  7.  
  8. // The easiest way
  9. $pattern = '/\<title\>;([^:]+): ([\w+]+):([\w\d]+) historical price/';
  10.  
  11. // CID up to 30k 'cause not every cid is an existings stock icon sad Исторические данные акций NYSE и NASDAQ (дневные) %d1%82%d1%80%d0%b5%d0%b9%d0%b4%d0%b8%d0%bd%d0%b3 %d1%82%d0%b5%d1%85%d0%bd%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d0%b8
  12. $cidStart = 1;
  13. $cidEnd = 30000;
  14.  
  15. for ($cid = $cidStart; $cid < $cidEnd; $cid++) {
  16.         $curUrl = str_replace('!CID!', $cid, $url);
  17.  
  18.         $pageHtml = @file_get_contents($curUrl, false, null, 0, 1000);
  19.         if (empty($pageHtml)) {
  20.                 continue;
  21.         }
  22.  
  23.         if (!preg_match($pattern, $pageHtml, $matches)) {
  24.                 continue;
  25.         }
  26.  
  27.         $companyName = $matches[1];
  28.         $market = $matches[2];
  29.         $ticker = $matches[3];
  30.  
  31.         echo "[CID=$cid] Found: $companyName ($market:$ticker)\n";
  32.  
  33.         if (!file_exists(GRABBER_PATH . '/' . $market)) {
  34.                 mkdir(GRABBER_PATH . '/' . $market);
  35.         }
  36.  
  37.         if (!is_dir(GRABBER_PATH . '/' . $market)) {
  38.                 echo " * ERR: " . GRABBER_PATH . '/' . $market . " is not dir\n";
  39.                 continue;
  40.         }
  41.  
  42.         $downloadUrl = $curUrl . $exportUrlPostfix;
  43.         $csvData = @file_get_contents($downloadUrl);
  44.         if (empty($csvData)) {
  45.                 echo " * ERR: Cannot grab data from $downloadUrl\n";
  46.                 continue;
  47.         }
  48.  
  49.         $csvFile = GRABBER_PATH . '/' . $market . '/' . $ticker . '.csv';
  50.         if (!file_put_contents($csvFile, $csvData)) {
  51.                 echo " * ERR: Cannot save CSV data to $csvFile\n";
  52.                 continue;
  53.         }
  54. }