input_sina_detail.class.php 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. //深市返回的成交量以个为单位,需转换为以手为单位
  41. static private function getAmountForIndexDayK($code, $amount)
  42. {
  43. $newAmount = $amount;
  44. $index = Index::getInfoByCode($code);
  45. if ($index['exchange'] == STOCK_EXCHANGE_SZ) {
  46. $newAmount = round($amount / 100);
  47. }
  48. return $newAmount;
  49. }
  50. //获取index_day_k
  51. static public function getIndexDayK($indexList)
  52. {
  53. $codeList = array();
  54. $codeIndex = 0;
  55. $url = self::GLOBAL_URL;
  56. foreach ($indexList as $item) {
  57. $codeStr = sprintf('%06s', $item['code']);
  58. $url .= $item['exchange'].$codeStr.',';
  59. $codeList[$codeIndex] = $codeStr;
  60. $codeIndex++;
  61. }
  62. $contentList = self::curl_get_data($url, $codeList);
  63. foreach ($contentList as $key => $item) {
  64. $data['code'] = $item['code'];
  65. $data['date'] = ConverseDate($item[30]);
  66. $data['name'] = trim($item[0]);
  67. $data['increase_price'] = floatval($item[3] - $item[2]); //涨跌价
  68. $data['timestamp'] = strtotime($item[30]); //当天的0点时间戳
  69. $data['open_price'] = floatval($item[1]); //开盘价
  70. $data['close_price'] = floatval($item[3]); //当前价,15点之后就是收盘价
  71. $data['highest_price'] = floatval($item[4]); //最高价
  72. $data['lowest_price'] = floatval($item[5]); //最低价
  73. $data['amount'] = self::getAmountForIndexDayK($data['code'], (int)($item[8])); //成交量,以手为单位
  74. $data['value'] = (int)($item[9]); //成交金额,以万为单位
  75. $data['increase_ratio'] = 0; //涨跌幅
  76. if (!empty($data['open_price']))
  77. $data['increase_ratio'] = round($data['increase_price'] * 100 / $data['open_price'], 2);
  78. if (!empty($item[0])) { //判断非法股票代码
  79. Index_day_k::addOrUpdateByCodeDate($data);
  80. }
  81. }
  82. return;
  83. }
  84. }
  85. ?>