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 相关文章推荐
基于数据库的在线人数,日访问量等统计
Oct 09 PHP
IStream与TStream之间的相互转换
Aug 01 PHP
php生成随机数的三种方法
Sep 10 PHP
thinkphp模板输出技巧汇总
Nov 24 PHP
php中异常处理方法小结
Jan 09 PHP
PHP实现获取某个月份周次信息的方法
Aug 11 PHP
在openSUSE42.1下编译安装PHP7 的方法
Dec 24 PHP
PHP入门教程之表单与验证实例详解
Sep 11 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
Jan 16 PHP
浅谈Laravel中的一个后期静态绑定
Aug 11 PHP
Laravel框架处理用户的请求操作详解
Dec 20 PHP
php远程请求CURL案例(爬虫、保存登录状态)
Apr 01 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实现的生成静态HTML速度快类库
2007/03/31 PHP
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
2018/10/28 Javascript
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
2018/10/29 Javascript
VeeValidate 的使用场景以及配置详解
2019/01/11 Javascript
js回文数的4种判断方法示例
2019/06/04 Javascript
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
浅谈python中的数字类型与处理工具
2017/08/02 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
用python实现百度翻译的示例代码
2018/03/09 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
用Python配平化学方程式的方法
2019/07/20 Python
Python中有几个关键字
2020/06/04 Python
HTML5 placeholder属性详解
2016/06/22 HTML / CSS
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
JNI的定义
2012/11/25 面试题
给定一个时间点,希望得到其他时间点
2013/11/07 面试题
村庄环境整治方案
2014/05/15 职场文书
语文教育专业求职信
2014/06/28 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
重阳节慰问信
2015/02/15 职场文书
工会经费申请报告
2015/05/15 职场文书
python 实现德洛内三角剖分的操作
2021/04/22 Python
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android