| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 |
- <?php
- /**
- * Created by PhpStorm.
- * User: 王刚涛
- * Date: 2020/11/26
- * Time: 11:38
- */
- class Finance163
- {
- /****
- * @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){
- $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);
- $content1 = explode("\n", $content);//以换行符进行分割字符串
- return $content1;
- }
- /***
- * @param $stock_code
- * @param $start_date
- * @param $end_date
- * @return mixed
- */
- static public function get_history_index_csi300($stock_code,$start_date,$end_date)
- {
- $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=Finance163::curl_get_data($url);
- if (!empty($content1[1])) {
- for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
- if (!empty($content1[$i])) {
- $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
- }
- else{
- continue;
- }
- // 解析返回的历史数据
- $data['date'] = strtotime($content3[0]);//用于创建表
- $data['code'] = intval(explode("'",$content3[1])[1]);
- $data['open_price'] = floatval($content3[3]);
- $data['hightest_price'] = floatval($content3[4]);
- $data['lowest_price'] = floatval($content3[5]);
- $data['close_price'] = floatval($content3[6]);
- $data['value'] = floatval($content3[7]);
- $data['amount'] = floatval($content3[8]);
- $data['increase_price'] = floatval($content3[9]);
- $data['increase_value'] = floatval($content3[10]);
- //将所要存储的数据放入一个数组中
- $stock_name = $content3[1];
- if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
- continue;
- }
- if (!empty($data)) {
- $msg= Index_csi300::insert($data);//将这支股票的历史数据存入数据库
- }
- }
- }
- return $msg;
- }
- /***
- * @param $stock_code
- * @param $start_date
- * @param $end_date
- * @return mixed
- *
- */
- static public function get_history_index_gem($stock_code,$start_date,$end_date)
- {
- $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=Finance163::curl_get_data($url);
- if (!empty($content1[1])) {
- for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
- if (!empty($content1[$i])) {
- $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
- }
- else{
- continue;
- }
- // 解析返回的历史数据
- $data['date'] = strtotime($content3[0]);//用于创建表
- $data['code'] = intval(explode("'",$content3[1])[1]);
- $data['open_price'] = floatval($content3[3]);
- $data['hightest_price'] = floatval($content3[4]);
- $data['lowest_price'] = floatval($content3[5]);
- $data['close_price'] = floatval($content3[6]);
- $data['value'] = floatval($content3[7]);
- $data['amount'] = floatval($content3[8]);
- $data['increase_price'] = floatval($content3[9]);
- $data['increase_value'] = floatval($content3[10]);
- //将所要存储的数据放入一个数组中
- $stock_name = $content3[1];
- if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
- continue;
- }
- if (!empty($data)) {
- $msg= Index_gem::insert($data);//将这支股票的历史数据存入数据库
- }
- }
- }
- return $msg;
- }
- /***
- * @param $stock_code
- * @param $start_date
- * @param $end_date
- * @return mixed
- */
- static public function get_history_index_kc50($stock_code,$start_date,$end_date)
- {
- $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=Finance163::curl_get_data($url);
- if (!empty($content1[1])) {
- for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
- if (!empty($content1[$i])) {
- $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
- }
- else{
- continue;
- }
- // 解析返回的历史数据
- $data['date'] = strtotime($content3[0]);//用于创建表
- $data['code'] = intval(explode("'",$content3[1])[1]);
- $data['open_price'] = floatval($content3[3]);
- $data['hightest_price'] = floatval($content3[4]);
- $data['lowest_price'] = floatval($content3[5]);
- $data['close_price'] = floatval($content3[6]);
- $data['value'] = floatval($content3[7]);
- $data['amount'] = floatval($content3[8]);
- $data['increase_price'] = floatval($content3[9]);
- $data['increase_value'] = floatval($content3[10]);
- //将所要存储的数据放入一个数组中
- $stock_name = $content3[1];
- if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
- continue;
- }
- if (!empty($data)) {
- $msg= Index_kc50::insert($data);//将这支股票的历史数据存入数据库
- }
- }
- }
- return $msg;
- }
- /***
- * @param $stock_code
- * @param $start_date
- * @param $end_date
- * @return mixed
- */
- static public function get_history_index_scz($stock_code,$start_date,$end_date)
- {
- $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=Finance163::curl_get_data($url);
- if (!empty($content1[1])) {
- for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
- if (!empty($content1[$i])) {
- $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
- }
- else{
- continue;
- }
- // 解析返回的历史数据
- $data['date'] = strtotime($content3[0]);//用于创建表
- $data['code'] = intval(explode("'",$content3[1])[1]);
- $data['open_price'] = floatval($content3[3]);
- $data['hightest_price'] = floatval($content3[4]);
- $data['lowest_price'] = floatval($content3[5]);
- $data['close_price'] = floatval($content3[6]);
- $data['value'] = floatval($content3[7]);
- $data['amount'] = floatval($content3[8]);
- $data['increase_price'] = floatval($content3[9]);
- $data['increase_value'] = floatval($content3[10]);
- //将所要存储的数据放入一个数组中
- $stock_name = $content3[1];
- if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
- continue;
- }
- if (!empty($data)) {
- $msg= Index_scz::insert($data);//将这支股票的历史数据存入数据库
- }
- }
- }
- return $msg;
- }
- /***
- * @param $stock_code
- * @param $start_date
- * @param $end_date
- * @return mixed
- */
- static public function get_history_index_sh($stock_code,$start_date,$end_date)
- {
- $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=Finance163::curl_get_data($url);
- if (!empty($content1[1])) {
- for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
- if (!empty($content1[$i])) {
- $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
- }
- else{
- continue;
- }
- // 解析返回的历史数据
- $data['date'] = strtotime($content3[0]);//用于创建表
- $data['code'] = intval(explode("'",$content3[1])[1]);
- $data['open_price'] = floatval($content3[3]);
- $data['hightest_price'] = floatval($content3[4]);
- $data['lowest_price'] = floatval($content3[5]);
- $data['close_price'] = floatval($content3[6]);
- $data['value'] = floatval($content3[7]);
- $data['amount'] = floatval($content3[8]);
- $data['increase_price'] = floatval($content3[9]);
- $data['increase_value'] = floatval($content3[10]);
- //将所要存储的数据放入一个数组中
- $stock_name = $content3[1];
- if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
- continue;
- }
- if (!empty($data)) {
- $msg= Index_sh::insert($data);//将这支股票的历史数据存入数据库
- }
- }
- }
- return $msg;
- }
- /****
- * @param $stock_code
- * @param $start_date
- * @param $end_date
- * @return mixed|string
- * 王刚涛
- * 获取上证50的历史数据
- */
- static public function get_history_index_sh50($stock_code,$start_date,$end_date)
- {
- $msg="";
- $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=Finance163::curl_get_data($url);
- if (!empty($content1[1])) {
- for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
- if (!empty($content1[$i])) {
- $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
- }
- else{
- continue;
- }
- // 解析返回的历史数据
- $data['date'] = strtotime($content3[0]);//用于创建表
- $data['code'] = intval(explode("'",$content3[1])[1]);
- $data['open_price'] = floatval($content3[3]);
- $data['hightest_price'] = floatval($content3[4]);
- $data['lowest_price'] = floatval($content3[5]);
- $data['close_price'] = floatval($content3[6]);
- $data['value'] = floatval($content3[7]);
- $data['amount'] = floatval($content3[8]);
- $data['increase_price'] = floatval($content3[9]);
- $data['increase_value'] = floatval($content3[10]);
- //将所要存储的数据放入一个数组中
- $stock_name = $content3[1];
- if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
- continue;
- }
- if (!empty($data)) {
- $msg= Index_sh50::insert($data);//将这支股票的历史数据存入数据库
- }
- }
- }
- return $msg;
- }
- /***
- * 获取股票交易的当天数据,在新浪的文件中调用该函数,
- * 用于补齐字段信息
- * startdate+1=enddate
- */
- static public function get_day_k_data($stock_code){
- $date=date("Ymd",time());//设置开始时间和结束时间
- $start_date=$date;
- $end_date=$date;
- // $start_date=20201123;
- // $end_date=20201123;
- $code = self::stock_block($stock_code);
- // $url = "http://quotes.money.163.com/service/chddata.html?code=" . $code . "&fields=TOPEN;HIGH;LOW;TCLOSE;VATURNOVER;VOTURNOVER;LCLOSE;CHG;PCHG;TURNOVER;";
- $url = "http://quotes.money.163.com/service/chddata.html?code=" . $code . "&start=" . $start_date . "&end=" . $end_date . "&fields=TOPEN;HIGH;LOW;TCLOSE;VATURNOVER;VOTURNOVER;LCLOSE;CHG;PCHG;TURNOVER";
- //构建所要发送的url,前收盘价,涨跌幅,涨跌价,换手率
- $content1=Finance163::curl_get_data($url);
- if (!empty($content1[1])) {
- for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
- if (!empty($content1[$i])) {
- $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
- }
- else{
- continue;
- }
- // 解析返回的历史数据
- $data['close_price_qfq'] = floatval($content3[9]);//前收盘价
- $data['increase_price'] = floatval($content3[10]);//涨跌幅
- $data['increase_value'] = floatval($content3[11]);//涨跌价
- $data['turnover'] = floatval($content3[12]);//换手率
- //将所要存储的数据放入一个数组中
- $stock_name = $content3[1];
- if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
- continue;
- }
- }
- }
- // var_dump($data);
- return $data;
- }
- /***
- * @param $code
- * @return int
- * 获取历史股票交易数据
- */
- static public function get_history_trade_data($stock_code,$start_date,$end_date)
- {
- $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;LCLOSE;CHG;PCHG;TURNOVER";
- //构建所要发送的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);
- $content1 = explode("\n", $content);//以换行符进行分割字符串
- if (!empty($content1[1])) {
- for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
- if (!empty($content1[$i])) {
- $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
- }
- else{
- continue;
- }
- // 解析返回的历史数据
- $t = explode("-",$content3[0]);
- $date = trim($t[0].$t[1]);
- $time = trim($t[0].$t[1].$t[2]);
- $data['date'] = $date;//用于创建表
- $data['time'] = $time;//用于获取时间戳
- $data['code'] = intval(explode("'",$content3[1])[1]);
- $data['name'] = $content3[2];
- $data['open_price'] = floatval($content3[3]);
- $data['hightest_price'] = floatval($content3[4]);
- $data['lowest_price'] = floatval($content3[5]);
- $data['close_price'] = floatval($content3[6]);
- $data['value'] = floatval($content3[7]);
- $data['amount'] = floatval($content3[8]);
- $data['close_price_qfq'] = floatval($content3[9]);//前收盘价
- $data['increase_price'] = floatval($content3[10]);//涨跌幅
- $data['increase_value'] = floatval($content3[11]);//涨跌价
- $data['turnover'] = floatval($content3[12]);//换手率
- // die;
- //将所要存储的数据放入一个数组中
- $stock_name = $content3[1];
- if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
- continue;
- }
- if (!empty($data)) {
- // Index::add($stock_name, $content3[0]);//将这支股票的股票名称和股票代码存入
- $msg= Day_k_base::insert($data,$date);//将这支股票的历史数据存入数据库
- }
- }
- }
- return $msg;
- }
- }
- ?>
|