php获得网站访问统计信息类Compete API用法实例

前端技术 2023/09/07 PHP

本文实例讲述了php获得网站访问统计信息类Compete API用法。分享给大家供大家参考。具体如下:

这里使用php获得网站访问统计信息类Compete API,Compete是一个专门用来统计网站信息的网站

<?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);
 }
}

希望本文所述对大家的php程序设计有所帮助。

本文地址:https://www.stayed.cn/item/17649

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。