sina.class.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. <?php
  2. /**
  3. * @author:王刚涛
  4. * 用于获取 当天的股票数据并存入数据库,通过$url,可以设置需要获取的时间段
  5. */
  6. error_reporting(E_ALL & ~E_NOTICE);
  7. class Sina
  8. {
  9. /****
  10. * @param $url
  11. * @return array|bool|string
  12. * 对curl_setopt进行封装,消除代码冗余
  13. */
  14. static private function curl_get_data($url){
  15. $curlHandle = curl_init();
  16. curl_setopt($curlHandle, CURLOPT_URL, $url);
  17. curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
  18. curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);
  19. curl_setopt($curlHandle, CURLOPT_SSL_VERIFYHOST, false);
  20. curl_setopt($curlHandle, CURLOPT_TIMEOUT, 10);
  21. $content = curl_exec($curlHandle);
  22. curl_close($curlHandle);//防止中文乱码
  23. $content2 = iconv("gbk", "utf-8", $content);//子串
  24. $content3 = substr($content2, stripos($content2, "=\"") + 2); //获取 var hq_str_sz000002="万 科A,30.780,30.800,30.510, ="之后部分
  25. $content4 = substr($content3, 0, strripos($content3, "\";")); //获取 万 科A,30.94,0.14,0.45,584039,178827"; ";之前部分
  26. $content5 = explode(",", $content4);//分割
  27. return $content5;
  28. }
  29. //获取全部股票代码和名称列表
  30. static public function getAllStockCodeAndName()
  31. {
  32. //循环遍历所有可能的股票代码,返回不为空,即可入库
  33. $url = "http://hq.sinajs.cn/list=s_sz000002";
  34. $content = self::curl_get_data($url);
  35. $data['code'] = '000002';
  36. $data['name'] = trim($content[0]);
  37. $data['exchange'] = 'sz';
  38. $data['sector'] = 20;
  39. return Stock::updateCodeAndName($data);
  40. }
  41. /****
  42. * @param $code
  43. * @return string
  44. * 判断股票的类型,属于创业板,科创板,主板,$code
  45. */
  46. static public function get_boniu_block($code)
  47. {
  48. if (strncmp($code, "30", 2) == 0) {
  49. //创业板
  50. $code .= "sz";
  51. } else if (strncmp($code, "68", 2) == 0) {
  52. //科创板
  53. $code .= "sh";
  54. } else if (strncmp($code, "60", 2) == 0) {
  55. //主板
  56. $code .= "sh";
  57. } else if (strncmp($code, "00", 2) == 0) {
  58. //中小板
  59. $code .= "sz";
  60. }
  61. return $code;
  62. }
  63. /****
  64. * @param string $code
  65. * @return mixed
  66. //上证指数表(boniu_index_sh)
  67. */
  68. static public function get_boniu_index_sh($code="000001")
  69. {
  70. $url = "http://hq.sinajs.cn/list=s_sh".$code;
  71. $content3=sina::curl_get_data($url);
  72. $data['increase_value'] = floatval($content3[3]);//涨跌率
  73. $data2=self::get_info_code($code);//调用另一个函数获取其他数据如开盘价等等
  74. $data['increase_price'] = floatval($data2[3]-$data2[2]);//涨跌
  75. // 涨跌价-当日股票最新价与前一日收盘价格(或前一日收盘指数)
  76. $data['date'] = strtotime(date('Y-m-d',time()));//当天的0点时间戳
  77. $data['open_price'] = floatval($data2[1]);//开盘价
  78. $data['close_price'] = floatval($data2[3]);//3点之后的当前价格就是收盘价
  79. $data['hightest_price'] = floatval($data2[4]);//今日最高价
  80. $data['lowest_price'] = floatval($data2[5]);//今日最低价
  81. $data['amount'] = (int)($data2[8]);//成交的股票数,以百为单位
  82. $data['value'] = (int)($data2[9]);//成交金额以万为单位
  83. return Index_sh::add($data);
  84. }
  85. /****
  86. * @param string $code
  87. * @return mixed
  88. * 深成指数表(boniu_index_scz)
  89. */
  90. static public function get_boniu_index_scz($code="399001")
  91. {
  92. $url = "http://hq.sinajs.cn/list=s_sz".$code;
  93. $content3=sina::curl_get_data($url);
  94. $data['increase_value'] = floatval($content3[3]);//涨跌率
  95. $data2=self::get_info_code($code);//调用另一个函数获取其他数据如开盘价等等
  96. $data['increase_price'] = floatval($data2[3]-$data2[2]);//涨跌
  97. // 涨跌价-当日股票最新价与前一日收盘价格(或前一日收盘指数)
  98. $data['date'] = strtotime(date('Y-m-d',time()));//当天的0点时间戳
  99. $data['open_price'] = floatval($data2[1]);//开盘价
  100. $data['close_price'] = floatval($data2[3]);//3点之后的当前价格就是收盘价
  101. $data['hightest_price'] = floatval($data2[4]);//今日最高价
  102. $data['lowest_price'] = floatval($data2[5]);//今日最低价
  103. $data['amount'] = (int)($data2[8]);//成交的股票数,以百为单位
  104. $data['value'] = (int)($data2[9]);//成交金额以万为单位
  105. return Index_scz::add($data);
  106. }
  107. /***
  108. * @param string $code
  109. * @return mixed
  110. * 上证50指数表(boniu_index_sh50) 000016
  111. */
  112. static public function get_boniu_index_sh50($code="000016")
  113. {
  114. $url = "http://hq.sinajs.cn/list=s_sh".$code;
  115. $content3=sina::curl_get_data($url);
  116. $data['increase_value'] = floatval($content3[3]);//涨跌率
  117. $data2=self::get_info_code($code);//调用另一个函数获取其他数据如开盘价等等
  118. $data['increase_price'] = floatval($data2[3]-$data2[2]);//涨跌
  119. // 涨跌价-当日股票最新价与前一日收盘价格(或前一日收盘指数)
  120. $data['date'] = strtotime(date('Y-m-d',time()));//当天的0点时间戳
  121. $data['open_price'] = floatval($data2[1]);//开盘价
  122. $data['close_price'] = floatval($data2[3]);//3点之后的当前价格就是收盘价
  123. $data['hightest_price'] = floatval($data2[4]);//今日最高价
  124. $data['lowest_price'] = floatval($data2[5]);//今日最低价
  125. $data['amount'] = (int)($data2[8]);//成交的股票数,以百为单位
  126. $data['value'] = (int)($data2[9]);//成交金额以万为单位
  127. return Index_sh50::add($data);
  128. }
  129. /***
  130. * @param string $code
  131. * @return mixed
  132. * //沪深300指数表(boniu_index_csi300) 399300
  133. */
  134. static public function get_boniu_index_csi300($code="399300")
  135. {
  136. $url = "http://hq.sinajs.cn/list=s_sz".$code;
  137. $content3=sina::curl_get_data($url);
  138. $data['increase_value'] = floatval($content3[3]);//涨跌率
  139. $data2=self::get_info_code($code);//调用另一个函数获取其他数据如开盘价等等
  140. $data['increase_price'] = floatval($data2[3]-$data2[2]);//涨跌
  141. // 涨跌价-当日股票最新价与前一日收盘价格(或前一日收盘指数)
  142. $data['date'] = strtotime(date('Y-m-d',time()));//当天的0点时间戳
  143. $data['open_price'] = floatval($data2[1]);//开盘价
  144. $data['close_price'] = floatval($data2[3]);//3点之后的当前价格就是收盘价
  145. $data['hightest_price'] = floatval($data2[4]);//今日最高价
  146. $data['lowest_price'] = floatval($data2[5]);//今日最低价
  147. $data['amount'] = (int)($data2[8]);//成交的股票数,以百为单位
  148. $data['value'] = (int)($data2[9]);//成交金额以万为单位
  149. return Index_csi300::add($data);
  150. }
  151. //
  152. /***
  153. * @param string $code
  154. * @return mixed
  155. * 创业板指数表(boniu_index_gem) 399006
  156. */
  157. static public function get_boniu_index_gem($code="399006")
  158. {
  159. $url = "http://hq.sinajs.cn/list=s_sz".$code;
  160. $content3=sina::curl_get_data($url);
  161. $data['increase_value'] = floatval($content3[3]);//涨跌率
  162. $data2=self::get_info_code($code);//调用另一个函数获取其他数据如开盘价等等
  163. $data['increase_price'] = floatval($data2[3]-$data2[2]);//涨跌
  164. // 涨跌价-当日股票最新价与前一日收盘价格(或前一日收盘指数)
  165. $data['date'] = strtotime(date('Y-m-d',time()));//当天的0点时间戳
  166. $data['open_price'] = floatval($data2[1]);//开盘价
  167. $data['close_price'] = floatval($data2[3]);//3点之后的当前价格就是收盘价
  168. $data['hightest_price'] = floatval($data2[4]);//今日最高价
  169. $data['lowest_price'] = floatval($data2[5]);//今日最低价
  170. $data['amount'] = (int)($data2[8]);//成交的股票数,以百为单位
  171. $data['value'] = (int)($data2[9]);//成交金额以万为单位
  172. return Index_gem::add($data);
  173. }
  174. /****
  175. * @param string $code
  176. * @return mixed
  177. * //科创50指数( boniu_index_kc50) 000688
  178. */
  179. static public function get_boniu_index_kc50($code="000688")
  180. {
  181. $url = "http://hq.sinajs.cn/list=s_sh".$code;
  182. $content3=sina::curl_get_data($url);
  183. $data['increase_value'] = floatval($content3[3]);//涨跌率
  184. $data2=self::get_info_code($code);//调用另一个函数获取其他数据如开盘价等等
  185. $data['increase_price'] = floatval($data2[3]-$data2[2]);//涨跌
  186. // 涨跌价-当日股票最新价与前一日收盘价格(或前一日收盘指数)
  187. $data['date'] = strtotime(date('Y-m-d',time()));//当天的0点时间戳
  188. $data['open_price'] = floatval($data2[1]);//开盘价
  189. $data['close_price'] = floatval($data2[3]);//3点之后的当前价格就是收盘价
  190. $data['hightest_price'] = floatval($data2[4]);//今日最高价
  191. $data['lowest_price'] = floatval($data2[5]);//今日最低价
  192. $data['amount'] = (int)($data2[8]);//成交的股票数,以百为单位
  193. $data['value'] = (int)($data2[9]);//成交金额以万为单位
  194. return Index_kc50::add($data);
  195. }
  196. //
  197. /***
  198. * @param $code
  199. * @param $date
  200. * 根据股票代码获取股票的实时信息
  201. */
  202. static public function get_info_code($code){
  203. // $stock_code = $code;
  204. // $f = substr($stock_code, 0, 1);
  205. // if ($f == "6" || $f == "0" ) {
  206. // $stock_code = "sh" . $code;
  207. // } else {
  208. // $stock_code = "sz" . $code;
  209. // }
  210. $stock_code= self::get_boniu_block($code);
  211. $url = "http://hq.sinajs.cn/list=" . $stock_code;
  212. $content3=sina::curl_get_data($url);//封装为函数,执行url获取结果并解析
  213. return $content3;
  214. }
  215. /***
  216. * @param $code
  217. * @param $date
  218. * @return mixed
  219. * 日k线表 day_k_******(每月存一张表,比如boniu_day_k_202011)
  220. *
  221. */
  222. static public function get_day_k_base($code, $date)
  223. {
  224. $stock_code = $code;
  225. $f = substr($stock_code, 0, 1);
  226. if ($f == "6" || $f == "0" ) {
  227. $stock_code = "sh" . $code;
  228. } else {
  229. $stock_code = "sz" . $code;
  230. }
  231. $url = "http://hq.sinajs.cn/list=" . $stock_code;
  232. $content3=sina::curl_get_data($url);//封装为函数,
  233. $data['date'] = $content3[30];
  234. $data['code'] = $stock_code;
  235. $data['open_price'] = $content3[1];//开盘价
  236. $data['close_price'] = $content3[3];//3点之后的当前价格就是收盘价
  237. $data['hightest_price'] = $content3[4];//今日最高价
  238. $data['lowest_price'] = floatval($content3[5]);//今日最低价
  239. $data['amount'] = $content3[8];//成交的股票数,以百为单位
  240. $data['value'] = $content3[9];//成交金额以万为单位
  241. return Day_k_base::add($data, $date);
  242. }
  243. //除权除息表(boniu_xrxd_log)
  244. //st记录表(boniu_st_log)
  245. //获取历史数据的表
  246. }
  247. ?>