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中的串行化变量和序列化对象
Sep 05 PHP
PHP中实现进程间通讯
Oct 09 PHP
自动分页的不完整解决方案
Jan 12 PHP
memcached 和 mysql 主从环境下php开发代码详解
May 16 PHP
一个简单php扩展介绍与开发教程
Aug 19 PHP
php设计模式之单例模式实例分析
Feb 25 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
Apr 05 PHP
yii框架无限极分类的实现方法
Apr 08 PHP
PHP将数据导出Excel表中的实例(投机型)
Jul 31 PHP
PHP堆栈调试操作简单示例
Jun 15 PHP
PHP获取对象属性的三种方法实例分析
Jan 03 PHP
PDO::beginTransaction讲解
Jan 27 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连mysql和oracle数据库性能比较
2006/10/09 PHP
php实现单链表的实例代码
2013/03/22 PHP
利用PHP实现图片等比例放大和缩小的方法详解
2013/06/06 PHP
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
2016/06/06 Javascript
require.js配合插件text.js实现最简单的单页应用程序
2016/07/12 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
解决Layui中layer报错的问题
2019/09/03 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
[46:23]完美世界DOTA2联赛PWL S2 FTD vs Magma 第一场 11.20
2020/11/23 DOTA
python中对list去重的多种方法
2014/09/18 Python
快速了解Python相对导入
2018/01/12 Python
selenium+python实现自动化登录的方法
2018/09/04 Python
如何基于matlab相机标定导出xml文件
2020/11/02 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
Python实现简单的2048小游戏
2021/03/01 Python
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
Book Depository亚太地区:一家领先的国际图书零售商
2019/05/05 全球购物
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
请说出几个常用的异常类
2013/01/08 面试题
实习生个人的自我评价
2013/12/08 职场文书
工程招投标邀请书
2014/01/26 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
社团活动总结书
2014/06/27 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
关于五一放假的通知
2015/08/18 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
浅谈Redis的几个过期策略
2021/05/27 Redis