input_163_index.class.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. /**
  3. * @author:王刚涛
  4. * 用于获取历史数据各种指数
  5. * http://hq.sinajs.cn/list=s_sz000002
  6. */
  7. class Input_163_index
  8. {
  9. /****
  10. * @param $code
  11. * @return string
  12. * 返回股票指数所属的板块,在股票代码前拼接0或者1
  13. */
  14. static public function stock_block($code)
  15. {
  16. $f = substr($code, 0, 1);
  17. if ($f == "6" || $f == "0") {
  18. $stock_code = "0" . $code;
  19. } else {
  20. $stock_code = "1" . $code;
  21. }
  22. return $stock_code;
  23. }
  24. /****
  25. * @param $url
  26. * @return array|bool|string
  27. * 对curl_setopt进行封装,消除代码冗余
  28. */
  29. static private function curl_get_data($url){
  30. $curlHandle = curl_init();
  31. curl_setopt($curlHandle, CURLOPT_URL, $url);
  32. curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
  33. curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);
  34. curl_setopt($curlHandle, CURLOPT_SSL_VERIFYHOST, false);
  35. curl_setopt($curlHandle, CURLOPT_TIMEOUT, 10);
  36. $content = curl_exec($curlHandle);
  37. curl_close($curlHandle);
  38. $content1 = explode("\n", $content);//以换行符进行分割字符串
  39. return $content1;
  40. }
  41. static public function get_history_index($stock_code,$start_date,$end_date)
  42. {
  43. $msg=array();
  44. $code = self::stock_block($stock_code);
  45. $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";
  46. //构建所要发送的url
  47. $content1=self::curl_get_data($url);
  48. if (!empty($content1[1])) {
  49. for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
  50. if (!empty($content1[$i])) {
  51. $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
  52. }
  53. else{
  54. continue;
  55. }
  56. // 解析返回的历史数据
  57. $data['timestamp'] = strtotime($content3[0]);//当日零点的时间戳
  58. $data['date'] = (int)date("Ymd",strtotime($content3[0]));//用于创建表
  59. $data['code'] = explode("'",$content3[1])[1];
  60. $data['name'] = $content3[2];
  61. $data['open_price'] = floatval($content3[3]);
  62. $data['highest_price'] = floatval($content3[4]);
  63. $data['lowest_price'] = floatval($content3[5]);
  64. $data['close_price'] = floatval($content3[6]);
  65. $data['value'] = floatval($content3[7]);
  66. $data['amount'] = floatval($content3[8]);
  67. $data['increase_price'] = floatval($content3[9]);
  68. $data['increase_ratio'] = floatval($content3[10]);
  69. //将所要存储的数据放入一个数组中
  70. $stock_name = $content3[1];
  71. if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
  72. continue;
  73. }
  74. if (!empty($data)) {
  75. $msg= Index_day_k::insert($data);//将这支股票的历史数据存入数据库
  76. }
  77. }
  78. }
  79. return $msg;
  80. }
  81. }
  82. ?>