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

作者:袖梨 2022-06-24

最近帮朋友写了一个简单的股票采集工具,采集的同花顺股票趋势信息,使用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 /> @XXXphp.exe stock.php %1<br /> 运行结果:</p> <p> </p> <center><a href="https://img.111cn.net/uploads/20220923/img_632dad7b74ff130.jpg" class="js-smartPhoto-pc" target="_blank"><img alt="" src="https://img.111cn.net/uploads/20220923/img_632dad7b74ff130.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.111cn.net/uploads/20220923/img_632dad7b9fc1831.jpg" class="js-smartPhoto-pc" target="_blank"><img alt="" src="https://img.111cn.net/uploads/20220923/img_632dad7b9fc1831.jpg" /></a></center> </div> </div> </section> <section class="wrap-box"> <div class="g-tit"> <h2>相关文章</h2> </div> <ul class="s-list nobord notop"> <li> <a href="/art-429366.htm" class="s-card"> <div class="s-card-l"> <p class="tit">欧易账户找回指南:快速恢复加密货币与Web3.0资产</p> <div class="info"> <span class="person">游戏攻略</span> <span class="time">2025-05-16</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250516/logo_68271f62796c11.jpg" alt="欧易账户找回指南:快速恢复加密货币与Web3.0资产" /> </div> </a> </li> <li> <a href="/art-428688.htm" class="s-card"> <div class="s-card-l"> <p class="tit">明日之后营地徽章展板位置在哪片区域</p> <div class="info"> <span class="person">游戏攻略</span> <span class="time">2025-05-16</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250513/logo_682329117b7451.webp" alt="明日之后营地徽章展板位置在哪片区域" /> </div> </a> </li> <li> <a href="/art-428690.htm" class="s-card"> <div class="s-card-l"> <p class="tit">奥比岛手游非法参数解决实用方法是什么</p> <div class="info"> <span class="person">游戏攻略</span> <span class="time">2025-05-16</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250513/logo_68232912d150d1.webp" alt="奥比岛手游非法参数解决实用方法是什么" /> </div> </a> </li> <li> <a href="/art-428691.htm" class="s-card"> <div class="s-card-l"> <p class="tit">我的世界红石烟花怎么做 烟花制作详细方法介绍</p> <div class="info"> <span class="person">游戏攻略</span> <span class="time">2025-05-16</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250513/logo_68232943a47811.png" alt="我的世界红石烟花怎么做 烟花制作详细方法介绍" /> </div> </a> </li> <li> <a href="/art-429354.htm" class="s-card"> <div class="s-card-l"> <p class="tit">虚拟币价格排行榜 虚拟币价格排名TOP10</p> <div class="info"> <span class="person">游戏攻略</span> <span class="time">2025-05-16</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250516/logo_6826f44028f041.pjp" alt="虚拟币价格排行榜 虚拟币价格排名TOP10" /> </div> </a> </li> <li> <a href="/art-428692.htm" class="s-card"> <div class="s-card-l"> <p class="tit">开放空间怎么cos薇尔莉特 cos薇尔莉特服装搭配染色攻略</p> <div class="info"> <span class="person">游戏攻略</span> <span class="time">2025-05-16</span> </div> </div> <div class="s-card-pic"> <img src="/images/lazy.gif" data-src="/uploads/20250513/logo_682329469cc881.png" alt="开放空间怎么cos薇尔莉特 cos薇尔莉特服装搭配染色攻略" /> </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="/app/104700.htm" target="_self" class="figure"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250430/logo_6811caf0a88eb1.png" alt="茶杯头甜蜜终章dlc 官方手机版v1.0.0.3" /> </div> <p class="figure-head">茶杯头甜蜜终章dlc 官方手机版v1.0.0.3</p> <span class="figure-btn">下载</span> </a> </li> <li class="card3"> <a href="/app/104676.htm" target="_self" class="figure"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250430/logo_6811cab87dfe81.png" alt="火柴人传说暗影格斗内置菜单 最新版v3.0.1" /> </div> <p class="figure-head">火柴人传说暗影格斗内置菜单 最新版v3.0.1</p> <span class="figure-btn">下载</span> </a> </li> <li class="card3"> <a href="/app/104628.htm" target="_self" class="figure"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250430/logo_68119aea40ebd1.png" alt="荒野乱斗测试服 安卓版v61.10.3" /> </div> <p class="figure-head">荒野乱斗测试服 安卓版v61.10.3</p> <span class="figure-btn">下载</span> </a> </li> <li class="card3"> <a href="/app/104614.htm" target="_self" class="figure"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250430/logo_68119aa23457c1.png" alt="荒野乱斗彩虹服 安卓版v61.10.3" /> </div> <p class="figure-head">荒野乱斗彩虹服 安卓版v61.10.3</p> <span class="figure-btn">下载</span> </a> </li> </ul> <ul class="card-box-b"> <li class="card10"> <a href="/app/104699.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250430/logo_6811caec6cfea1.png" alt="寒霜启示录 安卓版v1.25.10" /> </div> <div class="figure-cont"> <p class="figure-head">寒霜启示录 安卓版v1.25.10</p> <div class="figure-desc"> <span>模拟经营</span> <span>寒霜启示录 安卓版v1.25.10</span> </div> <div class="figure-desc"> <p>寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己</p> </div> </div> <span class="figure-btn">下载</span> </a> </li> <li class="card10"> <a href="/app/104698.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250430/logo_6811caeb150841.png" alt="末日城堡免广告版 安卓最新版v0.7.1" /> </div> <div class="figure-cont"> <p class="figure-head">末日城堡免广告版 安卓最新版v0.7.1</p> <div class="figure-desc"> <span>模拟经营</span> <span>末日城堡免广告版 安卓最新版v0.7.1</span> </div> <div class="figure-desc"> <p>末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看</p> </div> </div> <span class="figure-btn">下载</span> </a> </li> <li class="card10"> <a href="/app/104696.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250430/logo_6811cae5834611.png" alt="甜蜜人生模拟器 最新版v1.4.5" /> </div> <div class="figure-cont"> <p class="figure-head">甜蜜人生模拟器 最新版v1.4.5</p> <div class="figure-desc"> <span>模拟经营</span> <span>甜蜜人生模拟器 最新版v1.4.5</span> </div> <div class="figure-desc"> <p>甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对</p> </div> </div> <span class="figure-btn">下载</span> </a> </li> <li class="card10"> <a href="/app/104679.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250430/logo_6811cabe2a4361.png" alt="武器锻造师内置功能菜单 v10.4" /> </div> <div class="figure-cont"> <p class="figure-head">武器锻造师内置功能菜单 v10.4</p> <div class="figure-desc"> <span>模拟经营</span> <span>武器锻造师内置功能菜单 v10.4</span> </div> <div class="figure-desc"> <p>武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了</p> </div> </div> <span class="figure-btn">下载</span> </a> </li> <li class="card10"> <a href="/app/104644.htm" target="_self" class="figure2"> <div class="figure-box"> <img src="/images/lazy.gif" data-src="https://img.111cn.net/uploads/20250430/logo_68119b20cd7bb1.png" alt="开放空间overfield 安卓版v1.0.5" /> </div> <div class="figure-cont"> <p class="figure-head">开放空间overfield 安卓版v1.0.5</p> <div class="figure-desc"> <span>模拟经营</span> <span>开放空间overfield 安卓版v1.0.5</span> </div> <div class="figure-desc"> <p>开放空间Overfield是一款箱庭养成经营手游,让你在广阔</p> </div> </div> <span class="figure-btn">下载</span> </a> </li> </ul> </section> <footer class="foot"> <a href="/" class="logo-icon"> <img src="/mobile/images/logo2.png" alt="一聚教程网"> </a> <p>Copyright © 2010-2022</p> <p>111cn.net All Rights Reserved</p> </footer> <script> var advData = {"img_fixed_pc_adv":"https:\/\/img.111cn.net\/uploads\/20240509\/663c2e9729f58.jpg","img_fixed_mob_adv":"https:\/\/img.111cn.net\/uploads\/20240509\/663c2e8793225.jpg","url_adv":"http:\/\/shop.hushen.cn\/shop\/c\/baojianpin.html","str_adv":"\u864e\u795e\u5546\u57ce\uff1a\u5173\u7231\u7537\u6027\uff0c\u66f4\u61c2\u7537\u4eba\u3002\u89e3\u51b3\u5927\u4f17\u7684\u7537\u8a00\u4e4b\u9690","img_popup_adv":"https:\/\/img.111cn.net\/uploads\/20240509\/663c2e748238d.png","pc_show_img":"2","pc_show_popup":"2","pc_show_video":"2","mob_show_img":"2","mob_show_popup":"2","mob_show_video":"2","close_adv":"https:\/\/img.111cn.net\/uploads\/20240508\/663b20650801e.png","video_adv":"\/pc\/images\/pc-adv.mp4"}; </script> <script src="/jspc/funcmob.js" type="text/javascript"></script> <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-DSRRGRV1TL"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-DSRRGRV1TL'); </script> <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> </div> <script src="/js/stat.js"></script> </body> </html>