php实现百度云加速API及SDK封装

百度云加速API参考文档

https://su.baidu.com/help/index.html#/7_kaifazhinan/2_APIcankao-NEW/2_wangzhanjieru/2.1.1_tianjiayuming.md

注意: 官方接口v3和v31有些参数并未实现,或返回的内容和文档描述不符合,所以在封装时交叉使用了2个版本的API,并非码字错漏。

/**
 * Author: rehiy <https://www.rehiy.com>
 * Update: 2021-04-12
 */
class Yunjiasu
{
    private $su;
    private $name = '';
    private $zone = [];
    private $zone_fn = [
        'dns_records',
        'dns_records_post',
        'dns_records_patch',
        'dns_records_delete',
        'purge_cache',
    ];
    public function __construct($domain, $access_key, $secret_key)
    {
        $this->su = new YunjiasuCore($access_key, $secret_key);
        $this->zone = $this->su->zones(['name' => $domain]);
        if (empty($this->zone['id'])) {
            throw new Exception('not found domain');
        }
        $this->name = $domain;
    }
    public function __call($name, $arguments)
    {
        if (in_array($name, $this->zone_fn)) {
            array_unshift($arguments, $this->zone['id']);
        }
        return call_user_func_array(array($this->su, $name), $arguments);
    }
    public function purge_cache($data)
    {
        return $this->su->purge_cache($this->zone['id'], $data);
    }
    public function dns_records($data = [])
    {
        $list = $this->su->dns_records($this->zone['id']);
        if (empty($list) || empty($data)) {
            return $list;
        }
        return array_filter(
            $list,
            function ($item) use ($data) {
                isset($data['name']) && $data['name'] .= '.' . $this->name;
                return count($data) === count(array_intersect_assoc($item, $data));
            }
        );
    }
    public function dns_records_delete($data)
    {
        return array_map(
            function ($rs) {
                return $this->su->dns_records_delete($this->zone['id'], $rs['id']);
            },
            $this->dns_records($data)
        );
    }
}
class YunjiasuCore
{
    private $api_base = 'https://api.su.baidu.com/';
    private $access_key = '';
    private $secret_key = '';
    public function __construct($access_key, $secret_key)
    {
        $this->access_key = $access_key;
        $this->secret_key = $secret_key;
    }
    ////////////////////////////////////////////////////////////////
    public function zones($data)
    {
        $path = 'v31/yjs/zones';
        return $this->api_call('GET', $path, $data);
    }
    ////////////////////////////////////////////////////////////////
    public function dns_records($zone_id)
    {
        $path = 'v31/yjs/zones/' . $zone_id . '/dns_records';
        return $this->api_call('GET', $path);
    }
    public function dns_records_post($zone_id, $data)
    {
        $path = 'v31/yjs/zones/' . $zone_id . '/dns_records';
        return $this->api_call('POST', $path, $data);
    }
    public function dns_records_patch($zone_id, $data)
    {
        $path = 'v31/yjs/zones/' . $zone_id . '/dns_records';
        return $this->api_call('PATCH', $path, $data);
    }
    public function dns_records_delete($zone_id, $id)
    {
        $path = 'v31/yjs/zones/' . $zone_id . '/dns_records/' . $id;
        return $this->api_call('DELETE', $path);
    }
    ////////////////////////////////////////////////////////////////
    public function purge_cache($zone_id, $data)
    {
        $path = 'v31/yjs/zones/' . $zone_id . '/purge_cache';
        return $this->api_call('DELETE', $path, $data);
    }
    ////////////////////////////////////////////////////////////////
    public function custom_certificates($data)
    {
        $path = 'v3/yjs/custom_certificates';
        return $this->api_call('GET', $path, $data);
    }
    public function custom_certificates_post($data)
    {
        $path = 'v3/yjs/custom_certificates';
        return $this->api_call('POST', $path, $data);
    }
    public function custom_certificates_delete($data)
    {
        $path = 'v3/yjs/custom_certificates';
        return $this->api_call('DELETE', $path, $data);
    }
    ////////////////////////////////////////////////////////////////
    private function api_call($method, $path, $data = NULL)
    {
        if (PHP_SAPI == 'cli') {
            print_r("\n> " . $method . ' /' . $path);
        }
        $url = $this->api_base . $path;
        $header = $this->api_header($path, $data);
        $result = $this->http_repuest($method, $url, $header, $data);
        if (!empty($result['errors'])) {
            $error = json_encode($result['errors']);
            throw new Exception($error);
        }
        if (!empty($result['result'])) {
            return $result['result'];
        }
        if (!empty($result['success'])) {
            return ['success' => true];
        }
        return $result;
    }
    private function api_header($path, $data = NULL)
    {
        $params = [
            'X-Auth-Access-Key' => $this->access_key,
            'X-Auth-Nonce' => uniqid(),
            'X-Auth-Path-Info' => $path,
            'X-Auth-Signature-Method' => 'HMAC-SHA1',
            'X-Auth-Timestamp' => time(),
        ];
        if (is_array($data)) {
            $params = array_merge($params, $data);
        }
        ksort($params);
        $header = $signls = [];
        foreach ($params as $k => $v) {
            if (is_bool($v)) {
                $v = $v ? 'true' : 'false';
            }
            if (is_array($v)) {
                $v = str_replace('","', '", "', json_encode($v, JSON_UNESCAPED_SLASHES));
            }
            if (strpos($k, 'X-Auth') === 0) {
                $header[] = $k . ':' . $v;
            }
            if ($v !== '') {
                $signls[] = $k . '=' . $v;
            }
        }
        $header[] = 'X-Auth-Sign:' . base64_encode(
            hash_hmac('sha1', implode('&', $signls), $this->secret_key, true)
        );
        return $header;
    }
    ////////////////////////////////////////////////////////////////
    private function http_repuest($method, $url, $header = NULL, $body = NULL)
    {
        $ch = curl_init();
        if ($method == 'GET' && $body) {
            $url .= '?' . http_build_query($body);
            $body = NULL;
        }
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
        if ($header) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        }
        if ($body) {
            if (is_array($body)) {
                $body = json_encode($body);
            }
            curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
        }
        $result = curl_exec($ch);
        $errno = curl_errno($ch);
        $error = curl_error($ch);
        curl_close($ch);
        if ($errno) {
            return ['error' => $errno, 'message' => $error];
        }
        return json_decode($result, true);
    }
}

以上就是php实现百度云加速API及SDK封装的详细内容,更多关于php封装百度云加速API及SDK的资料请关注我们其它相关文章!

(0)

相关推荐

  • 使用百度云加速后网站打开速度慢、广告不显示的解决方法

    最近发现自己的博客打开很慢,通过ie浏览器打开速度还可以,使用任何第三方浏览器打开都超级慢,以为是HTML代码元素导致,一番比对后没有发现不是HTML5代码问题,但是在头部发现一串javascript代码很可疑, <script type="text/javascript"> //<![CDATA[ try{if (!window.CloudFlare) { var CloudFlare=[{verbose:0,p:1417916956,byc:0,owlid:&qu

  • php封装pdo实例以及pdo长连接的优缺点总结

    一.前言 最近需要写脚本来实现崩溃日志的入库,不出所料又是脱离于框架的,那么行吧,咱们只能自己封装数据库相关操作了.博主这里选择了封装pdo操作数据库相关. 二.为什么选择pdo 众所周知的,php在早期的时候是带有mysql扩展的,但是后来由于过于古老缺失了mysql的新特性,因此主键没落. 从php5开始,更建议大家使用mysqli扩展,这个是mysql扩展的增强版,是一个面向对象的MySQL接口,更容易使用.缺点是只能操作mysql,不够强大. 还有就是pdo扩展了,这个是最丰富的的一个扩

  • PHP调用接口API封装的例子

    GET: /** * 通过URL获取页面信息 * @param $url 地址 * @return mixed 返回页面信息 */ function get_url($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); //设置访问的url地址 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); c

  • php实现百度云加速API及SDK封装

    百度云加速API参考文档 https://su.baidu.com/help/index.html#/7_kaifazhinan/2_APIcankao-NEW/2_wangzhanjieru/2.1.1_tianjiayuming.md 注意: 官方接口v3和v31有些参数并未实现,或返回的内容和文档描述不符合,所以在封装时交叉使用了2个版本的API,并非码字错漏. /** * Author: rehiy <https://www.rehiy.com> * Update: 2021-04-1

  • python利用百度云接口实现车牌识别的示例

    一个小需求---实现车牌识别. 目前有两个想法 1. 调云在线的接口或者使用SDK做开发(配置环境和编译第三方库很麻烦,当然使用python可以避免这些问题) 2. 自己实现车牌识别算法(复杂) 一开始准备使用百度云文字识别C++ SDK来做,发现需要准备curl.jsoncpp和OpenCV,并且curl和jsoncpp需要自己编译,很麻烦,所以换用了python来做,真的是顺畅简单. 1. 安装python环境(我用python3.7) python官网下载地址:https://www.py

  • linux命令行操作百度云上传下载文件

    目录 0. 背景 1. 安装 2. 登录百度云账号 3.上传文件 4.下载文件 5. 其它命令 6. python代码调用 0. 背景 很多时候我们只能通过ssh工具远程连接服务器,很多时候是没有图形界面的,可以使用ssh或者ftp上传下载大的文件,这时下载速率受限于服务器带宽.由于本人目前在家连接学校服务器是自己搭建frp做的内网穿透,这时上传下载的速率取决于frp服务器,由于带宽只有4M,上传下载20G以上的大文件,上传下载速度500KB左右,耗时又费力,从github上发现一个不错项目ht

  • C# SDK实现百度云OCR的文字识别功能

    最近项目要用到文字识别功能,所以花了几天时间整理了一下.今天就记录一下用C#实现文字识别的过程. 一.登录百度云进入控制台界面,创建应用获取秘钥 1.在百度云的产品里找到文字识别 2.找到通用文字识别点击立即使用.然后进入控制台.(这里可能会进入购买页面,可以直接购买免费版) 3.在控制台点击创建应用.然后填写相关内容就可以获得应用秘钥. 二.获得C#SDK 1.百度云C#SDK下载:下载地址 2.可以到官网直接下载:下载链接 三.将C#SDK导入VS 找到解决方案里的引用目录,右键,选择第一个

  • 对python借助百度云API对评论进行观点抽取的方法详解

    通过百度云API接口抽取得到产品评论的观点,也掠去了很多评论中无用的内容以及符号,为后续进行文本主题挖掘或者规则的提取提供基础. 工具 1.百度云账号,申请应用接口(自然语言处理) 2.python3.5 以下是百度接口提供的说明: 我们使用到的可选值是13,kindle属于3C产品. 下面是代码示例: from aip import AipNlp import csv import pandas as pd from pandas.core.frame import DataFrame "&q

  • Python基于百度云文字识别API

    本文实例为大家分享了Python实现最简单的文字识别的具体代码,供大家参考,具体内容如下 Python版本:3.6.5 百度云提供的文字识别技术,准确率还是非常高的,而且每天还有5w次免费的调用量,对于用来学习或者偶尔拿来用用,已经完全足够了.文章提供一个模板,稍加修改就可以直接套用.注释中提到必须输入的地方,你都正确地输入了的话,就可以完成一次简单的文字识别了. # -*- coding: utf-8 -*- import requests import base64 class Orc_ma

  • Java结合百度云存储BCS代码分享

    一.简介 云也不是一个新概念了,云到底是什么东西,你叫我说个明明白白的我也说不出来,姑且算作联网的就叫做云.国内的云服务商还是有很多了,主要有两大类,一类是类似于阿里云的类主机型的云提供商,比如万网等传统空间商转过来的:还有一类是应用应用托管平台,比如BAE,SAE.相对于阿里云等空间商之类的来说,应用托管平台的入门更低,为广大的苦逼程序猿提供了一个好的测试平台. 我最近负责的软件升级程序,多平台多文件多版本,如果是自己架构文件服务器带宽肯定不能满足业务需求,于是上手百度云存储BCS服务,现在使

  • Erlang实现的百度云推送Android服务端实例

    百度云推送官方地址http://developer.baidu.com/wiki/index.php?title=docs/cplat/push 简单的介绍下原理: 百度云推送支持IOS和Android的云推送.Android支持的还不错,但是IOS一般很难调通.百度云对于IOS的推送来说,他只是做了一个中间的代理,为用户提供接口,优点是使用百度云推送,Android和IOS可以统一管理:缺点是:调通不容易,用户的IOS证书需要上传验证,会直接暴露给第三方,并且IOS的apns支持用户自己构建p

  • Python Web框架Flask中使用百度云存储BCS实例

    对于部署在百度应用引擎BAE上的项目,使用百度云存储BCS(Baidu Cloud Storage)是不错的存储方案. 百度云存储已有Python SDK,对它进行简单封装后,就可以直接在Flask中使用了,项目代码见GitHub上Flask-BCS. 使用示例代码: 复制代码 代码如下: from flask import Flask from flask_bcs import BCS   BCS_HOST = 'BCS HOST' BCS_ACCESS_KEY = 'BCS Access K

随机推荐