PHP Stock Quote

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
gth759k
Forum Commoner
Posts: 76
Joined: Mon Jun 15, 2009 3:04 am

PHP Stock Quote

Post by gth759k »

I made this last night so I thought I'd share. This script rakes yahoo finance for stock quotes and stores the results in an array. Its not extremely sophisticated but it works.

Code: Select all

 
    // quote function
    function quote($symbol) {
        
        $htmlfile = "http://finance.yahoo.com/q?s=";
        $url = $htmlfile.$symbol;
        
        // original file contents
        $original_file = @file_get_contents($url);
        
        // if file_get_contents fails to open the link do nothing
        if(!$original_file) {}
        else {
            
            $stock = array();
            
            // find company name in original file contents
            preg_match_all("/<h1>(.*?)<\/h1>/", $original_file, $name);
            $stock['name'] =  strip_tags($name[1][0]);
            
            // find table rows in original file contents
            preg_match_all("/<tr(.*?)>(.*?)<\/tr>/", $original_file, $matches);
            
            $result = $matches[0];
            $tag = "/<td class=\"yfnc_tabledata1\">(.*?)<\/td>/";
 
            // Latest Trade
            preg_match_all($tag, $result[0], $value);
            $stock['value'] = strip_tags($value[0][0]);
            
            // Trade Time
            preg_match_all($tag, $result[1], $time);
            $stock['time'] = strip_tags($time[0][0]);
            
            // Previous Close
            preg_match_all($tag, $result[2], $previousclose);
            $stock['previousclose'] = strip_tags($previousclose[0][0]);
 
            // Open
            preg_match_all($tag, $result[3], $open);
            $stock['open'] = strip_tags($open[0][0]);
            
            // Change
            $stock['change'] = $stock['value']-$stock['open'];
            
            // Bid
            preg_match_all($tag, $result[4], $bid);
            $stock['bid'] = strip_tags($bid[0][0]);
            
            // Ask
            preg_match_all($tag, $result[5], $ask);
            $stock['ask'] = strip_tags($ask[0][0]);
            
            // Day's Range
            preg_match_all($tag, $result[7], $daysrange);
            $stock['daysrange'] = strip_tags($daysrange[0][0]);
            
            // 52 wk Range
            preg_match_all($tag, $result[8], $yearrange);
            $stock['yearrange'] = strip_tags($yearrange[0][0]);
            
            // Volume
            preg_match_all($tag, $result[9], $volume);
            $stock['volume'] = strip_tags($volume[0][0]);
            
            // Avg. Volume
            preg_match_all($tag, $result[10], $avgvolume);
            $stock['avgvolume'] = strip_tags($avgvolume[0][0]);
            
            // Market Cap
            preg_match_all($tag, $result[11], $marketcap);
            $stock['marketcap'] = strip_tags($marketcap[0][0]);
            
            // P/E
            preg_match_all($tag, $result[12], $pe);
            $stock['pe'] = strip_tags($pe[0][0]);
            
            // EPS
            preg_match_all($tag, $result[13], $eps);
            $stock['eps'] = strip_tags($eps[0][0]);
            
            // Dividend & Yeild
            preg_match_all($tag, $result[14], $dividend);
            $stock['dividend'] = strip_tags($dividend[0][0]);
            
            // Forward P/E
            preg_match_all($tag, $result[15], $forwardpe);
            $stock['forwardpe'] = strip_tags($forwardpe[0][0]);
            
            // P/S
            preg_match_all($tag, $result[16], $ps);
            $stock['ps'] = strip_tags($ps[0][0]);
            
            echo '<pre>'; print_r($stock); echo '</pre>';
            
        }
    }
    
    quote('msft');
 
The output array looks like this:

Array
(
[name] => Microsoft Corporation (MSFT)
[value] => 29.22
[time] => Nov 27
[previousclose] => 29.79
[open] => 29.01
[change] => 0.21
[bid] => 22.26 x 100
[ask] => N/A
[daysrange] => 28.75 - 29.39
[yearrange] => 14.87 - 30.14
[volume] => 29,357,892
[avgvolume] => 56,729,100
[marketcap] => 259.45B
[pe] => 18.99
[eps] => 1.54
[dividend] => 0.52 (1.80%)
[forwardpe] => 14.05
[ps] => 4.70
)
User avatar
requinix
Spammer :|
Posts: 6617
Joined: Wed Oct 15, 2008 2:35 am
Location: WA, USA

Re: PHP Stock Quote

Post by requinix »

Isn't there an API for this? So you don't have to scrape pages?
gth759k
Forum Commoner
Posts: 76
Joined: Mon Jun 15, 2009 3:04 am

Re: PHP Stock Quote

Post by gth759k »

I haven't found any good free ones yet. Most financial data providers like Quote Media cost around $10,000 a month for the same data my script gets but its in xml format and you don't need to know the symbol. Let me know if you do.
Post Reply