finance163.class.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: 王刚涛
  5. * Date: 2020/11/26
  6. * Time: 11:38
  7. */
  8. class Finance163
  9. {
  10. /****
  11. * @param $code
  12. * @return string
  13. * 返回股票所属的板块,在股票代码前拼接0或者1
  14. */
  15. static public function stock_block($code)
  16. {
  17. $f = substr($code, 0, 1);
  18. if ($f == "6") {
  19. $stock_code = "0" . $code;
  20. } else {
  21. $stock_code = "1" . $code;
  22. }
  23. return $stock_code;
  24. }
  25. /****
  26. * @param $url
  27. * @return array|bool|string
  28. * 对curl_setopt进行封装,消除代码冗余
  29. */
  30. static private function curl_get_data($url){
  31. $curlHandle = curl_init();
  32. curl_setopt($curlHandle, CURLOPT_URL, $url);
  33. curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
  34. curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);
  35. curl_setopt($curlHandle, CURLOPT_SSL_VERIFYHOST, false);
  36. curl_setopt($curlHandle, CURLOPT_TIMEOUT, 10);
  37. $content = curl_exec($curlHandle);
  38. curl_close($curlHandle);
  39. $content1 = explode("\n", $content);//以换行符进行分割字符串
  40. return $content1;
  41. }
  42. /***
  43. * @param $stock_code
  44. * @param $start_date
  45. * @param $end_date
  46. * @return mixed
  47. */
  48. static public function get_history_index_csi300($stock_code,$start_date,$end_date)
  49. {
  50. $code = self::stock_block($stock_code);
  51. $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";
  52. //构建所要发送的url
  53. $content1=Finance163::curl_get_data($url);
  54. if (!empty($content1[1])) {
  55. for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
  56. if (!empty($content1[$i])) {
  57. $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
  58. }
  59. else{
  60. continue;
  61. }
  62. // 解析返回的历史数据
  63. $data['date'] = strtotime($content3[0]);//用于创建表
  64. $data['code'] = intval(explode("'",$content3[1])[1]);
  65. $data['open_price'] = floatval($content3[3]);
  66. $data['hightest_price'] = floatval($content3[4]);
  67. $data['lowest_price'] = floatval($content3[5]);
  68. $data['close_price'] = floatval($content3[6]);
  69. $data['value'] = floatval($content3[7]);
  70. $data['amount'] = floatval($content3[8]);
  71. $data['increase_price'] = floatval($content3[9]);
  72. $data['increase_value'] = floatval($content3[10]);
  73. //将所要存储的数据放入一个数组中
  74. $stock_name = $content3[1];
  75. if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
  76. continue;
  77. }
  78. if (!empty($data)) {
  79. $msg= Index_csi300::insert($data);//将这支股票的历史数据存入数据库
  80. }
  81. }
  82. }
  83. return $msg;
  84. }
  85. /***
  86. * @param $stock_code
  87. * @param $start_date
  88. * @param $end_date
  89. * @return mixed
  90. *
  91. */
  92. static public function get_history_index_gem($stock_code,$start_date,$end_date)
  93. {
  94. $code = self::stock_block($stock_code);
  95. $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";
  96. //构建所要发送的url
  97. $content1=Finance163::curl_get_data($url);
  98. if (!empty($content1[1])) {
  99. for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
  100. if (!empty($content1[$i])) {
  101. $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
  102. }
  103. else{
  104. continue;
  105. }
  106. // 解析返回的历史数据
  107. $data['date'] = strtotime($content3[0]);//用于创建表
  108. $data['code'] = intval(explode("'",$content3[1])[1]);
  109. $data['open_price'] = floatval($content3[3]);
  110. $data['hightest_price'] = floatval($content3[4]);
  111. $data['lowest_price'] = floatval($content3[5]);
  112. $data['close_price'] = floatval($content3[6]);
  113. $data['value'] = floatval($content3[7]);
  114. $data['amount'] = floatval($content3[8]);
  115. $data['increase_price'] = floatval($content3[9]);
  116. $data['increase_value'] = floatval($content3[10]);
  117. //将所要存储的数据放入一个数组中
  118. $stock_name = $content3[1];
  119. if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
  120. continue;
  121. }
  122. if (!empty($data)) {
  123. $msg= Index_gem::insert($data);//将这支股票的历史数据存入数据库
  124. }
  125. }
  126. }
  127. return $msg;
  128. }
  129. /***
  130. * @param $stock_code
  131. * @param $start_date
  132. * @param $end_date
  133. * @return mixed
  134. */
  135. static public function get_history_index_kc50($stock_code,$start_date,$end_date)
  136. {
  137. $code = self::stock_block($stock_code);
  138. $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";
  139. //构建所要发送的url
  140. $content1=Finance163::curl_get_data($url);
  141. if (!empty($content1[1])) {
  142. for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
  143. if (!empty($content1[$i])) {
  144. $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
  145. }
  146. else{
  147. continue;
  148. }
  149. // 解析返回的历史数据
  150. $data['date'] = strtotime($content3[0]);//用于创建表
  151. $data['code'] = intval(explode("'",$content3[1])[1]);
  152. $data['open_price'] = floatval($content3[3]);
  153. $data['hightest_price'] = floatval($content3[4]);
  154. $data['lowest_price'] = floatval($content3[5]);
  155. $data['close_price'] = floatval($content3[6]);
  156. $data['value'] = floatval($content3[7]);
  157. $data['amount'] = floatval($content3[8]);
  158. $data['increase_price'] = floatval($content3[9]);
  159. $data['increase_value'] = floatval($content3[10]);
  160. //将所要存储的数据放入一个数组中
  161. $stock_name = $content3[1];
  162. if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
  163. continue;
  164. }
  165. if (!empty($data)) {
  166. $msg= Index_kc50::insert($data);//将这支股票的历史数据存入数据库
  167. }
  168. }
  169. }
  170. return $msg;
  171. }
  172. /***
  173. * @param $stock_code
  174. * @param $start_date
  175. * @param $end_date
  176. * @return mixed
  177. */
  178. static public function get_history_index_scz($stock_code,$start_date,$end_date)
  179. {
  180. $code = self::stock_block($stock_code);
  181. $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";
  182. //构建所要发送的url
  183. $content1=Finance163::curl_get_data($url);
  184. if (!empty($content1[1])) {
  185. for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
  186. if (!empty($content1[$i])) {
  187. $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
  188. }
  189. else{
  190. continue;
  191. }
  192. // 解析返回的历史数据
  193. $data['date'] = strtotime($content3[0]);//用于创建表
  194. $data['code'] = intval(explode("'",$content3[1])[1]);
  195. $data['open_price'] = floatval($content3[3]);
  196. $data['hightest_price'] = floatval($content3[4]);
  197. $data['lowest_price'] = floatval($content3[5]);
  198. $data['close_price'] = floatval($content3[6]);
  199. $data['value'] = floatval($content3[7]);
  200. $data['amount'] = floatval($content3[8]);
  201. $data['increase_price'] = floatval($content3[9]);
  202. $data['increase_value'] = floatval($content3[10]);
  203. //将所要存储的数据放入一个数组中
  204. $stock_name = $content3[1];
  205. if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
  206. continue;
  207. }
  208. if (!empty($data)) {
  209. $msg= Index_scz::insert($data);//将这支股票的历史数据存入数据库
  210. }
  211. }
  212. }
  213. return $msg;
  214. }
  215. /***
  216. * @param $stock_code
  217. * @param $start_date
  218. * @param $end_date
  219. * @return mixed
  220. */
  221. static public function get_history_index_sh($stock_code,$start_date,$end_date)
  222. {
  223. $code = self::stock_block($stock_code);
  224. $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";
  225. //构建所要发送的url
  226. $content1=Finance163::curl_get_data($url);
  227. if (!empty($content1[1])) {
  228. for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
  229. if (!empty($content1[$i])) {
  230. $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
  231. }
  232. else{
  233. continue;
  234. }
  235. // 解析返回的历史数据
  236. $data['date'] = strtotime($content3[0]);//用于创建表
  237. $data['code'] = intval(explode("'",$content3[1])[1]);
  238. $data['open_price'] = floatval($content3[3]);
  239. $data['hightest_price'] = floatval($content3[4]);
  240. $data['lowest_price'] = floatval($content3[5]);
  241. $data['close_price'] = floatval($content3[6]);
  242. $data['value'] = floatval($content3[7]);
  243. $data['amount'] = floatval($content3[8]);
  244. $data['increase_price'] = floatval($content3[9]);
  245. $data['increase_value'] = floatval($content3[10]);
  246. //将所要存储的数据放入一个数组中
  247. $stock_name = $content3[1];
  248. if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
  249. continue;
  250. }
  251. if (!empty($data)) {
  252. $msg= Index_sh::insert($data);//将这支股票的历史数据存入数据库
  253. }
  254. }
  255. }
  256. return $msg;
  257. }
  258. /****
  259. * @param $stock_code
  260. * @param $start_date
  261. * @param $end_date
  262. * @return mixed|string
  263. * 王刚涛
  264. * 获取上证50的历史数据
  265. */
  266. static public function get_history_index_sh50($stock_code,$start_date,$end_date)
  267. {
  268. $msg="";
  269. $code = self::stock_block($stock_code);
  270. $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";
  271. //构建所要发送的url
  272. $content1=Finance163::curl_get_data($url);
  273. if (!empty($content1[1])) {
  274. for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
  275. if (!empty($content1[$i])) {
  276. $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
  277. }
  278. else{
  279. continue;
  280. }
  281. // 解析返回的历史数据
  282. $data['date'] = strtotime($content3[0]);//用于创建表
  283. $data['code'] = intval(explode("'",$content3[1])[1]);
  284. $data['open_price'] = floatval($content3[3]);
  285. $data['hightest_price'] = floatval($content3[4]);
  286. $data['lowest_price'] = floatval($content3[5]);
  287. $data['close_price'] = floatval($content3[6]);
  288. $data['value'] = floatval($content3[7]);
  289. $data['amount'] = floatval($content3[8]);
  290. $data['increase_price'] = floatval($content3[9]);
  291. $data['increase_value'] = floatval($content3[10]);
  292. //将所要存储的数据放入一个数组中
  293. $stock_name = $content3[1];
  294. if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
  295. continue;
  296. }
  297. if (!empty($data)) {
  298. $msg= Index_sh50::insert($data);//将这支股票的历史数据存入数据库
  299. }
  300. }
  301. }
  302. return $msg;
  303. }
  304. /***
  305. * 获取股票交易的当天数据,在新浪的文件中调用该函数,
  306. * 用于补齐字段信息
  307. * startdate+1=enddate
  308. */
  309. static public function get_day_k_data($stock_code){
  310. $date=date("Ymd",time());//设置开始时间和结束时间
  311. $start_date=$date;
  312. $end_date=$date;
  313. // $start_date=20201123;
  314. // $end_date=20201123;
  315. $code = self::stock_block($stock_code);
  316. // $url = "http://quotes.money.163.com/service/chddata.html?code=" . $code . "&fields=TOPEN;HIGH;LOW;TCLOSE;VATURNOVER;VOTURNOVER;LCLOSE;CHG;PCHG;TURNOVER;";
  317. $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";
  318. //构建所要发送的url,前收盘价,涨跌幅,涨跌价,换手率
  319. $content1=Finance163::curl_get_data($url);
  320. if (!empty($content1[1])) {
  321. for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
  322. if (!empty($content1[$i])) {
  323. $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
  324. }
  325. else{
  326. continue;
  327. }
  328. // 解析返回的历史数据
  329. $data['close_price_qfq'] = floatval($content3[9]);//前收盘价
  330. $data['increase_price'] = floatval($content3[10]);//涨跌幅
  331. $data['increase_value'] = floatval($content3[11]);//涨跌价
  332. $data['turnover'] = floatval($content3[12]);//换手率
  333. //将所要存储的数据放入一个数组中
  334. $stock_name = $content3[1];
  335. if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
  336. continue;
  337. }
  338. }
  339. }
  340. // var_dump($data);
  341. return $data;
  342. }
  343. /***
  344. * @param $code
  345. * @return int
  346. * 获取历史股票交易数据
  347. */
  348. static public function get_history_trade_data($stock_code,$start_date,$end_date)
  349. {
  350. $code = self::stock_block($stock_code);
  351. $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";
  352. //构建所要发送的url
  353. $curlHandle = curl_init();
  354. curl_setopt($curlHandle, CURLOPT_URL, $url);
  355. curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
  356. curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);
  357. curl_setopt($curlHandle, CURLOPT_SSL_VERIFYHOST, false);
  358. curl_setopt($curlHandle, CURLOPT_TIMEOUT, 10);
  359. $content = curl_exec($curlHandle);
  360. curl_close($curlHandle);
  361. $content1 = explode("\n", $content);//以换行符进行分割字符串
  362. if (!empty($content1[1])) {
  363. for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
  364. if (!empty($content1[$i])) {
  365. $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
  366. }
  367. else{
  368. continue;
  369. }
  370. // 解析返回的历史数据
  371. $t = explode("-",$content3[0]);
  372. $date = trim($t[0].$t[1]);
  373. $time = trim($t[0].$t[1].$t[2]);
  374. $data['date'] = $date;//用于创建表
  375. $data['time'] = $time;//用于获取时间戳
  376. $data['code'] = intval(explode("'",$content3[1])[1]);
  377. $data['name'] = $content3[2];
  378. $data['open_price'] = floatval($content3[3]);
  379. $data['hightest_price'] = floatval($content3[4]);
  380. $data['lowest_price'] = floatval($content3[5]);
  381. $data['close_price'] = floatval($content3[6]);
  382. $data['value'] = floatval($content3[7]);
  383. $data['amount'] = floatval($content3[8]);
  384. $data['close_price_qfq'] = floatval($content3[9]);//前收盘价
  385. $data['increase_price'] = floatval($content3[10]);//涨跌幅
  386. $data['increase_value'] = floatval($content3[11]);//涨跌价
  387. $data['turnover'] = floatval($content3[12]);//换手率
  388. // die;
  389. //将所要存储的数据放入一个数组中
  390. $stock_name = $content3[1];
  391. if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
  392. continue;
  393. }
  394. if (!empty($data)) {
  395. // Index::add($stock_name, $content3[0]);//将这支股票的股票名称和股票代码存入
  396. $msg= Day_k_base::insert($data,$date);//将这支股票的历史数据存入数据库
  397. }
  398. }
  399. }
  400. return $msg;
  401. }
  402. }
  403. ?>