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 相关文章推荐
玩转虚拟域名◎+ .
Oct 09 PHP
php mysql Errcode: 28 终极解决方法
Jul 01 PHP
php GeoIP的使用教程
Mar 09 PHP
CI(CodeIgniter)框架配置
Jun 10 PHP
Laravel框架表单验证详解
Sep 04 PHP
php使用fopen创建utf8编码文件的方法
Oct 31 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
Apr 09 PHP
PHP微信开发之有道翻译
Jun 23 PHP
PHP开发实现微信退款功能示例
Nov 25 PHP
thinkphp3.2.0 setInc方法 源码全面解析
Jan 29 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
Jun 22 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 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
基于文本的搜索
2006/10/09 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
复制本贴标题和地址的js代码
2008/07/01 Javascript
Javascript的构造函数和constructor属性
2010/01/09 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
jquery uploadify 在FF下无效的解决办法
2014/09/26 Javascript
jQuery中animate()方法用法实例
2014/12/24 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
vue音乐播放器插件vue-aplayer的配置及其使用实例详解
2017/07/10 Javascript
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
解决layui-open关闭自身窗口的问题
2019/09/10 Javascript
JavaScript Window浏览器对象模型原理解析
2020/05/30 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
Python做文本按行去重的实现方法
2016/10/19 Python
python with提前退出遇到的坑与解决方案
2018/01/05 Python
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
Python中return self的用法详解
2018/07/27 Python
Python的几种主动结束程序方式
2019/11/22 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
利用css3实现的简单的鼠标悬停按钮
2014/11/04 HTML / CSS
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
岗位标兵事迹材料
2014/05/17 职场文书
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
2014个人年度工作总结
2014/12/15 职场文书
黄山导游词
2015/01/31 职场文书
公务员爱岗敬业心得体会
2016/01/25 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers