input_163.class.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. /**
  3. * @author:王刚涛
  4. * 用于获取历史数据各种指数
  5. * http://hq.sinajs.cn/list=s_sz000002
  6. */
  7. class Input_163
  8. {
  9. const GLOBAL_URL_0 = "http://quotes.money.163.com/service/chddata.html?code=";
  10. const GLOBAL_URL_1 = "&start=";
  11. const GLOBAL_URL_2 = "&end=";
  12. const GLOBAL_URL_3 = "&fields=TOPEN;HIGH;LOW;TCLOSE;VATURNOVER;VOTURNOVER;CHG;PCHG";
  13. static private function curl_get_data($url){
  14. $curlHandle = curl_init();
  15. curl_setopt($curlHandle, CURLOPT_URL, $url);
  16. curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
  17. curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);
  18. curl_setopt($curlHandle, CURLOPT_SSL_VERIFYHOST, false);
  19. curl_setopt($curlHandle, CURLOPT_TIMEOUT, 10);
  20. $content = curl_exec($curlHandle);
  21. curl_close($curlHandle);
  22. $content1 = explode("\n", $content);//以换行符进行分割字符串
  23. return $content1;
  24. }
  25. //接口使用的编码,深圳加1,上海加0
  26. static private function getCodeForURL($code)
  27. {
  28. $preNum = '0';
  29. $index = Index::getInfoByCode($code);
  30. if ($index['exchange'] == STOCK_EXCHANGE_SZ) {
  31. $preNum = '1';
  32. }
  33. return $preNum.$code;
  34. }
  35. //获取指定时间段指数的历史数据
  36. static private function getPartIndexDayK($code, $start_date, $end_date)
  37. {
  38. $urlCode = self::getCodeForURL($code);
  39. $url = self::GLOBAL_URL_0.$urlCode.self::GLOBAL_URL_1.$start_date.self::GLOBAL_URL_2.$end_date.self::GLOBAL_URL_3;
  40. $contentList = self::curl_get_data($url);
  41. if (empty($contentList[1])) { //只有标题,没有内容
  42. return;
  43. }
  44. for ($i = count($contentList) - 1; $i > 0; $i--) { //倒叙遍历,日期是倒叙的,不遍历标题
  45. $content = trim($contentList[$i]);
  46. if (empty($content)) {
  47. continue;
  48. }
  49. $item = explode(",", iconv("gbk", "utf-8", $content));
  50. $data['code'] = explode("'",$item[1])[1];
  51. $data['date'] = ConverseDate($item[0]);
  52. $data['name'] = trim($item[2]);
  53. $data['timestamp'] = strtotime($item[0]); //当日零点的时间戳
  54. $data['open_price'] = floatval($item[3]);
  55. $data['highest_price'] = floatval($item[4]);
  56. $data['lowest_price'] = floatval($item[5]);
  57. $data['close_price'] = floatval($item[6]);
  58. $data['value'] = floatval($item[7]);
  59. $data['amount'] = floatval($item[8]);
  60. $data['increase_price'] = floatval($item[9]);
  61. $data['increase_ratio'] = floatval($item[10]);
  62. if ($data['close_price'] == 0) { //当收盘价为0的时候,表示此时的基于9-15点,所以不存储
  63. continue;
  64. }
  65. if (!empty($data['name'])) { //判断非法股票代码
  66. Index_day_k::addOrUpdateByCodeDate($data);
  67. }
  68. }
  69. return;
  70. }
  71. //获取自20140101到前一天的指定的指数数据
  72. static public function getIndexDayK()
  73. {
  74. $indexList = Index::getAllList();
  75. $start_date = 20210106;
  76. $end_date = (int)date('Ymd', time());
  77. foreach($indexList as $item) {
  78. self::getPartIndexDayK($item['code'], $start_date, $end_date);
  79. }
  80. return;
  81. }
  82. }
  83. ?>