php基于curl实现的股票信息查询类实例


Posted in PHP onNovember 11, 2016

本文实例讲述了php基于curl实现的股票信息查询类。分享给大家供大家参考,具体如下:

股票信息查询功能我们是需要抓取第三方的数据,然后我们再把这些数据进行分析组成自己想要的,下面我们来看一个php 股票信息查询类.

今天一个二逼朋友让我帮忙写个股票查询的类,来集成到微信中,所以花了一点时间写了一个不完整的,哈哈,如果有想玩的人,可以继续提交代码,让它变得完善起来!!

GitHub 地址:github.com/widuu/stock,代码如下:

class stock{
  /**
   * 股票数据接口
   */
  const STOCK_URL = "http://apis.baidu.com/apistore/stockservice/stock";
  /**
   * 通过拼音或者汉字获取股票代码
   */
  const SOCKET_SUGGEST = "http://cjhq.baidu.com/suggest?code5=";
  /**
   * 单态实例
   */
  private static $instance;
  /**
   * API 密钥
   */
  private static $apikey;
  /**
   * 实例化类和指定API KEY
   * @param apikey string
   * @return instance object
   */
  public static function getInstance($apikey){
    if( self::$instance == NULL ){
      self::$instance = new self;
      self::$apikey = $apikey;
    }
    return self::$instance;
  }
  /**
   * 获取股票名称
   * @param stockid  string
   * @return stockName string
   */
  public static function getName($stockid){
    $result = self::getSingleStock($stockid);
    return $result['name'];
  }
  /**
   * 获取最后更新时间
   * @param stockid string
   * @return time  string
   */
  public static function getTime($stockid){
    $result = self::getSingleStock($stockid);
    return $result['date'].$result['time'];
  }
  /**
   * 获取K线图地址
   * @param stockid string
   * @param date   string min/day/week/mouth
   * @return imageUrl string
   */
  public static function getKline($stockid,$date='min'){
    $result = self::getSingleStock($stockid);
    return $result['klinegraph'][$date.'url'];
  }
  /**
   * 抓取整只股票的数据
   * @param stockid string
   * @return stock infomation array
   */
  public static function getSingleStock($stockid){
    $type = preg_match('/(\d+){6}/is', $stockid);
    if ( $type == 0 ){
      $stockid = self::getStockId($stockid);
    }
    $stock_url = self::STOCK_URL."?stockid=".$stockid;
    $result = self::httpGet( $stock_url , true );
    if( $result['errNum'] != 0 ){
      throw new Exception($result['errMsg'], 1);
      return;
    }
    return $result['retData'];
  }
  /**
   * 输入拼音或者汉字来获取股票代码
   * @param name  string
   * @return stockid string
   */
  private static function getStockId($name){
    $result = self::httpGet( self::SOCKET_SUGGEST.urlencode(iconv('utf-8', 'GBK', $name)),false );
    if (emptyempty($result)){
      throw new Exception("stock name not exists", 2);
      return;
    }
    $stockid = $result['Result'][0]['code'];
    $stock  = explode('.', $stockid);
    return  $stock[1].$stock[0];
  }
  /**
   * GET获取方法
   * @param param string 参数
   * @author widuu
   */
  private static function httpGet($url,$header=false) {
    $curlHandle = curl_init();
    curl_setopt( $curlHandle , CURLOPT_URL, $url );
    if( $header ){
      curl_setopt( $curlHandle , CURLOPT_HTTPHEADER , array('apikey:'.self::$apikey));
    }
    curl_setopt( $curlHandle , CURLOPT_RETURNTRANSFER, 1 );
    curl_setopt( $curlHandle , CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt( $curlHandle , CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt( $curlHandle , CURLOPT_TIMEOUT, 10 );
    $content = curl_exec( $curlHandle );
    curl_close( $curlHandle );
    return $header ? json_decode($content,true) :json_decode(iconv('GBK','utf-8',trim($content)),true);
  }
}
//测试代码
stock::getInstance("5040bcbfebb0a4cffc7be278723255aa");
print_r(stock::getSingleStock('sh601000'));
echo stock::getKline('紫金矿业');

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP实现采集程序原理和简单示例代码
Mar 18 PHP
php ci框架验证码实例分析
Jun 26 PHP
PHP数据过滤的方法
Oct 30 PHP
php通过数组实现多条件查询实现方法(字符串分割)
May 06 PHP
常用PHP框架功能对照表
Oct 23 PHP
PHP SplObjectStorage使用实例
May 12 PHP
ThinkPHP控制器详解
Jul 27 PHP
PHP身份证校验码计算方法
Aug 10 PHP
PHP 传输会话curl函数的实例详解
Sep 12 PHP
PHP以json或xml格式返回请求数据的方法
May 31 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
Jan 23 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
May 12 PHP
PHP中STDCLASS用法实例分析
Nov 11 #PHP
php遍历替换目录下文件指定内容的方法
Nov 10 #PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
Nov 10 #PHP
PHP数组生成XML格式数据的封装类实例
Nov 10 #PHP
Linux平台php命令行程序处理管道数据的方法
Nov 10 #PHP
PHP中功能强大却很少使用的函数实例小结
Nov 10 #PHP
php事件驱动化设计详解
Nov 10 #PHP
You might like
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
使用apply方法处理数组的三个技巧[译]
2012/09/20 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
基于jQuery实现的QQ表情插件
2015/08/25 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
js 作用域和变量详解
2017/02/16 Javascript
Angular中使用$watch监听object属性值的变化(详解)
2017/04/24 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
Django查询数据库的性能优化示例代码
2017/09/24 Python
python编程嵌套函数实例代码
2018/02/11 Python
Python实现的knn算法示例
2018/06/14 Python
python批量赋值操作实例
2018/10/22 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
python 定时任务去检测服务器端口是否通的实例
2019/01/26 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
美国最大的万圣节服装网站:HalloweenCostumes.com
2017/10/12 全球购物
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
销售内勤岗位职责
2014/04/15 职场文书
校运动会广播稿(100篇)
2014/09/12 职场文书
给客户的检讨书
2014/12/21 职场文书
高三英语复习计划
2015/01/19 职场文书
鸡毛信观后感
2015/06/11 职场文书
邹越演讲观后感
2015/06/15 职场文书
java多态注意项小结
2021/10/16 Java/Android
python实现学生信息管理系统(面向对象)
2022/06/05 Python
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android