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 相关文章推荐
java EJB 加密与解密原理的一个例子
Jan 11 PHP
提高PHP编程效率的53个要点(经验小结)
Sep 04 PHP
php算开始时间到过期时间的相隔的天数
Jan 12 PHP
PHP 下载文件时自动添加bom头的方法实例
Jan 10 PHP
php实现与erlang的二进制通讯实例解析
Jul 23 PHP
常见PHP数据库解决方案分析介绍
Sep 24 PHP
Centos6.5和Centos7 php环境搭建方法
May 27 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
php删除一个路径下的所有文件夹和文件的方法
Feb 07 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
Aug 30 PHP
php中pcntl_fork详解
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和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
php获取远程文件的内容和大小
2015/11/03 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
Jquery选择器 $实现原理
2009/12/02 Javascript
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
JS中toFixed()方法引起的问题如何解决
2012/11/20 Javascript
window.returnValue使用方法示例介绍
2014/07/03 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
JavaScript 是什么意思
2016/09/22 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
2019/06/10 jQuery
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
[00:44]TI7不朽珍藏III——军团指挥官不朽展示
2017/07/15 DOTA
python smtplib模块发送SSL/TLS安全邮件实例
2015/04/08 Python
Python实现批量将word转html并将html内容发布至网站的方法
2015/07/14 Python
python实现Dijkstra静态寻路算法
2019/01/17 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
Python hashlib和hmac模块使用方法解析
2020/12/08 Python
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
美国踏板车和轻便摩托车销售网站:Mega Motor Madness
2020/02/26 全球购物
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
联谊活动总结
2014/08/28 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
公司捐书倡议书
2015/04/27 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
详解nginx location指令
2022/01/18 Servers