finance163.class.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  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. static public function get_history_index_csi300($stock_code,$start_date,$end_date)
  43. {
  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=Finance163::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['date'] = strtotime($content3[0]);//用于创建表
  58. $data['code'] = intval(explode("'",$content3[1])[1]);
  59. $data['open_price'] = floatval($content3[3]);
  60. $data['hightest_price'] = floatval($content3[4]);
  61. $data['lowest_price'] = floatval($content3[5]);
  62. $data['close_price'] = floatval($content3[6]);
  63. $data['value'] = floatval($content3[7]);
  64. $data['amount'] = floatval($content3[8]);
  65. $data['increase_price'] = floatval($content3[9]);
  66. $data['increase_value'] = floatval($content3[10]);
  67. //将所要存储的数据放入一个数组中
  68. $stock_name = $content3[1];
  69. if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
  70. continue;
  71. }
  72. if (!empty($data)) {
  73. $msg= Index_csi300::insert($data);//将这支股票的历史数据存入数据库
  74. }
  75. }
  76. }
  77. return $msg;
  78. }
  79. static public function get_history_index_gem($stock_code,$start_date,$end_date)
  80. {
  81. $code = self::stock_block($stock_code);
  82. $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";
  83. //构建所要发送的url
  84. $content1=Finance163::curl_get_data($url);
  85. if (!empty($content1[1])) {
  86. for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
  87. if (!empty($content1[$i])) {
  88. $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
  89. }
  90. else{
  91. continue;
  92. }
  93. // 解析返回的历史数据
  94. $data['date'] = strtotime($content3[0]);//用于创建表
  95. $data['code'] = intval(explode("'",$content3[1])[1]);
  96. $data['open_price'] = floatval($content3[3]);
  97. $data['hightest_price'] = floatval($content3[4]);
  98. $data['lowest_price'] = floatval($content3[5]);
  99. $data['close_price'] = floatval($content3[6]);
  100. $data['value'] = floatval($content3[7]);
  101. $data['amount'] = floatval($content3[8]);
  102. $data['increase_price'] = floatval($content3[9]);
  103. $data['increase_value'] = floatval($content3[10]);
  104. //将所要存储的数据放入一个数组中
  105. $stock_name = $content3[1];
  106. if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
  107. continue;
  108. }
  109. if (!empty($data)) {
  110. $msg= Index_gem::insert($data);//将这支股票的历史数据存入数据库
  111. }
  112. }
  113. }
  114. return $msg;
  115. }
  116. static public function get_history_index_kc50($stock_code,$start_date,$end_date)
  117. {
  118. $code = self::stock_block($stock_code);
  119. $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";
  120. //构建所要发送的url
  121. $content1=Finance163::curl_get_data($url);
  122. if (!empty($content1[1])) {
  123. for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
  124. if (!empty($content1[$i])) {
  125. $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
  126. }
  127. else{
  128. continue;
  129. }
  130. // 解析返回的历史数据
  131. $data['date'] = strtotime($content3[0]);//用于创建表
  132. $data['code'] = intval(explode("'",$content3[1])[1]);
  133. $data['open_price'] = floatval($content3[3]);
  134. $data['hightest_price'] = floatval($content3[4]);
  135. $data['lowest_price'] = floatval($content3[5]);
  136. $data['close_price'] = floatval($content3[6]);
  137. $data['value'] = floatval($content3[7]);
  138. $data['amount'] = floatval($content3[8]);
  139. $data['increase_price'] = floatval($content3[9]);
  140. $data['increase_value'] = floatval($content3[10]);
  141. //将所要存储的数据放入一个数组中
  142. $stock_name = $content3[1];
  143. if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
  144. continue;
  145. }
  146. if (!empty($data)) {
  147. $msg= Index_kc50::insert($data);//将这支股票的历史数据存入数据库
  148. }
  149. }
  150. }
  151. return $msg;
  152. }
  153. static public function get_history_index_scz($stock_code,$start_date,$end_date)
  154. {
  155. $code = self::stock_block($stock_code);
  156. $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";
  157. //构建所要发送的url
  158. $content1=Finance163::curl_get_data($url);
  159. if (!empty($content1[1])) {
  160. for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
  161. if (!empty($content1[$i])) {
  162. $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
  163. }
  164. else{
  165. continue;
  166. }
  167. // 解析返回的历史数据
  168. $data['date'] = strtotime($content3[0]);//用于创建表
  169. $data['code'] = intval(explode("'",$content3[1])[1]);
  170. $data['open_price'] = floatval($content3[3]);
  171. $data['hightest_price'] = floatval($content3[4]);
  172. $data['lowest_price'] = floatval($content3[5]);
  173. $data['close_price'] = floatval($content3[6]);
  174. $data['value'] = floatval($content3[7]);
  175. $data['amount'] = floatval($content3[8]);
  176. $data['increase_price'] = floatval($content3[9]);
  177. $data['increase_value'] = floatval($content3[10]);
  178. //将所要存储的数据放入一个数组中
  179. $stock_name = $content3[1];
  180. if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
  181. continue;
  182. }
  183. if (!empty($data)) {
  184. $msg= Index_scz::insert($data);//将这支股票的历史数据存入数据库
  185. }
  186. }
  187. }
  188. return $msg;
  189. }
  190. static public function get_history_index_sh($stock_code,$start_date,$end_date)
  191. {
  192. $code = self::stock_block($stock_code);
  193. $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";
  194. //构建所要发送的url
  195. $content1=Finance163::curl_get_data($url);
  196. if (!empty($content1[1])) {
  197. for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
  198. if (!empty($content1[$i])) {
  199. $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
  200. }
  201. else{
  202. continue;
  203. }
  204. // 解析返回的历史数据
  205. $data['date'] = strtotime($content3[0]);//用于创建表
  206. $data['code'] = intval(explode("'",$content3[1])[1]);
  207. $data['open_price'] = floatval($content3[3]);
  208. $data['hightest_price'] = floatval($content3[4]);
  209. $data['lowest_price'] = floatval($content3[5]);
  210. $data['close_price'] = floatval($content3[6]);
  211. $data['value'] = floatval($content3[7]);
  212. $data['amount'] = floatval($content3[8]);
  213. $data['increase_price'] = floatval($content3[9]);
  214. $data['increase_value'] = floatval($content3[10]);
  215. //将所要存储的数据放入一个数组中
  216. $stock_name = $content3[1];
  217. if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
  218. continue;
  219. }
  220. if (!empty($data)) {
  221. $msg= Index_sh::insert($data);//将这支股票的历史数据存入数据库
  222. }
  223. }
  224. }
  225. return $msg;
  226. }
  227. static public function get_history_index_sh50($stock_code,$start_date,$end_date)
  228. {
  229. $msg="";
  230. $code = self::stock_block($stock_code);
  231. $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";
  232. //构建所要发送的url
  233. $content1=Finance163::curl_get_data($url);
  234. if (!empty($content1[1])) {
  235. for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
  236. if (!empty($content1[$i])) {
  237. $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
  238. }
  239. else{
  240. continue;
  241. }
  242. // 解析返回的历史数据
  243. $data['date'] = strtotime($content3[0]);//用于创建表
  244. $data['code'] = intval(explode("'",$content3[1])[1]);
  245. $data['open_price'] = floatval($content3[3]);
  246. $data['hightest_price'] = floatval($content3[4]);
  247. $data['lowest_price'] = floatval($content3[5]);
  248. $data['close_price'] = floatval($content3[6]);
  249. $data['value'] = floatval($content3[7]);
  250. $data['amount'] = floatval($content3[8]);
  251. $data['increase_price'] = floatval($content3[9]);
  252. $data['increase_value'] = floatval($content3[10]);
  253. //将所要存储的数据放入一个数组中
  254. $stock_name = $content3[1];
  255. if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
  256. continue;
  257. }
  258. if (!empty($data)) {
  259. $msg= Index_sh50::insert($data);//将这支股票的历史数据存入数据库
  260. }
  261. }
  262. }
  263. return $msg;
  264. }
  265. /***
  266. * @param $code
  267. * @return int
  268. * 获取历史股票交易数据
  269. */
  270. static public function get_history_trade_data($stock_code,$start_date,$end_date)
  271. {
  272. $code = self::stock_block($stock_code);
  273. $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";
  274. //构建所要发送的url
  275. $curlHandle = curl_init();
  276. curl_setopt($curlHandle, CURLOPT_URL, $url);
  277. curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
  278. curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);
  279. curl_setopt($curlHandle, CURLOPT_SSL_VERIFYHOST, false);
  280. curl_setopt($curlHandle, CURLOPT_TIMEOUT, 10);
  281. $content = curl_exec($curlHandle);
  282. curl_close($curlHandle);
  283. $content1 = explode("\n", $content);//以换行符进行分割字符串
  284. if (!empty($content1[1])) {
  285. for ($i = count($content1) - 1; $i >0; $i--) {//排除日期,代码等标题栏
  286. if (!empty($content1[$i])) {
  287. $content3 = explode(",", iconv("gbk", "utf-8", $content1[$i]));
  288. }
  289. else{
  290. continue;
  291. }
  292. // 解析返回的历史数据
  293. $t = explode("-",$content3[0]);
  294. $date = trim($t[0].$t[1]);
  295. $time = trim($t[0].$t[1].$t[2]);
  296. $data['date'] = $date;//用于创建表
  297. $data['time'] = $time;//用于获取时间戳
  298. $data['code'] = intval(explode("'",$content3[1])[1]);
  299. $data['open_price'] = floatval($content3[3]);
  300. $data['hightest_price'] = floatval($content3[4]);
  301. $data['lowest_price'] = floatval($content3[5]);
  302. $data['close_price'] = floatval($content3[6]);
  303. $data['value'] = floatval($content3[7]);
  304. $data['amount'] = floatval($content3[8]);
  305. $data['close_price_qfq'] = floatval($content3[9]);
  306. $data['increase_price'] = floatval($content3[10]);
  307. $data['increase_value'] = floatval($content3[11]);
  308. $data['turnover'] = floatval($content3[12]);//换手率
  309. //将所要存储的数据放入一个数组中
  310. $stock_name = $content3[1];
  311. if ($data['close_price'] == 0) {//当收盘价为0的时候,表示此时的基于9-3点,所以不存储
  312. continue;
  313. }
  314. if (!empty($data)) {
  315. // Index::add($stock_name, $content3[0]);//将这支股票的股票名称和股票代码存入
  316. $msg= Day_k_base::insert($data,$date);//将这支股票的历史数据存入数据库
  317. }
  318. }
  319. }
  320. return $msg;
  321. }
  322. }
  323. ?>