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面向对象的方法重载两种版本比较
Sep 08 PHP
PHP动态创建Web站点的方法
Aug 14 PHP
hadoop中一些常用的命令介绍
Jun 19 PHP
Laravel 5框架学习之数据库迁移(Migrations)
Apr 08 PHP
php显示时间常用方法小结
Jun 05 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
Oct 27 PHP
谈谈 PHP7新增功能
Dec 16 PHP
php实现产品加入购物车功能(1)
Jul 23 PHP
Laravel下生成验证码的类
Nov 15 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
php多进程中的阻塞与非阻塞操作实例分析
Mar 04 PHP
PHP数组实际占用内存大小原理解析
Dec 11 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类分享
2014/02/07 PHP
php构造函数的继承方法
2015/02/09 PHP
Yii 使用intervention/image拓展实现图像处理功能
2019/06/22 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
JS实现QQ图片一闪一闪的效果小例子
2013/07/31 Javascript
js验证整数加保留小数点的简单实例
2013/12/02 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
window.onload使用指南
2015/09/13 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
Nodejs下用submit提交表单提示cannot post错误的解决方法
2016/11/21 NodeJs
微信小程序自定义模态对话框实例详解
2017/08/16 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
JavaScript常见继承模式实例小结
2019/01/11 Javascript
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
JavaScript 几种循环方式以及模块化的总结
2020/09/03 Javascript
[01:25]DOTA2超级联赛专访iG 将调整状态找回自己
2013/06/05 DOTA
[45:52]2018DOTA2亚洲邀请赛 4.1小组赛 A组加赛 LGD vs Liquid
2018/04/02 DOTA
python使用PyV8执行javascript代码示例分享
2013/12/04 Python
python 多进程通信模块的简单实现
2014/02/20 Python
Python实现控制台输入密码的方法
2015/05/29 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
2018/02/18 Python
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
Python八皇后问题解答过程详解
2019/07/29 Python
python处理写入数据代码讲解
2020/10/22 Python
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
外科实习自我鉴定
2013/10/06 职场文书
志愿者服务感言
2014/02/27 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书
单位政审意见范文
2015/06/04 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书
豆瓣2021评分最高动画剧集-豆瓣评分最高的动画剧集2021
2022/03/18 日漫
面试官问我Mysql的存储引擎了解多少
2022/08/05 MySQL