input_sina_immediate.class.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. /**
  3. * @author:王刚涛
  4. * 用于获取当天各种指数
  5. * http://hq.sinajs.cn/list=s_sz000002
  6. */
  7. class Input_sina_immediate
  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. * @param $code
  31. * @param $date
  32. * @return mixed
  33. * 日k线表 day_k_******(每月存一张表,比如boniu_day_k_202011)
  34. * 抓取当天的数据,结合腾讯的接口,每4秒抓取一条数据
  35. *
  36. */
  37. static public function get_day_k($code, $exchange)
  38. {
  39. $stock_code= $exchange.$code;
  40. $url = "http://hq.sinajs.cn/list=" . $stock_code;
  41. $content3=self::curl_get_data($url);//封装为函数,
  42. if (empty($content3))
  43. {
  44. throw new Exception('抓取的数据不能为空', 102);
  45. }
  46. $data['timestamp'] = time();
  47. $data['date'] = (int) date("Ymd",time());
  48. $data['code'] = $code;//股票代码此时去掉sh,sz
  49. $data['name'] = $content3[0];
  50. $data['open_price'] = floatval($content3[1]);//开盘价
  51. $data['close_price'] = floatval($content3[3]);//3点之后的当前价格就是收盘价
  52. $data['highest_price'] = floatval($content3[4]);//今日最高价
  53. $data['lowest_price'] = floatval($content3[5]);//今日最低价
  54. $data['amount'] = floatval($content3[8]);//成交的股票数,以百为单位
  55. $data['value'] = floatval($content3[9]);//成交金额以万为单位
  56. //调用腾讯接口获取其他数据
  57. $dataContent=InputTencentDay_k::get_stock_data($code, $exchange);
  58. if (!empty($dataContent)) {
  59. $data["increase_price"] = empty($content1["increase_price"])? 0 : $content1["increase_price"]; // 涨跌价
  60. $data["increase_ratio"] = empty($content1["increase_ratio"])? 0 : $content1["increase_ratio"]; // 涨跌幅
  61. $data["turnover"] = empty($content1["turnover"])? 0 : $content1["turnover"]; // 换手率
  62. $data["pe_ttm"] = empty($dataContent["pe_ttm"])? 0 : $dataContent["pe_ttm"]; //pe_ttm市盈率
  63. $data["tradable_value"] = empty($dataContent["tradable_value"])? 0 : (int)($dataContent["tradable_value"]*100000000);//流通市值
  64. $data["total_value"] = empty($dataContent["total_value"])? 0 : (int)($dataContent["total_value"]*100000000); //总市值
  65. $data["pb"] = empty($dataContent["pb"])? 0 : $dataContent["pb"]; //市净率
  66. $data["pe_dynamic"] = empty($dataContent["pe_dynamic"])? 0 : $dataContent["pe_dynamic"]; //动态市盈率
  67. $data["pe_static"] = empty($dataContent["pe_static"])? 0 : $dataContent["pe_static"]; //静态市盈率
  68. }
  69. return Immediate_base::add($data);
  70. }
  71. }
  72. ?>