/** * 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'); }
/** * 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); }