PHP命令行采集所有股票趋势信息程序

作者:简简单单 2016-08-08

最近帮朋友写了一个简单的股票采集工具,采集的同花顺股票趋势信息,使用php命令行模式编写。只完成了采集部分功能,将输出的数据复制到execl(或ET)分析,比任何后台都方便。

主要函数只有一个类实现(stock.class.php):

    class StockClass{
        public $stockId;
        
        public function __construct($stockId){
            $this -> stockId = $stockId;
        }
        
        private function getUrl(){
            return "http://stockpage.10jqka.com.cn/" . $this -> stockId . "/";
        }
        
        private function getPage(){
            return file_get_contents($this -> getUrl());
        }
        
        //核心,通过正则匹配出 标签名,并将对应的方法的结果替换掉标签占位符
        public function getInfo($template){
            $html = $this -> getPage();
            if( preg_match_all("/\{([^\}]*)\}/", $template, $result) ){
                foreach($result[1] as $index => $fun){
                    $template = str_replace($result[0][$index], $this -> $fun($html), $template);
                }
            }
            return mb_convert_encoding($template, "GBK", "UTF-8");  //Windows的命令提示符编码是GBK
        }
        
        private function match($pattern, $html, $itemIndex = 1){
            $pattern = '/' . str_replace('/', '\/', $pattern) . '/';
            if( preg_match($pattern, $html, $result) ){
                return $result[$itemIndex];
            }else{
                return "-";
            }
        }
        
        //趋势的规则都一样,合并
        private function qushiPattern($name){
            return '

' . $name . ':
\s*
([^<]*)
';
        }
        
        //支持的标签
        private function name($html){
            return $this -> match("([^\(<]*)\(", $html, 1);<br />         }<br />         private function score($html){<br />             return $this -> match('<span class="analyze-num">(\d+(\.\d+)?)</span>', $html);<br />         }<br />         private function ti<a href="/fw/photo.html" target="_blank">ps</a>($html){<br />             return $this -> match('<span class="analyze-tips">([^<]*)</span>', $html);<br />         }<br />         private function qushishort($html){<br />             return $this -> match($this -> qushiPattern("短期趋势"), $html);<br />         }<br />         private function qushimiddle($html){<br />             return $this -> match($this -> qushiPattern("中期趋势"), $html);<br />         }<br />         private function qushilong($html){<br />             return $this -> match($this -> qushiPattern("长期趋势"), $html);<br />         }<br />     }<br /> ?></p> <p>命令提示符中的调用方法如下(stock.php):</p> <p><br /> <?php<br />      <br />     if(count($argv) >= 2){<br />         require("stock.class.php");<br />         $stockId = $argv[1];<br />         $stock = new StockClass($stockId);<br />         $temp = $stockId;<br />         $temp .= "  {name}";    //名称<br />         $temp .= "  {score}";   //评分<br />         $temp .= "  {tips}";    //描述<br />         $temp .= "  {qushishort}";  //短期趋势<br />         $temp .= "  {qushimiddle}"; //中期趋势<br />         $temp .= "  {qushilong}";   //长期趋势<br />         //$temp .= "    {zidingyi}";    //自定义,直接在StockClass增加zidingyi方法即可<br />         $temp .= "\n";<br />         echo $stock -> getInfo($temp);<br />     }<br /> ?></p> <p>直接使用 *\php.exe stock.php 股票代码即可实现调用,每次输入太长的,可以用批处理简化。将下面的代码保存为 stock.cmd。</p> <p><br /> @XXX\php.exe stock.php %1<br /> 运行结果:</p> <p> </p> <center><a href="https://img.111com.net/get_pic/2016/08/08/image57a88e999f2735.06506587.jpg" class="js-smartPhoto" target="_blank"><img alt="" src="https://img.111com.net/get_pic/2016/08/08/image57a88e999f2735.06506587.jpg" /></a></center> <p>这样就完成了单个股票趋势的采集,如果要采集所有的股票信息,可以保存为批处理文件(batch.cmd)</p> <p>1</p> <p>@echo off<br /> call stock 000001<br /> call stock 000002<br /> call stock 000003<br /> call stock 000004<br /> call stock 000005<br /> call stock 000006<br /> call stock 000007<br /> call stock 股票代码n...<br /> 双击打开即可显示,如果想保存到文件,可以执行 batch.cmd > log.txt,然后将结果复制到 Execl(或ET)即可进行更负责的分析。</p> <center><a href="https://img.111com.net/get_pic/2016/08/08/image57a88ea84f4608.49383631.jpg" class="js-smartPhoto" target="_blank"><img alt="" src="https://img.111com.net/get_pic/2016/08/08/image57a88ea84f4608.49383631.jpg" /></a></center> </div> </div> </section> <div class="wrap-box"> <div class="turnPage wrapStyle"> <a href="https://m.111com.net/art-116418.htm">上一个:<span>Laravel 默认重置密码功能代码重构方法</span></a> <a href="https://m.111com.net/art-116422.htm">下一个:<span>php curl访问调用https时报错解决办法</span></a> </div> </div> <section class="wrap-box"> <div class="g-tit"> <h2>相关文章</h2> </div> <ul class="s-list nobord notop"> <li> <a href="https://m.111com.net/art-131242.htm" class="s-card"> <div class="s-card-l"> <p class="tit">php怎么运行?php程序的运行方法</p> <div class="info"> <span class="person">php入门</span> <span class="time">2017-02-22</span> </div> </div> </a> </li> <li> <a href="https://m.111com.net/art-131263.htm" class="s-card"> <div class="s-card-l"> <p class="tit">php怎么运行c语言程序?利用php调用C语言 扩展PHP的功能</p> <div class="info"> <span class="person">php入门</span> <span class="time">2017-02-22</span> </div> </div> </a> </li> <li> <a href="https://m.111com.net/art-127210.htm" class="s-card"> <div class="s-card-l"> <p class="tit">怎么利用register_shutdown_function判断php程序是否执行完</p> <div class="info"> <span class="person">php应用</span> <span class="time">2017-01-05</span> </div> </div> </a> </li> <li> <a href="https://m.111com.net/art-127075.htm" class="s-card"> <div class="s-card-l"> <p class="tit">使用PM2守护PHP命令行程序教程</p> <div class="info"> <span class="person">linux</span> <span class="time">2017-01-04</span> </div> </div> <div class="s-card-pic"> <img src="https://assets.111com.net/images/lazy.gif" data-src="https://img.111com.net/get_pic/2017/01/04/20170104164702754_c_246_164.jpg" alt="使用PM2守护PHP命令行程序教程" /> </div> </a> </li> <li> <a href="https://m.111com.net/art-120473.htm" class="s-card"> <div class="s-card-l"> <p class="tit">php计算年龄精准到年月日的程序</p> <div class="info"> <span class="person">php入门</span> <span class="time">2016-10-02</span> </div> </div> </a> </li> <li> <a href="https://m.111com.net/art-117452.htm" class="s-card"> <div class="s-card-l"> <p class="tit">PHP程序时出现 Fatal error: Maximum execution time of 30 seconds exceeded in 提示</p> <div class="info"> <span class="person">常见问题</span> <span class="time">2016-08-20</span> </div> </div> </a> </li> </ul> </section> <section class="wrap-box"> <div class="g-tit"> <h2>精彩推荐</h2> </div> <ul class="card-box"> <li class="card3"> <a href="https://m.111com.net/azgame/46853.htm" target="_self" class="figure"> <div class="figure-box"> <img src="https://assets.111com.net/images/lazy.gif" data-src="https://img.111com.net/attachment/m_soft/46853/5dcb71bae30a3.png" alt="一剑斩仙" /> </div> <p class="figure-head">一剑斩仙</p> <span class="figure-btn">下载</span> </a> </li> <li class="card3"> <a href="https://m.111com.net/azgame/224592.htm" target="_self" class="figure"> <div class="figure-box"> <img src="https://assets.111com.net/images/lazy.gif" data-src="https://img.111com.net/m00/77/b7/b0a10d2c1b09f241dabff441346fb91c.png" alt="超级雷电战机" /> </div> <p class="figure-head">超级雷电战机</p> <span class="figure-btn">下载</span> </a> </li> <li class="card3"> <a href="https://m.111com.net/azgame/30153.htm" target="_self" class="figure"> <div class="figure-box"> <img src="https://assets.111com.net/images/lazy.gif" data-src="https://img.111com.net/attachment/m_soft/30153/6d482cbc24.jpg" alt="烈火一刀" /> </div> <p class="figure-head">烈火一刀</p> <span class="figure-btn">下载</span> </a> </li> <li class="card3"> <a href="https://m.111com.net/azgame/42147.htm" target="_self" class="figure"> <div class="figure-box"> <img src="https://assets.111com.net/images/lazy.gif" data-src="https://img.111com.net/attachment/m_soft/42147/5d4cf5dfeb6ca.png" alt="天使纪元" /> </div> <p class="figure-head">天使纪元</p> <span class="figure-btn">下载</span> </a> </li> </ul> <ul class="card-box-b"> <li class="card10"> <a href="https://m.111com.net/azgame/127872.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="https://assets.111com.net/images/lazy.gif" data-src="https://img.111com.net/mobile/202111/15/35c0b8587a.png" alt="完美修真" /> </div> <div class="figure-cont"> <p class="figure-head">完美修真</p> <div class="figure-desc"> <span>角色扮演</span> <span>538.52 MB</span> </div> <div class="figure-desc"> <p>高清画质体验,华丽场景视觉盛宴</p> </div> </div> <span class="figure-btn">下载</span> </a> </li> <li class="card10"> <a href="https://m.111com.net/azgame/30904.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="https://assets.111com.net/images/lazy.gif" data-src="https://img.111com.net/attachment/m_soft/30904/fd82743d5b.png" alt="永恒领主" /> </div> <div class="figure-cont"> <p class="figure-head">永恒领主</p> <div class="figure-desc"> <span>即时网游</span> <span>392.00 MB</span> </div> <div class="figure-desc"> <p>3D魔幻MMO</p> </div> </div> <span class="figure-btn">下载</span> </a> </li> <li class="card10"> <a href="https://m.111com.net/azgame/113807.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="https://assets.111com.net/images/lazy.gif" data-src="https://img.111com.net/mobile/202107/01/275a3dca7e.png" alt="九州八荒录" /> </div> <div class="figure-cont"> <p class="figure-head">九州八荒录</p> <div class="figure-desc"> <span>角色扮演</span> <span>232.56 MB</span> </div> <div class="figure-desc"> <p>九州八荒,一剑入魂。</p> </div> </div> <span class="figure-btn">下载</span> </a> </li> <li class="card10"> <a href="https://m.111com.net/azgame/372634.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="https://assets.111com.net/images/lazy.gif" data-src="https://img.111com.net/m00/f5/99/f276753f2f8beb9dd0cceb843afcf723.png" alt="航海王燃烧意志" /> </div> <div class="figure-cont"> <p class="figure-head">航海王燃烧意志</p> <div class="figure-desc"> <span>角色扮演</span> <span>1.57 GB</span> </div> <div class="figure-desc"> <p>热血激战动作冒险游戏</p> </div> </div> <span class="figure-btn">下载</span> </a> </li> <li class="card10"> <a href="https://m.111com.net/azgame/37526.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="https://assets.111com.net/images/lazy.gif" data-src="https://img.111com.net/m00/f3/6a/29dc4894964b32d77cad35e9676985d4.png" alt="君临传奇" /> </div> <div class="figure-cont"> <p class="figure-head">君临传奇</p> <div class="figure-desc"> <span>角色扮演</span> <span>43.57 MB</span> </div> <div class="figure-desc"> <p>经典RPG战斗手游</p> </div> </div> <span class="figure-btn">下载</span> </a> </li> </ul> </section> <footer class="foot"> <a href="https://m.111com.net/" class="logo-icon"> <img src="https://assets.111com.net/mobile/images/logo2.png" alt="一聚教程网"> </a> <p>Copyright © 2010-2024</p> <p>111com.net All Rights Reserved</p> </footer> <div class="back-top" style="display: block;"> <span class="icon-box"><svg class="icon" viewBox="0 0 1024 1024"> <path d="M213.333333 640h170.666667v256h256v-256h170.666667l-298.666667-341.333333zM170.666667 128h682.666666v85.333333H170.666667z" fill="#0374f3"> </path> </svg> </span> </div> <script src="https://api.111com.net/api/stat/hits?type=article&id=116421"></script> </div> <script src="https://assets.111com.net/js/stat.js?v=2024022101"></script> </body> </html>