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 生成文字png图片的代码
Apr 17 PHP
PHP句法规则详解 入门学习
Nov 09 PHP
PHP 透明水印生成代码
Aug 27 PHP
基于PHP静态类的原罪详解
May 06 PHP
深入PHP异步执行的详解
Jun 03 PHP
PHP 读取和编写 XML
Nov 19 PHP
ThinkPHP中关联查询实例
Dec 02 PHP
PHP魔术方法使用方法汇总
Feb 14 PHP
php使用自定义函数实现汉字分割替换功能示例
Jan 30 PHP
PHP将身份证正反面两张照片合成一张图片的代码
Apr 08 PHP
PHP单例模式简单用法示例
Jun 23 PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 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 缓存函数代码
2008/08/27 PHP
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
file_get_contents("php://input", "r")实例介绍
2013/07/01 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
php删除指定目录的方法
2015/04/03 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
jquery 弹出层实现代码
2009/10/30 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
JavaScript中自定义事件用法分析
2014/12/23 Javascript
js实现iframe自动自适应高度的方法
2015/02/17 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
Vue中Quill富文本编辑器的使用教程
2018/09/21 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
Python卸载模块的方法汇总
2016/06/07 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
《Python学习手册》学习总结
2018/01/17 Python
python如何让类支持比较运算
2018/03/20 Python
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
详解django中使用定时任务的方法
2018/09/27 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
Hoover胡佛官网:美国吸尘器和洗地机品牌
2019/01/09 全球购物
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
自荐信不宜过于夸大
2013/11/06 职场文书
有多年工作经验的自我评价
2014/03/02 职场文书
求职意向书
2014/04/01 职场文书
企业晚会策划方案
2014/05/29 职场文书
2014入党积极分子批评与自我批评思想报告
2014/10/06 职场文书
幼儿园教师个人总结
2015/02/05 职场文书
Python上下文管理器Content Manager
2021/06/26 Python
分析JVM源码之Thread.interrupt系统级别线程打断
2021/06/29 Java/Android