wanggangtao 5 年之前
父節點
當前提交
0a4e19dfc7

+ 10 - 19
lib/immediate_base.class.php

@@ -8,34 +8,25 @@
  */
 class Immediate_base {
 
-    public function __construct()
-    {
-
-    }
 
     static public function getInfoById($id)
     {
-        $Table_day_k_base = new Table_day_k_base();
-        return $Table_day_k_base->getInfoById($id);
+        $Table_immediate_base = new Table_immediate_base();
+        return $Table_immediate_base->getInfoById($id);
     }
 
 
-    static public function add($attrs,$date=0)
+    static public function add($attrs)
     {
-        if (empty($attrs)) throw new Exception('参数不能为空', 102);
-        if($date===0)
-        {
-            $date=strtotime(date('Ym'));
-        }
-        $Table_day_k_base = new Table_day_k_base($date);
-        return $Table_day_k_base->add($attrs);
-
+        $date=date("Ym",time());
+        $Table_immediate_base = new Table_immediate_base($date);
+        return $Table_immediate_base->add($attrs);
     }
 
     static public function getList($filter = array(), $count=0, $page=0, $pageSize=0)
     {
-        $Table_day_k_base = new Table_day_k_base();
-        return $Table_day_k_base->getList($filter, $count, $page, $pageSize);
+        $Table_immediate_base = new Table_immediate_base();
+        return $Table_immediate_base->getList($filter, $count, $page, $pageSize);
     }
 
     /***
@@ -52,8 +43,8 @@ class Immediate_base {
         {
             $date=strtotime(date('Ymd'));
         }
-        $Table_day_k_base = new Table_day_k_base($date);
-        $id = $Table_day_k_base->insert($attrs);
+        $Table_immediate_base = new Table_immediate_base($date);
+        $id = $Table_immediate_base->insert($attrs);
         return $id;
     }
 

+ 4 - 2
lib/input163Index.class.php

@@ -44,11 +44,11 @@ class Input163index
 
     static public function get_history_index($stock_code,$start_date,$end_date)
     {
+        $msg=array();
         $code = self::stock_block($stock_code);
         $url = "http://quotes.money.163.com/service/chddata.html?code=" . $code . "&start=" . $start_date . "&end=" . $end_date . "&fields=TOPEN;HIGH;LOW;TCLOSE;VATURNOVER;VOTURNOVER;CHG;PCHG";
         //构建所要发送的url
         $content1=self::curl_get_data($url);
-
         if (!empty($content1[1])) {
             for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
                 if (!empty($content1[$i])) {
@@ -58,7 +58,8 @@ class Input163index
                     continue;
                 }
 //                解析返回的历史数据
-                $data['date'] = strtotime($content3[0]);//用于创建表
+                $data['timestamp'] = strtotime($content3[0]);//当日零点的时间戳
+                $data['date'] = (int)date("Ymd",strtotime($content3[0]));//用于创建表
                 $data['code'] = explode("'",$content3[1])[1];
                 $data['name'] = $content3[2];
                 $data['open_price'] = floatval($content3[3]);
@@ -76,6 +77,7 @@ class Input163index
                 }
                 if (!empty($data)) {
                     $msg= Index_day_k::insert($data);//将这支股票的历史数据存入数据库
+
                 }
             }
         }

+ 81 - 0
lib/inputSinaImmediate.class.php

@@ -0,0 +1,81 @@
+<?php
+/**
+ * @author:王刚涛
+ * 用于获取当天各种指数
+ * http://hq.sinajs.cn/list=s_sz000002
+ */
+
+
+class InputSinaImmediate
+{
+
+    /****
+     * @param $url
+     * @return array|bool|string
+     * 对curl_setopt进行封装,消除代码冗余
+     */
+    static private function curl_get_data($url){
+        $curlHandle = curl_init();
+        curl_setopt($curlHandle, CURLOPT_URL, $url);
+        curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
+        curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);
+        curl_setopt($curlHandle, CURLOPT_SSL_VERIFYHOST, false);
+        curl_setopt($curlHandle, CURLOPT_TIMEOUT, 10);
+        $content = curl_exec($curlHandle);
+        curl_close($curlHandle);//防止中文乱码
+        $content2 = iconv("gbk", "utf-8", $content);//子串
+        $content3 = substr($content2, stripos($content2, "=\"") + 2); //获取 var hq_str_sz000002="万 科A,30.780,30.800,30.510,  ="之后部分
+        $content4 = substr($content3, 0, strripos($content3, "\";")); //获取     万 科A,30.94,0.14,0.45,584039,178827";         ";之前部分
+        $content5 = explode(",", $content4);//分割
+        return $content5;
+    }
+
+
+    /***
+     * @param $code
+     * @param $date
+     * @return mixed
+     * 日k线表 day_k_******(每月存一张表,比如boniu_day_k_202011)
+     * 抓取当天的数据,结合腾讯的接口,每4秒抓取一条数据
+     *
+     */
+    static public function get_day_k($code, $exchange)
+    {
+        $stock_code= $exchange.$code;
+        $url = "http://hq.sinajs.cn/list=" . $stock_code;
+        $content3=self::curl_get_data($url);//封装为函数,
+        if (empty($content3))
+        {
+            throw new Exception('抓取的数据不能为空', 102);
+        }
+        $data['timestamp'] = time();
+        $data['date'] = (int) date("Ymd",time());
+        $data['code'] = $code;//股票代码此时去掉sh,sz
+        $data['name'] = $content3[0];
+        $data['open_price'] = floatval($content3[1]);//开盘价
+        $data['close_price'] = floatval($content3[3]);//3点之后的当前价格就是收盘价
+        $data['hightest_price'] = floatval($content3[4]);//今日最高价
+        $data['lowest_price'] = floatval($content3[5]);//今日最低价
+        $data['amount'] = floatval($content3[8]);//成交的股票数,以百为单位
+        $data['value'] = floatval($content3[9]);//成交金额以万为单位
+
+//调用腾讯接口获取其他数据
+        $dataContent=InputTencentDay_k::get_stock_data($code, $exchange);
+        if (!empty($dataContent)) {
+            $data["increase_price"]  =   empty($content1["increase_price"])?    0 : $content1["increase_price"];                    //  涨跌价
+            $data["increase_ratio"]  =   empty($content1["increase_ratio"])?    0 : $content1["increase_ratio"];                    //   涨跌幅
+            $data["turnover"]        =   empty($content1["turnover"])?          0 : $content1["turnover"];                          //    换手率
+            $data["pe_ttm"]          =   empty($dataContent["pe_ttm"])?         0 : $dataContent["pe_ttm"];                         //pe_ttm市盈率
+            $data["tradable_value"]  =   empty($dataContent["tradable_value"])? 0 : (int)($dataContent["tradable_value"]*100000000);//流通市值
+            $data["total_value"]     =   empty($dataContent["total_value"])?    0 : (int)($dataContent["total_value"]*100000000);   //总市值
+            $data["pb"]              =   empty($dataContent["pb"])?             0 : $dataContent["pb"];                             //市净率
+            $data["pe_dynamic"]      =   empty($dataContent["pe_dynamic"])?     0 : $dataContent["pe_dynamic"];                     //动态市盈率
+            $data["pe_static"]       =   empty($dataContent["pe_static"])?      0 : $dataContent["pe_static"];                      //静态市盈率
+        }
+        return Immediate_base::add($data);
+    }
+
+
+}
+
+?>

+ 4 - 2
lib/inputSinaIndex.class.php

@@ -18,14 +18,16 @@ class InputSinaIndex
      */
     static public function get_day_k_index($code,$exchange)
     {
-        $stockCode=$exchange.$code;
+        $stockCode="s_".$exchange.$code;
         $url = "http://hq.sinajs.cn/list=".$stockCode;
         $content3=self::curl_get_data($url);
         $data['increase_ratio'] = floatval($content3[3]);//涨跌率
+
         $data2=self::get_info_code($code);//调用另一个函数获取其他数据如开盘价等等
         $data['increase_price']  = floatval($data2[3]-$data2[2]);//涨跌
         // 涨跌价-当日股票最新价与前一日收盘价格(或前一日收盘指数)
-        $data['date'] = strtotime(date('Y-m-d',time()));//当天的0点时间戳
+        $data['timestamp'] = strtotime(date('Y-m-d',time()));//当天的0点时间戳
+        $data['date'] = date('Ymd',time());
         $data['code'] = $code;//开盘价
         $data['name'] = $data2[0];//股票名称
         $data['open_price'] = floatval($data2[1]);//开盘价

+ 37 - 31
lib/table/table_immediate_base.class.php

@@ -9,12 +9,12 @@
 
 class Table_immediate_base extends Table {
 
-    protected $base  = "";              //分表的后缀日期,在进行数据库操作的时候"Table_day_k_".$base
+    protected $base  = "";              //分表的后缀日期,在进行数据库操作的时候"Table_immediate_".$base
     protected $table_name       = "immediate_";//表名,不带前缀,前缀在config中定义
     protected $table_id         = "immediate_id";//指定ID字段名称,必须
     protected $table_status     = '';//指定状态字段名称,如果有
     protected $table_order      = '';//指定排序字段名称,如果有
-    protected $table_fullname    = "immediate_";//拼接好后表名  后面拼接日期  day_k_202011
+    protected $table_fullname    = "immediate_";//拼接好后表名  后面拼接日期  immediate_202011
 
 	//数据库结构
 	protected function struct(){
@@ -47,7 +47,7 @@ class Table_immediate_base extends Table {
 	}
 
     /***
-     * Table_day_k_base constructor.
+     * Table_immediate_base constructor.
      * 构造函数,动态获取表的后缀年月
      * 王刚涛
      */
@@ -64,7 +64,7 @@ class Table_immediate_base extends Table {
      */
      public function createBaseTable(){
          global $mypdo;
-         $sql = " CREATE TABLE IF NOT EXISTS `". $this->table_fullname."` LIKE  boniu_day_k_base";
+         $sql = " CREATE TABLE IF NOT EXISTS `". $this->table_fullname."` LIKE  boniu_immediate_base";
          $mypdo->pdo->exec($sql);
      }
 
@@ -75,24 +75,30 @@ class Table_immediate_base extends Table {
      */
     public function add($attr){
         $param = array (
-             'day_k_date'    => array('number', strtotime($attr['date'])),
-             'day_k_code'    => array('number', $attr['code']),
-             'day_k_name'    => array('string', $attr['name']),
-            'day_k_open_price'    => array('number', $attr['open_price']),
-             'day_k_close_price'    => array('number', $attr['close_price']),
-            'day_k_hightest_price'    => array('number', $attr['hightest_price']),
-             'day_k_lowest_price'    => array('number', $attr['lowest_price']),
-             'day_k_amount'    => array('number', $attr['amount']),
-             'day_k_value'    => array('number', $attr['value']),
-            'day_k_close_price_qfq'    => array('number', $attr['close_price_qfq']),
-            'day_k_increase_price'    => array('number', $attr['increase_price']),
-            'day_k_increase_value'    => array('number', $attr['increase_value']),
-            'day_k_turnover'    => array('number', $attr['turnover']),
+            'immediate_timestamp '    => array('number', $attr['timestamp']),
+            'immediate_date'    => array('number', $attr['date']),
+            'immediate_code'    => array('string', $attr['code']),
+            'immediate_name'    => array('string', $attr['name']),
+            'immediate_open_price'    => array('number', $attr['open_price']),
+            'immediate_close_price'    => array('number', $attr['close_price']),
+            'immediate_hightest_price'    => array('number', $attr['hightest_price']),
+            'immediate_lowest_price'    => array('number', $attr['lowest_price']),
+            'immediate_amount'    => array('number', $attr['amount']),
+            'immediate_value'    => array('number', $attr['value']),
+
+            'immediate_increase_price'    => array('number', $attr['increase_price']),//  涨跌价
+            'immediate_increase_ratio'    => array('number', $attr['increase_ratio']),//   涨跌幅
+            'immediate_turnover'    => array('number', $attr['turnover']),//    换手率
+            'immediate_pe_ttm'    => array('number', $attr['pe_ttm']),
+            'immediate_tradable_value'    => array('number', $attr['tradable_value']),
+            'immediate_total_value'    => array('number', $attr['total_value']),
+            'immediate_pb'    => array('number', $attr['pb']),
+            'immediate_pe_dynamic'    => array('number', $attr['pe_dynamic']),
+            'immediate_pe_static'    => array('number', $attr['pe_static']),
         );
         return $this->pdo->sqlinsert($this->table_fullname, $param);
     }
 
-
     /****
      * @param $attr
      * @return mixed
@@ -100,19 +106,19 @@ class Table_immediate_base extends Table {
      */
     public function insert($attr){
         $param = array (
-            'day_k_date'    => array('number', strtotime($attr['date'])),
-            'day_k_code'    => array('number', $attr['code']),
-            'day_k_name'    => array('string', $attr['name']),
-            'day_k_open_price'    => array('number', $attr['open_price']),
-            'day_k_hightest_price'    => array('number', $attr['hightest_price']),
-            'day_k_lowest_price'    => array('number', $attr['lowest_price']),
-            'day_k_value'    => array('number', $attr['value']),
-            'day_k_amount'    => array('number', $attr['amount']),
-            'day_k_close_price'    => array('number', $attr['close_price']),
-            'day_k_close_price_qfq'    => array('number', $attr['close_price_qfq']),
-            'day_k_increase_price'    => array('number', $attr['increase_price']),
-            'day_k_increase_value'    => array('number', $attr['increase_value']),
-            'day_k_turnover'    => array('number', $attr['turnover']),
+            'immediate_date'    => array('number', strtotime($attr['date'])),
+            'immediate_code'    => array('number', $attr['code']),
+            'immediate_name'    => array('string', $attr['name']),
+            'immediate_open_price'    => array('number', $attr['open_price']),
+            'immediate_hightest_price'    => array('number', $attr['hightest_price']),
+            'immediate_lowest_price'    => array('number', $attr['lowest_price']),
+            'immediate_value'    => array('number', $attr['value']),
+            'immediate_amount'    => array('number', $attr['amount']),
+            'immediate_close_price'    => array('number', $attr['close_price']),
+            'immediate_close_price_qfq'    => array('number', $attr['close_price_qfq']),
+            'immediate_increase_price'    => array('number', $attr['increase_price']),
+            'immediate_increase_value'    => array('number', $attr['increase_value']),
+            'immediate_turnover'    => array('number', $attr['turnover']),
 
         );
         $msg=$this->pdo->sqlinsert($this->table_fullname, $param);

+ 6 - 2
lib/table/table_index_day_k.class.php

@@ -19,6 +19,7 @@ class Table_index_day_k extends Table {
 	protected function struct(){
 		$attr = array();
 		$attr['id']                 = 'index_day_k_id';
+        $attr['timestamp']          = 'index_day_k_timestamp';
 		$attr['date']               = 'index_day_k_date';
 		$attr['code']               = 'index_day_k_code';
         $attr['name']               = 'index_day_k_name';
@@ -27,8 +28,7 @@ class Table_index_day_k extends Table {
         $attr['hightest_price']     = 'index_day_k_hightest_price';
         $attr['lowest_price']       = 'index_day_k_lowest_price';
         $attr['increase_price']     = 'index_day_k_increase_price';
-        $attr['increase_value']     = 'index_day_k_increase_value';
-        $attr['turnover']           = 'index_day_k_turnover';
+        $attr['increase_ratio']     = 'index_day_k_increase_ratio';
         $attr['amount']             = 'index_day_k_amount';
         $attr['value']              = 'index_day_k_value';
 
@@ -39,6 +39,8 @@ class Table_index_day_k extends Table {
 
     public function add($attr){
         $param = array (
+
+            'index_day_k_timestamp'    => array('number', $attr['timestamp']),
             'index_day_k_date'    => array('number', $attr['date']),
             'index_day_k_code'    => array('string', $attr['code']),
             'index_day_k_name'    => array('string', $attr['name']),
@@ -61,6 +63,8 @@ class Table_index_day_k extends Table {
      */
     public function insert($attr){
         $param = array (
+
+            'index_day_k_timestamp'    => array('number', $attr['timestamp']),
             'index_day_k_date'    => array('number', $attr['date']),
             'index_day_k_code'    => array('string', $attr['code']),
             'index_day_k_name'    => array('string', $attr['name']),

+ 1 - 0
task/task_get_day_k_index.php

@@ -4,6 +4,7 @@
  * User: 王刚涛
  * Date: 2020/12/1
  * Time: 19:35
+ * 获取指数的当天数据
  */
 require('../init.php');
 $indexList=Index::getIndexList();//获取指数代码

+ 2 - 2
task/task_get_history_index.php

@@ -4,10 +4,10 @@
  * User: 王刚涛
  * Date: 2020/12/1
  * Time: 19:35
- * 获取日K表当天的数据
+ * 获取指数历史的数据
  */
 require('../init.php');
-$stock_code="399300";
+//$stock_code="399300";
 $start_date=20140101;
 $end_date=date("Ymd",time());
 $indexList=Index::getIndexList();//获取指数代码

+ 17 - 0
task/task_get_immediate_stock.php

@@ -0,0 +1,17 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: 王刚涛
+ * Date: 2020/12/1
+ * Time: 19:35
+ * 获取股票的日K实时数据
+ */
+require('../init.php');
+$codeList=Stock::getStockCodeList();//获取股票代码
+
+foreach ($codeList as $key=>$value){
+    InputSinaImmediate::get_day_k($value["code"],$value["exchange"]);
+}
+
+
+?>

+ 21 - 0
task/test.php

@@ -0,0 +1,21 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: TF
+ * Date: 2020/12/2
+ * Time: 12:17
+ */
+require('../init.php');
+
+$codeList=Stock::getStockCodeList();//获取所有股票代码
+//var_dump($codeList);
+if (empty($codeList))
+{
+    throw new Exception('参数列表不能为空', 102);
+}
+//遍历股票代码
+foreach($codeList as $key => $val){
+
+    InputTencentDay_k::get_stock_data($val["code"],$val["exchange"]);
+
+}