Пример #1
0
 /**
  * Get popular search terms and return html snippet
  * 
  * @return void
  */
 public function launch()
 {
     global $interface, $configArray;
     if (!isset($configArray['Piwik']['site_id']) || !isset($configArray['Piwik']['token_auth'])) {
         exit;
     }
     $options = array('module' => 'API', 'format' => 'json', 'method' => 'Actions.getSiteSearchKeywords', 'idSite' => $configArray['Piwik']['site_id'], 'period' => 'range', 'date' => date('Y-m-d', strtotime('-30 days')) . ',' . date('Y-m-d'), 'token_auth' => $configArray['Piwik']['token_auth']);
     $url = $configArray['Piwik']['url'];
     // Retrieve data from Piwik
     $request = new Proxy_Request();
     $request->setMethod(HTTP_REQUEST_METHOD_GET);
     $request->setURL($url);
     // Load request parameters:
     foreach ($options as $key => $value) {
         $request->addQueryString($key, $value);
     }
     // Perform request and die on error:
     $result = $request->sendRequest();
     if (PEAR::isError($result)) {
         die($result->getMessage() . "\n");
     }
     $response = json_decode($request->getResponseBody(), true);
     $searchPhrases = array();
     if (isset($response['result']) && $response['result'] == 'error') {
         $logger = new Logger();
         $logger->log('Piwik error: ' . $response['message'], PEAR_LOG_ERR);
     } else {
         foreach ($response as $item) {
             if (substr($item['label'], 0, 1) === '(') {
                 // remove searches that begin with a parenthesis
                 // because they are likely to be advanced searches
                 continue;
             } else {
                 if ($item['label'] === '-') {
                     // remove empty searches
                     continue;
                 } else {
                     $label = $item['label'];
                 }
             }
             $searchPhrases[$label] = !isset($item['nb_actions']) ||  is_null($item['nb_actions']) ? $item['nb_visits'] : $item['nb_actions'];
         }
         // Order by hits
         arsort($searchPhrases);
     }
     // Assign values only and 10 first items
     $interface->assign('searchPhrases', array_slice(array_keys($searchPhrases), 0, 10));
     $interface->display('AJAX/popularSearches.tpl');
 }
Пример #2
0
 /**
  * Make an OAI-PMH request.  Die if there is an error; return a SimpleXML object
  * on success.
  *
  * @param string $verb   OAI-PMH verb to execute.
  * @param array  $params GET parameters for ListRecords method.
  *
  * @return object        SimpleXML-formatted response.
  * @access private
  */
 private function _sendRequest($verb, $params = array())
 {
     // Debug:
     if ($this->_verbose) {
         echo "Sending request: verb = {$verb}, params = ";
         print_r($params);
     }
     // Set up retry loop:
     while (true) {
         // Set up the request:
         $request = new Proxy_Request();
         $request->setMethod(HTTP_REQUEST_METHOD_GET);
         $request->setURL($this->_baseURL);
         // Load request parameters:
         $request->addQueryString('verb', $verb);
         foreach ($params as $key => $value) {
             $request->addQueryString($key, $value);
         }
         // Perform request and die on error:
         $result = $request->sendRequest();
         if (PEAR::isError($result)) {
             die($result->getMessage() . "\n");
         }
         // Check for 503 response.
         if ($request->getResponseCode() == 503) {
             $delay = $request->getResponseHeader('Retry-After');
             if ($delay > 0) {
                 if ($this->_verbose) {
                     echo "Received 503 response; waiting {$delay} seconds...\n";
                 }
                 sleep($delay);
             }
         } else {
             // If we didn't get a 503, we can leave the retry loop:
             break;
         }
     }
     // If we got this far, there was no error -- send back response.
     $response = $request->getResponseBody();
     return $this->_processResponse($response);
 }