typecho插件编写教程(六):调用接口


Posted in PHP onMay 28, 2015

此篇我们开始调用接口,我们在插件类中新定义一个方法,起名为send_post,在方法中我们通过系统配置获取接口调用地址。

百度给的例子中使用了php的CURL,更高级的使用方法可以学习PHP_cURL初始化和执行方法

下面我们结合一下百度站长提供的代码。

/**
   * 发送数据
   * @param $url 准备发送的url
   * @param $options 系统配置
   */
  public static function send_post($url, $options){
    //获取API
    $api = $options->plugin('BaiduSubmitTest')->api;

    //准备数据
    if( is_array($url) ){
      $urls = $url;
    }else{
      $urls = array($url);
    }

    $ch = curl_init();
    $options = array(
      CURLOPT_URL => $api,
      CURLOPT_POST => true,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_POSTFIELDS => implode("\n", $urls),
      CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
    );
    curl_setopt_array($ch, $options);
    $result = curl_exec($ch);

    //记录日志
    file_put_contents('/tmp/send_log', date('H:i:s') . $result . "\n");
  }

由于我们还没有建立日志系统,所以我们将日志先写入文件,先看效果吧!

返回值:

{"remain":48,"success":1}

Good!看来没有什么问题!不过为了保险起见,我还是用typecho自带的http类重写了此方法。
public static function send_post($url, $options){
    //获取API
    $api = $options->plugin('BaiduSubmitTest')->api;

    //准备数据
    if( is_array($url) ){
      $urls = $url;
    }else{
      $urls = array($url);
    }

    //为了保证成功调用,老高先做了判断
    if (false == Typecho_Http_Client::get()) {
      throw new Typecho_Plugin_Exception(_t('对不起, 您的主机不支持 php-curl 扩展而且没有打开 allow_url_fopen 功能, 无法正常使用此功能'));
    }

    //发送请求
    $http = Typecho_Http_Client::get();
    $http->setData(implode("\n", $urls));
    $http->setHeader('Content-Type','text/plain');
    $result = $http->send($api);

    //记录日志
    file_put_contents('/tmp/send_log', date('H:i:s') . $result . "\n");
  }
}

现在我们的插件基本能够运行了,但是在结构上还可以进一步优化!

PHP 相关文章推荐
如何把PHP转成EXE文件
Oct 09 PHP
新手学习PHP的一些基础知识分享
Jul 27 PHP
php获取服务器信息的实现代码
Feb 04 PHP
Chrome Web App开发小结
Sep 04 PHP
php短网址和数字之间相互转换的方法
Mar 13 PHP
PHP输出一个等腰三角形的方法
May 12 PHP
PHP下载远程图片并保存到本地方法总结
Jan 22 PHP
php中namespace use用法实例分析
Jan 22 PHP
php中青蛙跳台阶的问题解决方法
Oct 14 PHP
PHP创建XML接口示例
Jul 04 PHP
PHP实现通过二维数组键值获取一维键名操作示例
Oct 11 PHP
php redis setnx分布式锁简单原理解析
Oct 23 PHP
PHP cURL初始化和执行方法入门级代码
May 28 #PHP
php支持中文字符串分割的函数
May 28 #PHP
typecho插件编写教程(五):核心代码
May 28 #PHP
php实现paypal 授权登录
May 28 #PHP
typecho插件编写教程(四):插件挂载
May 28 #PHP
PHP Opcache安装和配置方法介绍
May 28 #PHP
typecho插件编写教程(三):保存配置
May 28 #PHP
You might like
php从给定url获取文件扩展名的方法
2015/03/14 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
Laravel框架集合用法实例浅析
2020/05/14 PHP
JavaScript修改css样式style
2008/04/15 Javascript
xml文档转换工具,附图表例子(hta)
2010/11/17 Javascript
Prototype源码浅析 Enumerable部分之each方法
2012/01/16 Javascript
jQuery动画效果-fadeIn fadeOut淡入浅出示例代码
2013/08/28 Javascript
页面图片浮动左右滑动效果的简单实现案例
2014/02/10 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
2015/01/02 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
2017/01/04 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
Python聊天室实例程序分享
2016/01/05 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
TensorFlow学习之分布式的TensorFlow运行环境
2020/02/05 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
MIKI HOUSE美国官方网上商店:日本领先的婴儿和儿童高级时装品牌
2020/06/21 全球购物
网站编辑求职信
2013/10/17 职场文书
寄语十八大感言
2014/02/07 职场文书
党委班子纠正“四风”问题整改措施
2014/10/28 职场文书
统计员岗位职责
2015/02/11 职场文书
在职证明书模板
2015/06/15 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书