input_sina_detail.class.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. /**
  3. * @author:王刚涛
  4. * 用于获取 当天的股票数据并存入数据库,通过$url,可以设置需要获取的时间段
  5. * http://hq.sinajs.cn/list=s_sz000002
  6. */
  7. class Input_sina_detail
  8. {
  9. const GLOBAL_URL = "http://hq.sinajs.cn/list=";
  10. static private function curl_get_data($url, $codeList){ //一次批量获取股票列表
  11. if (empty($codeList)) {
  12. return 0;
  13. }
  14. $curlHandle = curl_init();
  15. curl_setopt($curlHandle, CURLOPT_URL, $url);
  16. curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
  17. curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);
  18. curl_setopt($curlHandle, CURLOPT_SSL_VERIFYHOST, false);
  19. curl_setopt($curlHandle, CURLOPT_TIMEOUT, 10);
  20. $content = curl_exec($curlHandle);
  21. curl_close($curlHandle);//防止中文乱码
  22. $content2 = iconv("gbk", "utf-8", $content);//子串
  23. $arr1 = explode(";", $content2);//按股票分割
  24. $arr2 = array();
  25. $index = 0;
  26. $codeIndex = 0;
  27. foreach ($arr1 as $key => $item) {
  28. $tempItem = substr($item, stripos($item, "=\"") + 2); //获取 var hq_str_sz000002="万 科A,30.780,30.800,30.510, ="之后部分
  29. $tempItem = substr($tempItem, 0, strripos($tempItem, "\"")); //获取 万 科A,30.94,0.14,0.45,584039,178827"; ";之前部分
  30. $tempItem = trim($tempItem);
  31. if (!empty($tempItem)) {
  32. $arr2[$index] = explode(",", $tempItem);//分割
  33. $arr2[$index]['code'] = $codeList[$codeIndex];
  34. $index++;
  35. }
  36. $codeIndex++;
  37. }
  38. return $arr2;
  39. }
  40. //获取index_day_k
  41. static public function getIndexDayK($indexList)
  42. {
  43. $codeList = array();
  44. $codeIndex = 0;
  45. $url = self::GLOBAL_URL;
  46. foreach ($indexList as $item) {
  47. $codeStr = sprintf('%06s', $item['code']);
  48. $url .= $item['exchange'].$codeStr.',';
  49. $codeList[$codeIndex] = $codeStr;
  50. $codeIndex++;
  51. }
  52. $contentList = self::curl_get_data($url, $codeList);
  53. foreach ($contentList as $key => $item) {
  54. $data['code'] = $item['code'];
  55. $data['date'] = ConverseDate($item[30]);
  56. $data['name'] = trim($item[0]);
  57. $data['increase_price'] = floatval($item[3] - $item[2]); //涨跌价
  58. $data['timestamp'] = strtotime($item[30]); //当天的0点时间戳
  59. $data['open_price'] = floatval($item[1]); //开盘价
  60. $data['close_price'] = floatval($item[3]); //当前价,15点之后就是收盘价
  61. $data['highest_price'] = floatval($item[4]); //最高价
  62. $data['lowest_price'] = floatval($item[5]); //最低价
  63. $data['amount'] = (int)($item[8]); //成交量,以手为单位
  64. $data['value'] = (int)($item[9]); //成交金额,以万为单位
  65. $data['increase_ratio'] = 0; //涨跌幅
  66. if (!empty($data['open_price']))
  67. $data['increase_ratio'] = round($data['increase_price'] / $data['open_price'], 2);
  68. if (!empty($item[0])) { //判断非法股票代码
  69. Index_day_k::addOrUpdateByCodeDate($data);
  70. }
  71. }
  72. return;
  73. }
  74. }
  75. ?>