瀏覽代碼

前复权接口

wanggangtao 5 年之前
父節點
當前提交
f77125e7ae
共有 4 個文件被更改,包括 149 次插入41 次删除
  1. 18 37
      lib/day_k_qfq.class.php
  2. 78 0
      lib/input162DayKQfq.class.php
  3. 35 4
      lib/table/table_day_k_qfq.class.php
  4. 18 0
      task/task_get_day_k_qfq.php

+ 18 - 37
lib/day_k_qfq.class.php

@@ -4,58 +4,39 @@
 /**
  * Class Day_k_base
  * @author		王刚涛
- * 日线数据
+ * 前复权数据
  */
-class Day_k_base {
-
-    public function __construct()
-    {
-
-    }
+class Day_k_qfq {
+    
 
     static public function getInfoById($id)
     {
-        $Table_day_k_base = new Table_day_k_base();
-        return $Table_day_k_base->getInfoById($id);
+        $Table_day_k_qfq = new Table_day_k_qfq();
+        return $Table_day_k_qfq->getInfoById($id);
     }
 
 
-    static public function add($attrs,$date=0)
+    static public function addOrUpdateByCode($attrs)
     {
-        if (empty($attrs)) throw new Exception('参数不能为空', 102);
-        if($date===0)
-        {
-            $date=strtotime(date('Ym'));
+        if (empty($attrs)) throw new Exception('参数不能为空', 101);
+        $Table_day_k_qfq = new Table_day_k_qfq();
+        //  是否已经插入一条数据
+        $rs = $Table_day_k_qfq->getInfoByCodeAndDate($attrs['code'],$attrs['date']);
+        if (empty($rs)) {
+            $id = $Table_day_k_qfq->add($attrs);
+        } else {
+            $id = $rs['id'];
+            $Table_day_k_qfq->update($id, $attrs);
         }
-        $Table_day_k_base = new Table_day_k_base($date);
-        return $Table_day_k_base->add($attrs);
-
+        return $id;
     }
 
     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_day_k_qfq = new Table_day_k_qfq();
+        return $Table_day_k_qfq->getList($filter, $count, $page, $pageSize);
     }
 
-    /***
-     * @param $attrs
-     * @param int $date
-     * @return mixed
-     * @throws Exception
-     * 添加某一直股票的历史数据
-     */
-    static public function insert($attrs,$date=0)
-    {
-        if (empty($attrs)) throw new Exception('参数不能为空', 102);
-        if($date===0)
-        {
-            $date=strtotime(date('Ymd'));
-        }
-        $Table_day_k_base = new Table_day_k_base($date);
-        $id = $Table_day_k_base->insert($attrs);
-        return $id;
-    }
 
 }
 ?>

+ 78 - 0
lib/input162DayKQfq.class.php

@@ -0,0 +1,78 @@
+<?php
+
+/**
+ * @author:王刚涛
+ * 用于获取当天各种指数
+ * http://hq.sinajs.cn/list=s_sz000002
+ */
+class Input162DayKQfq
+{
+
+    /****
+     * @param $code
+     * @return string
+     * 返回股票指数所属的板块,在股票代码前拼接0或者1
+     */
+    static public function stock_block($code)
+    {
+        $f = substr($code, 0, 1);
+        if ($f == "6") {
+            $stock_code = "0" . $code;
+        } else {
+            $stock_code = "1" . $code;
+        }
+        return $stock_code;
+    }
+
+    /****
+     * @param $url
+     * @return array|bool|string
+     * 对curl_setopt进行封装,消除代码冗余
+     */
+    static private function curl_get_data($url)
+    {
+        //构建所要发送的url
+        $curlHandle = curl_init();
+        curl_setopt($curlHandle, CURLOPT_ENCODING, "");//这个接口的数据被压缩,所以要解压
+        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 );
+        $content2 = curl_exec($curlHandle);
+        curl_close( $curlHandle );
+        $content3 = json_decode($content2);
+        $content4 =$content3->data;
+        return $content4;
+    }
+
+    static public function get_day_k_qfq($code, $year)
+    {
+        $msg = array();
+        $stock_code = self::stock_block($code);
+        $url = "http://img1.money.126.net/data/hs/klinederc/day/history/" . $year . "/" . $stock_code . ".json";
+        //构建所要发送的url
+        $data = self::curl_get_data($url);
+        $stock_info=Stock::getInfoByCode($code);
+
+
+        for ($i = 0; $i < count($data); $i++) {
+            $d = $data[$i];
+            $time = strtotime($d[0]);
+            $a['timestamp'] = $time;
+            $a['date'] = (int)$d[0];
+            $a['code'] = $code;
+            $a['name'] = $stock_info["name"];
+            $a['open_price'] = floatval($d[1]);
+            $a['close_price'] = floatval($d[2]);
+            $a['highest_price'] = floatval($d[3]);
+            $a['lowest_price'] = floatval($d[4]);
+            $a['amount'] = (int)$d[5];
+            $a['turnover'] = floatval($d[6]);
+            Day_k_qfq::addOrUpdateByCode($a);
+        }
+        return $msg;
+    }
+}
+
+?>

+ 35 - 4
lib/table/table_day_k_qfq.class.php

@@ -17,12 +17,13 @@ class Table_day_k_qfq extends Table {
 	//数据库结构
 	protected function struct(){
         $attr['id']                 = 'day_k_qfq_id';
+        $attr['timestamp']          = 'day_k_qfq_timestamp';
         $attr['date']               = 'day_k_qfq_date';
         $attr['code']               = 'day_k_qfq_code';
         $attr['name']               = 'day_k_qfq_name';
         $attr['open_price']         = 'day_k_qfq_open_price';
         $attr['close_price']        = 'day_k_qfq_close_price';
-        $attr['hightest_price']     = 'day_k_qfq_hightest_price';
+        $attr['highest_price']     = 'day_k_qfq_highest_price';
         $attr['lowest_price']       = 'day_k_qfq_lowest_price';
         $attr['turnover']           = 'day_k_qfq_turnover';
         $attr['amount']             = 'day_k_qfq_amount';
@@ -31,12 +32,42 @@ class Table_day_k_qfq extends Table {
 
     public function add($attr){
         $param = array (
-
-             'admingroup_name'    => array('string', $attr['name'])
-
+             'day_k_qfq_timestamp'    => array('number', $attr['timestamp']),
+             'day_k_qfq_date'         => array('number', $attr['date']),
+             'day_k_qfq_code'         => array('string', $attr['code']),
+             'day_k_qfq_name'         => array('string', $attr['name']),
+            'day_k_qfq_open_price'    => array('number', $attr['open_price']),
+            'day_k_qfq_close_price'   => array('number', $attr['close_price']),
+            'day_k_qfq_highest_price' => array('number', $attr['highest_price']),
+            'day_k_qfq_lowest_price'  => array('number', $attr['lowest_price']),
+            'day_k_qfq_turnover'      => array('number', $attr['turnover']),
+            'day_k_qfq_amount'        => array('number', $attr['amount'])
         );
         return $this->pdo->sqlinsert($this->table_fullname, $param);
     }
 
+
+    public function getInfoByCodeAndDate($code,$date){
+
+        //查询语句必须用sql_check_input检查参数
+        $code = trim($code);
+        $code = $this->pdo->sql_check_input(array('string', $code));
+        $date = $this->pdo->sql_check_input(array('number', trim($date)));
+
+        $sql = "select * from ". $this->table_fullname ." where day_k_qfq_code = ".$code." and  day_k_qfq_date=".$date ." limit 1";
+
+        $rs = $this->pdo->sqlQuery($sql);
+        $r  = array();
+        if($rs){
+            foreach($rs as $key => $val){
+                $r[$key] = $this->dataToAttr($val);
+            }
+            return $r[0];
+        }else{
+            return $r;
+        }
+    }
+
+
 }
 ?>

+ 18 - 0
task/task_get_day_k_qfq.php

@@ -0,0 +1,18 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: 王刚涛
+ * Date: 2020/12/1
+ * Time: 19:35
+ * 获取2014-今年所有的每天的前复权数据,每天定时更新
+ */
+require('../init.php');
+$codeList=Stock::getStockCodeList();//获取股票代码
+$endDate=date("Y",time());
+for($year=2015;$year<$endDate;$year++)
+{
+    foreach ($codeList as $key=>$value){
+        input162DayKQfq::get_day_k_qfq($value["code"],$year);
+    }
+}
+?>