Récupérer des données SEO sur Omniture via API

Pas de chance, votre client est sous Omniture, et vous ne savez pas comment aller récupérer automatiquement vos informations de trafic. Nous allons voir ensemble comment s’y prendre.

Omniture , je ne suis pas vraiment fan, et si vous allez chercher des tutoriels, vous allez vraiment vous dire qu’ils ne veulent pas que grand monde utilise leur solution ! Mais bon, après quelques croisement de sources, j’ai enfin réussi à aller chercher ce que je voulais.
Tout d’abord, il faut débloquer votre compte API via l’interface. Une fois passé la mire de login au 2 passwords, aller dans Edit Profile. Vous devriez avoir votre login/password d’API ici:

Il vous faudra ensuite passer une authentification encodé en base 64 à l’aide d’un client REST.
Puis, il faudra appeler l’api, patienter, et aller décoder les réponses en JSON une fois que ca sera prêt. Oui, chez Omniture, on n’aime pas le temps réél.

Pour récupérer les informations des visites, vous trouverez des informations sur https://marketing.adobe.com/developer/documentation/sitecatalyst-reporting/r-elements-1

Il faut définir cet ensemble:
A noter que le paramètre rsid, vous pouvez le trouver dans Admin > Reports suite et que la date est au format YYYY-MM-DD.

$data='{											"reportDescription":{												"reportSuiteID":"'.$rsid.'",												"dateFrom":"'.$sDateDebut.'",												"dateTo":"'.$sDateFin.'",																"sortBy":"visits",												"metrics":[{"id":"visits"},{"id":"averageTimeSpentOnSite"}, {"id":"pageViews"}],												"elements":[{"id":"accountsummary"}]
}
 }';
$response = $this->getResponse($log, $data, $account);

Pour récupérer les infos concernant le type de trafic, c’est en revanche celui-ci:


$data='{											"reportDescription":{												"reportSuiteID":"'.$rsid.'",												"dateFrom":"'.$sDateDebut.'",												"dateTo":"'.$sDateFin.'",																"sortBy":"visits",												"metrics":[{"id":"visits"}],												"elements":[{"id":"referrertype"}]
}
}';
$response = $this->getResponse($log, $data, $account);

Je vous joint le code pour pouvoir envoyer une requête. A noter que j’utilise un objet account qui contient le login et password qu’on a vu ensemble plus haut.
Avez tout ça, vous devriez vous en sortir.

Bon courage…


	/* Envoie une requete */
	private function GetAPIData($method, $data, $account) {
        //On trouve ca dans le profil (account information)
		$username = $account->login;
		$secret = $account->password;
        $nonce = md5(uniqid(php_uname('n'), true));
        $nonce_ts = date('c');
        $digest = base64_encode(sha1($nonce.$nonce_ts.$secret));

        $server = "https://api.omniture.com";
        $path = "/admin/1.3/rest/";

        $rc=new SimpleRestClient();
        $rc->setOption(CURLOPT_HTTPHEADER, array("X-WSSE: UsernameToken Username=\"$username\", PasswordDigest=\"$digest\", Nonce=\"$nonce\", Created=\"$nonce_ts\""));

        $rc->postWebRequest($server.$path.'?method='.$method, $data);

        return $rc;
    }

	/* Recupere la reponse d'un rapport */
	private function getResponse($log, $data, $account){
		$method="Report.QueueRanked";
		$rc = $this->GetAPIData($method, $data, $account);
		$responseOK = "";
		if ($rc->getStatusCode()==200) {
			$response=$rc->getWebResponse();
			$json=json_decode($response);
			if ($json->status=='queued') {
				$reportID=$json->reportID;
			}
			else {
				$error=true;
				echo "not queued - ";
			}
		} else {
			$error=true;
			echo "something went really wrong\n";
			fputs($log,"Erreur: ".$rc->getInfo()."\n");
			echo "\n".$rc->getWebResponse();
			fputs($log,$rc->getWebResponse()."\n");
		}

		$iTest = 0;
		$done = false;
		$error=false;
		while (!$done && !$error && $iTest<4) {
			$iTest++;
			sleep(10);

			$method="Report.GetStatus";
			$data='{"reportID":"'.$reportID.'"}';

			$rc = $this->GetAPIData($method, $data, $account);

			if ($rc->getStatusCode()==200) {
				$response=$rc->getWebResponse();
				$json=json_decode($response);

				if ($json->status=="done") {
					$done=true;
				}else if ($json->status=="running"){
					if ($json->error_code != "report_not_ready"){
						$error=true;
					}
				}
				else if ($json->status=="failed" || strstr($json->status, "error")>0) {
					$error=true;
				}
			} else {
				$done=true;
				$error=true;
				echo "something went really wrong\n";
				fputs($log,"Erreur: ".$rc->getInfo()."\n");
				echo "\n".$rc->getWebResponse();
				fputs($log,$rc->getWebResponse()."\n");
			}
		}

		if ($error) {
			echo "report failed:\n";
			echo $response;
		}
		else {
			$method="Report.GetReport";
			$data='{"reportID":"'.$reportID.'"}';

			$rc = $this->GetAPIData($method, $data, $account);
			if ($rc->getStatusCode()==200) {
				$response=$rc->getWebResponse();				
				/*
				$json=json_decode($response);
				echo "your report:\n";
				var_dump($json);
				echo "Page:PageViews\n";
				foreach ($json->report->data as $el) {
					echo $el->name.":".$el->counts[0]."\n";
				}
				*/
				$responseOK = $response;
			} else {
				echo "something went really wrong\n";
				fputs($log,"Erreur: ".$rc->getInfo()."\n");
				echo "\n".$rc->getWebResponse();
				fputs($log,$rc->getWebResponse()."\n");
			}
		}
		
		return $responseOK;
	}

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.