php»ñµÃÍøÕ¾·ÃÎÊͳ¼ÆÐÅÏ¢ÀàCompete APIÓ÷¨ÊµÀý

5年以前  |  阅读数:981 次  |  编程语言:PHP 

±¾ÎÄʵÀý½²ÊoÁËphp»ñµÃÍøÕ¾ÃÎÊͳ¼ÆÐÅÏ¢ÀaCompete APIÓè¡£*ÖÏi¸ø´o¼Ò¹(C)´o¼Ò²Î¿¼¡£¾ßÌaÈçÏ£º

ÕaÀiʹÓÃphp»ñµÃÍøÕ¾*ÃÎÊͳ¼ÆÐÅÏ¢ÀaCompete API£¬CompeteÊÇÒ»¸oרÃÅÓÃÀ´Í³¼ÆÍøÕ¾ÐÅÏ¢µÄÍøÕ¾


    <?php
    // Check for dependencies
    if (!function_exists('curl_init'))
     throw new Exception('Compete needs the CURL PHP extension.');
    if (!function_exists('json_decode'))
     throw new Exception('Compete needs the JSON PHP extension.');
    /**
     * Base Compete exception class.
     */
    class CompeteException extends Exception {}
    /**
     * Represents Compete API.
     * @author Egor Gumenyuk (boo1ean0807 at gmail dot com)
     * @package Compete
     * @license Apache 2.0
     */
    class Compete
    {
     /**
      * Default usr agent.
      */
     const USER_AGENT  = 'Compete API wrapper for PHP';
     /**
      * Base url for api calls.
      */
     const API_BASE_URL = 'http://apps.compete.com/sites/:domain/trended/:metric/?apikey=:key';
     /**
      * Masks for url params.
      */
     private $_urlKeys = array(':domain', ':metric', ':key');
     private $_apiKey;
     /**
      * For url cleaning.
      */
     private $_toSearch = array('http://', 'www.');
     private $_toReplace = array('', '');
     /**
      * List of available metrics.
      */
     private $_availableMetrics = array(
           // Description   Auth type
      'uv',   // Unique Visitors Basic
      'vis',  // Visits      Basic
      'rank',  // Rank       Basic
      'pv',   // Page Views    All-Access
      'avgstay',// Average Stay   All-Access
      'vpp',  // Visits/Person  All-Access
      'ppv',  // Pages/Visit   All-Access
      'att',  // Attention    All-Access
      'reachd', // Daily Reach   All-Access
      'attd',  // Daily Attention All-Access
      'gen',  // Gender      All-Access
      'age',  // Age       All-Access
      'inc',  // Income      All-Access
     );
     /**
      * List of available methods for __call() implementation.
      */
     private $_metrics = array(
      'uniqueVisitors' => 'uv',
      'visits'     => 'vis',
      'rank'      => 'rank',
      'pageViews'   => 'pv',
      'averageStay'  => 'avgstay',
      'visitsPerson'  => 'vpp',
      'pagesVisit'   => 'ppv',
      'attention'   => 'att',
      'dailyReach'   => 'reachd',
      'dailyAttention' => 'attd',
      'gender'     => 'gen',
      'age'      => 'age',
      'income'     => 'inc'
     );
     /**
      * Create access to Compete API.
      * @param string $apiKey user's api key.
      */
     public function __construct($apiKey) {
      $this->_apiKey = $apiKey;
     }
     /**
      * Implement specific methods.
      */
     public function __call($name, $args) {
      if (array_key_exists($name, $this->_metrics) && isset($args[0]))
       return $this->get($args[0], $this->_metrics[$name]);
      throw new CompeteException($name . ' method does not exist.');
     }
     /**
      * Get data from Compete.
      * @param string $site some domain.
      * @param string $metric metric to get.
      * @return stdClass Compete data.
      * @throws CompeteException
      */
     public function get($site, $metric) {
      if (!in_array($metric, $this->_availableMetrics))
       throw new CompeteException($metric . ' - wrong metric.');
      $values = array(
       $this->_prepareUrl($site),
       $metric,
       $this->_apiKey
      );
      // Prepare call url
      $url = str_replace($this->_urlKeys, $values, self::API_BASE_URL);
      // Retrieve data using HTTP GET method.
      $data = json_decode($this->_get($url));
      // Because of unsuccessful responses contain "status_message".
      if (!isset($data->status_message))
       return $data;
      throw new CompeteException('Status: ' . $data->status . '. ' .$data->status_message);
     }
     /**
      * Cut unnecessary parts of url.
      * @param string $url some url.
      * @return string trimmed url.
      */
     private function _prepareUrl($url) {
      return str_replace($this->_toSearch, $this->_toReplace, $url);
     }
     /**
      * Execute http get method.
      * @param string $url request url.
      * @return string response.
      */
     private function _get($url) {
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_USERAGENT, self::USER_AGENT);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      return curl_exec($ch);
     }
    }

Ï£Íu±¾ÎÄËuÊo¶Ô´o¼ÒµÄphp³ÌÐoÉe¼ÆÓÐËu°iÖu¡£

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例