inputSinaIndex.class.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. /**
  3. * @author:王刚涛
  4. * 用于获取当天各种指数
  5. * http://hq.sinajs.cn/list=s_sz000002
  6. */
  7. class InputSinaIndex
  8. {
  9. /***
  10. * @param $code
  11. * @param $exchange
  12. * @return mixed
  13. * 获取股票信息
  14. */
  15. static public function get_day_k_index($code,$exchange)
  16. {
  17. $stockCode=$exchange.$code;
  18. $url = "http://hq.sinajs.cn/list=".$stockCode;
  19. $content3=self::curl_get_data($url);
  20. $data['increase_ratio'] = floatval($content3[3]);//涨跌率
  21. $data2=self::get_info_code($code);//调用另一个函数获取其他数据如开盘价等等
  22. $data['increase_price'] = floatval($data2[3]-$data2[2]);//涨跌
  23. // 涨跌价-当日股票最新价与前一日收盘价格(或前一日收盘指数)
  24. $data['date'] = strtotime(date('Y-m-d',time()));//当天的0点时间戳
  25. $data['code'] = $code;//开盘价
  26. $data['name'] = $data2[0];//股票名称
  27. $data['open_price'] = floatval($data2[1]);//开盘价
  28. $data['close_price'] = floatval($data2[3]);//3点之后的当前价格就是收盘价
  29. $data['hightest_price'] = floatval($data2[4]);//今日最高价
  30. $data['lowest_price'] = floatval($data2[5]);//今日最低价
  31. $data['amount'] = (int)($data2[8]);//成交的股票数,以百为单位
  32. $data['value'] = (int)($data2[9]);//成交金额以万为单位
  33. return Index_day_k::add($data);
  34. }
  35. /****
  36. * @param $code
  37. * @return string
  38. * 判断股票的类型,属于创业板,科创板,主板,$code
  39. */
  40. static public function get_boniu_block($code)
  41. {
  42. if (strncmp($code, "30", 2) == 0) {
  43. //创业板
  44. $stockCode= "sz". $code;
  45. } else if (strncmp($code, "68", 2) == 0) {
  46. //科创板
  47. $stockCode= "sh" .$code;
  48. } else if (strncmp($code, "60", 2) == 0) {
  49. //主板
  50. $stockCode = "sh".$code;
  51. } else if (strncmp($code, "00", 2) == 0) {
  52. //中小板
  53. $stockCode= "sh".$code;
  54. }else if (strncmp($code, "39", 2) == 0) {
  55. //中小板
  56. $stockCode= "sz".$code;
  57. }
  58. return $stockCode;
  59. }
  60. /***
  61. * @param $code
  62. * @param $date
  63. * 根据股票代码获取股票的实时信息
  64. */
  65. static public function get_info_code($code){
  66. $stock_code= self::get_boniu_block($code);
  67. $url = "http://hq.sinajs.cn/list=" . $stock_code;
  68. $stockInfo=self::curl_get_data($url);//封装为函数,执行url获取结果并解析
  69. return $stockInfo;
  70. }
  71. /****
  72. * @param $url
  73. * @return array|bool|string
  74. * 对curl_setopt进行封装,消除代码冗余
  75. */
  76. static private function curl_get_data($url){
  77. $curlHandle = curl_init();
  78. curl_setopt($curlHandle, CURLOPT_URL, $url);
  79. curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
  80. curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);
  81. curl_setopt($curlHandle, CURLOPT_SSL_VERIFYHOST, false);
  82. curl_setopt($curlHandle, CURLOPT_TIMEOUT, 10);
  83. $content = curl_exec($curlHandle);
  84. curl_close($curlHandle);//防止中文乱码
  85. $content2 = iconv("gbk", "utf-8", $content);//子串
  86. $content3 = substr($content2, stripos($content2, "=\"") + 2); //获取 var hq_str_sz000002="万 科A,30.780,30.800,30.510, ="之后部分
  87. $content4 = substr($content3, 0, strripos($content3, "\";")); //获取 万 科A,30.94,0.14,0.45,584039,178827"; ";之前部分
  88. $content5 = explode(",", $content4);//分割
  89. return $content5;
  90. }
  91. }
  92. ?>