API d`insertion de données

Commentaires

Transcription

API d`insertion de données
Adobe© Digital Marketing Suite
API d'insertion de données
Contents
API d'insertion de données....................................................................................3
Processus d'insertion de données..........................................................................................3
Identification des visiteurs.......................................................................................................4
Présentation séquentielle des données..................................................................................5
Données différées...................................................................................................................5
HTTP 1.1.................................................................................................................................6
Restrictions.............................................................................................................................7
Balises XML prises en charge.................................................................................................7
Codes de réponse POST......................................................................................................11
Exemple de code...................................................................................................................12
Exemple POST HTTP..............................................................................................................................12
Exemple GET HTTP.................................................................................................................................14
Exemple d'insertion de données (PHP)...................................................................................................15
Exemple d'insertion de données (Java)...................................................................................................16
Exemple d'insertion de données (Python)................................................................................................18
Last updated 2/22/2012
API d'insertion de données
API d'insertion de données
3
API d'insertion de données
L'API d'insertion de données offre un mécanisme de collecte de données, côté serveur, et d'envoi vers des serveurs
de la Suite de marketing en ligne. Plutôt que d'utiliser des balises JavaScript sur chaque page Web pour transmettre
des données sur les visiteurs aux serveurs de la Suite de marketing en ligne, le procédé de collecte des données
côté serveur axe exclusivement la collecte des données sur les demandes du navigateur Web et les réponses du
serveur Web.
Cette méthode de capture des données ne permet certes pas de capturer toutes les données disponibles par le
biais de balises de type page. Cependant, elle vous permet d'obtenir de précieuses informations quant à l'activité
des utilisateurs sur vos pages Web sans qu'il faille, pour cela, associer une balise JavaScript à chaque page.
Processus d'insertion de données
L'API d'insertion de données prend en charge HTTP POST et HTTP GET pour l'envoi de données vers les serveurs
de la Suite de marketing en ligne d'Adobe.
Note: La réponse de SiteCatalyst à chaque insertion de données comprend un message d'état (SUCCESS ou
FAILURE).
HTTP POST
Utilisez une requête HTTP POST pour envoyer du code XML correctement formaté à l'URL d'insertion de données.
Cette URL diffère de l'URL d'envoi de données JavaScript standard. Adobe ClientCare peut indiquer le nom de
domaine des serveurs de collecte de données Adobe auxquels vous devez envoyer les données. Par exemple :
http://namespace.112.2o7.net/b/ss//6
http://namespace.122.2o7.net/b/ss//6
Note: Le code "6" à la fin de l'URL indique que l'envoi de données nécessite un traitement XML.
A la réception, les serveurs Adobe effectuent une validation des balises élémentaire de l'insertion des données. En
cas de détection d'une erreur, Adobe renvoie une réponse Failure. Si l'insertion des données s'effectue correctement,
Adobe place la demande d'insertion en file d'attente en vue de son traitement par le moteur de traitement des
données standard de SiteCatalyst. Le moteur traite ces demandes de la même manière que les données collectées
via JavaScript.
Lors de l'utilisation de la commande HTTP POST avec l'API d'insertion de données, veuillez tenir compte des points
suivants :
• L'API d'insertion de données nécessite des données au format UTF-8. Indiquez le codage des caractères dans la
balise XML d'ouverture, comme indiqué dans Format d'insertion de données XML.
• Remplacez les symboles "&" (esperluette), ">" (supérieur à) et "<" (inférieur à) par leurs équivalents HTML lors de
leur transmission à une variable SiteCatalyst. Par exemple : envoyez <evar1>News & Sports <local> </evar1>
sous la forme <evar1>News &amp; Sports &lt;local&gt; </evar1>.
• Pour envoyer des données sur une connexion cryptée, l'application doit être configurée pour la prise en charge
des commandes HTTPS POST. Plusieurs outils vous permettent d'effectuer ce type d'opération :
API d'insertion de données
4
• PHP 4.3.0 et versions ultérieures prennent en charge OpenSSL. Vous pouvez les utiliser pour envoyer des
données POST via le port SSL 443. Pour afficher un exemple de cette opération, consultez Exemple d'insertion
de données (PHP).
• Vous pouvez utiliser cURL pour envoyer des données sur une connexion SSL. Pour plus d'informations sur la
commande HTTPS POST en langage Java, rendez-vous à l'adresse suivante :
http://java.sun.com/developer/technicalArticles/Security/secureinternet/.
• Microsoft .Net Framework version 1.1 prend en charge l'en-tête HTTP : Expect: 100-Continue in HTTP POST
requests, mais les serveurs de la Suite de marketing en ligne rejettent les données POST avec ce type de
demande. Pour éviter que cela ne se produise, définissez le paramètre ServicePointManager.Expect100Continue
= False. Pour de plus amples informations, rendez-vous sur la page suivante :
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemnetservicepointmanagerclassexpect100continuetopic.asp.
HTTP GET
Vous pouvez utiliser une commande HTTP GET pour envoyer des données vers l'URL d'insertion de données dans
un format de chaîne de requête prenant en charge les noms de variable raccourcis (pour plus d'informations,
reportez-vous à la section "Variables et paramètres de chaîne de requête" du Guide de mise en œuvre de SiteCatalyst,
disponible sous Aide > Documentation dans la Suite de marketing en ligne.
La commande HTTP GET réduit les besoins en bande passante de 30 à 40 %, mais les serveurs de collecte de
données Adobe n'envoient pas de messages de réponse. Dès lors, si l'insertion des données ne se déroule pas
comme prévu, vous ne recevez aucun retour d'information en vue de la résolution des problèmes. Pour de plus
amples informations, reportez-vous à la section Exemple de commande HTTP GET.
L'URL d'insertion de données diffère de l'URL d'envoi de données JavaScript standard. La valeur <rsid> figurant
dans l'URL est la suite de rapports à laquelle vous souhaitez envoyer les données. Adobe ClientCare peut indiquer
le nom de domaine des serveurs de collecte de données Adobe auxquels vous devez envoyer les données. Par
exemple :
http://namespace.112.2o7.net/b/ss/<rsid>/0
http://namespace.122.2o7.net/b/ss/<rsid>/0
Note: Le code "0" à la fin de l'URL indique que l'envoi de données nécessite un traitement JavaScript. Par
exemple :
A la réception, les serveurs Adobe effectuent une validation des balises élémentaire de l'insertion des données. En
cas de détection d'une erreur, Adobe renvoie une réponse Failure. Si l'insertion des données s'effectue correctement,
Adobe place la demande d'insertion en file d'attente en vue de son traitement par le moteur de traitement des
données standard de SiteCatalyst. Le moteur traite ces demandes de la même manière que les données collectées
via JavaScript.
Note: L'API d'insertion de données nécessite des données au format UTF-8.
Identification des visiteurs
Pour effectuer le suivi des visiteurs du site, chacun d'eux doit posséder un identifiant visiteur unique. Idéalement, il
existe un cookie persistant avec une période d'expiration étendue (5 ans ou plus).
API d'insertion de données
5
Utilisez la balise visitorID, la combinaison de l'adresse IP et de userAgent, pour envoyer des informations sur
l'identifiant du visiteur vers les serveurs de collecte de données Adobe. La variable visitorID accepte jusqu'à
100 caractères alphanumériques, mais ne peut pas contenir de trait d'union.
Si l'insertion des données contient un visitorID, le moteur de traitement des données de SiteCatalyst suppose
que les cookies persistants sont activés pour le navigateur Web du visiteur. Si l'insertion des données identifie le
visiteur à l'aide de son adresse IP/Agent utilisateur, SiteCatalyst affiche les cookies persistants de ce visiteur comme
étant désactivés.
Note: Pour éviter tout problème de traitement, assurez-vous que visitorID est un nombre aléatoire
uniformément distribué.
Le visitorID est essentiel pour lier les activités d'un visiteur capturées via JavaScript à celles envoyées par le
biais d'une collecte de données sans balise ou d'une application tierce. Par exemple, pour associer l'activité de
navigation d'un visiteur à des transactions dans une application de caddie virtuel tierce, vous devez transmettre ce
visitorID à l'application en question. L'application de caddie virtuel utilise le visitorID lors du téléchargement
des données de transaction via l'API d'insertion de données, de telle sorte que SiteCatalyst puisse les associer à
l'activité de navigation du visiteur (capturée précédemment via JavaScript).
En règle générale, les systèmes client génèrent des identifiants de visiteurs uniques que vous pouvez utiliser comme
valeur visitorID. Cependant, SiteCatalyst ne génère des identifiants de ce type que si cela s'avère nécessaire.
Pour connaître l'identifiant de visiteur généré par SiteCatalyst, lisez le cookie s_vi (par exemple, appelez
$_SERVER['HTTP_COOKIE'] dans PHP) relatif à l'identifiant du visiteur, puis utilisez cette valeur comme élément
<visitorid> dans l'appel de l'API d'insertion de données.
Présentation séquentielle des données
Pour garantir l'exactitude des données de commerce et de cheminement des visiteurs, les applications doivent
envoyer les données des visiteurs en respectant l'ordre de réception.
Le moteur de traitement des données de SiteCatalyst clôture une visite après 30 minutes en l'absence de réception
des données.
Lors de la simulation du trafic précédemment enregistré, Adobe conseille que les insertions de données imitent les
délais entre les événements d'utilisateur sur le site. Par exemple, si des pages vues pour un utilisateur donné ont
été enregistrées par l'application à 2, 4 et 5 secondes d'intervalle, ces pages sont envoyées vers SiteCatalyst à la
même cadence.
Si l'application ne parvient pas à reproduire la cadence des événements d'origine, Adobe conseille d'envoyer des
insertions de données séquentielles à 3 secondes d'intervalle, par visiteur, afin d'éviter de traiter les données dans
le désordre.
Données différées
L'API d'insertion de données vous permet d'envoyer des données différées ; par exemple, depuis une application
hors ligne vers des serveurs de collecte de données Adobe.
Note: Les données issues des envois différés sont disponibles pour Data Warehouse et Discover.
API d'insertion de données
6
Lors de la soumission de données différées, vous devez envoyer des données sur les visiteurs en respectant l'ordre
de réception (voir Présentation séquentielle des données). Cependant, vous ne devez pas envoyer des données
pour des visiteurs différents dans un ordre spécifique. Vous pouvez, par exemple, envoyer toutes les données
relatives au visiteur A avant celles du visiteur B, même si une partie ou toutes les données du visiteur B sont
antérieures à celles du visiteur A.
L'envoi de données différées nécessite une balise <timestamp> supplémentaire dans le code XML. SiteCatalyst
élimine les données qui ne sont pas horodatées.
Note:
Pour qu'il soit possible de visualiser des accès horodatés, Adobe ClientCare doit activer la prise en charge
de l'horodatage sur la suite de rapports, en plus de la variable d'horodatage que vous avez définie. Les accès
horodatés envoyés vers une suite de rapports qui n'ont pas été activés ne figurent pas dans le rapport.
Pour formater les données d'horodatage, y compris le fuseau horaire, utilisez soit le format d'horodatage Unix, soit
le format ISO-8601. Par exemple, en cas d'utilisation du format ISO-8601, l'horodatage d'un événement de visiteur
qui s'est produit le 17 novembre 2009 à 17h33, heure des Montagnes rocheuses (GMT-7:00:00), se présente comme
suit :
2009-11-17T17:33:22-07
Veuillez tenir compte des points suivants lors de l'envoi de données différées (horodatées) :
• lorsqu'une suite de rapports collecte des données horodatées, elle ne peut pas utiliser, pour ce faire, la méthode
de collecte des balises JavaScript standard.
• Vous devez activer la prise en charge de l'horodatage pour chaque suite de rapports.
• Lors de l'envoi de données différées de plus de 30 minutes, il ne doit y avoir aucune interruption dans la transmission
des données, sans quoi SiteCatalyst risque de ne pas les traiter comme une seule visite. SiteCatalyst peut traiter
les données différées comme des visites distinctes si l'interruption entre les lots de transmission est supérieure à
100 secondes.
• Vous pouvez également utiliser Sources de données pour envoyer ce type de données à la Suite de marketing
en ligne via FTP. Pour de plus amples informations, consultez le Guide de l'utilisateur des Sources de données.
HTTP 1.1
Les serveurs de collecte de données Adobe prennent en charge le protocole HTTP 1.1.
Avec HTTP 1.1, vous pouvez envoyer plusieurs requêtes POST dans une seule session. Lors de l'utilisation du
protocole HTTP 1.1, veuillez toutefois tenir compte des points suivants :
• lorsqu'une suite de rapports collecte des données horodatées, elle ne peut pas utiliser, pour ce faire, la méthode
de collecte des balises JavaScript standard.
• Les serveurs de collecte de données Adobe limitent le nombre de requêtes HTTP par session HTTP. Pour en tenir
compte, assurez-vous que votre application peut détecter les sessions fermées et y répondre de manière appropriée.
• Les serveurs de collecte de données Adobe respectent les règles HTTP 1.1 lors de la fragmentation du contenu.
Veillez à ce que votre application interprète correctement les nombres de fragmentation fournis dans la réponse
renvoyée par le serveur de la Suite de marketing en ligne à votre insertion de données. Par exemple, dans la
API d'insertion de données
7
réponse HTTP 1.1, les valeurs 68 et 0 sont des nombres de fragmentation représentant le nombre d'octets à lire
avant le fragment suivant.
TTP/1.1 200 OK Date: Thu, 07 Dec 2008 15:48:51 GMT Expires: Wed, 06 Dec 2008 15:48:51 GMT
Last-Modified: Fri, 08 Dec 2008 15:48:51 GMT Cache-Control: no-cache, no-store, must-revalidate,
max-age=0, proxy-revalidate, no-transform, private Pragma: no-cache ETag:
"457837E3-649A-4BBB9314" Vary: * P3P: policyref="/w3c/p3p.xml", CP="NOI DSP COR NID PSA OUR
IND COM NAV STA" Transfer-Encoding: chunked Content-Type: text/xml 68 <?xml version="1.0"
encoding="UTF-8"?> <status>FAILURE</status> <reason>NO pagename OR pageurl</reason> 0
Restrictions
Contrairement à la collecte de donnés côté client à l'aide de JavaScript, certaines restrictions s'appliquent à la
collecte de données côté serveur.
• Dans le cas de la collecte côté serveur, les données de configuration du navigateur Web ne peuvent pas être
collectées.
• Cette restriction s'applique également aux données ClickMap.
• Dans le cas de la collecte de données côté serveur, les données de navigation des pages en mémoire cache sont
perdues, car l'utilisation du bouton Précédent du navigateur Web ou le fait de recharger la page en cache ne génère
pas de requêtes ou de réponses supplémentaires du serveur. Cela limite les données de cheminement disponibles
pour les rapports SiteCatalyst.
• En règle générale, les robots n'exécutent pas JavaScript lors de la demande d'une page, pas plus qu'ils ne
demandent les balises d'image de la page. Cependant, la collecte de données côté serveur comprend des requêtes
en provenance de robots et de moteurs de balayage.
• Vous devez contrôler les serveurs à partir desquels vous souhaitez collecter les données. Si vous utilisez un réseau
CDN (Content Delivery Network) tel que Akamai* pour diffuser des pages Web, la collecte de données côté serveur
décrite ici ne peut pas collecter de données pour ces pages.
• Si vous contrôlez la plupart des pages de votre site Web, mais utilisez des services tiers (des systèmes de caddie
virtuel ou enquêtes, par exemple), la collecte de données côté serveur n'est pas en mesure de collecter des
données des pages tierces. Vous devez utiliser le balisage JavaScript sur les pages tierces qui demandent du
contenu de vos serveurs Web pour obtenir un aperçu de ces systèmes.
• Utilisée seule, la collecte de données côté serveur ne permet pas le suivi interdomaine des visiteurs du site. Vous
pouvez cependant utiliser la balise <visitorID> avec la collecte de données JavaScript côté client pour transmettre
des informations supplémentaires au serveur. Il s'agit là du seul moyen d'activer le suivi interdomaine à l'aide d'un
<visitorID>.
• La collecte de données côté serveur ne peut coexister avec une implémentation côté client (JavaScript) que si les
clients envoient des données côté serveur en temps quasi réel. Les clients disposant d'une implémentation de
balises JavaScript qui souhaitent collecter des données côté serveur et les envoyer par lots doivent utiliser, pour
ce faire, l'API Sources de données, et non Insertion de données.
Balises XML prises en charge
Lors du traitement d'envois de données HTTP POST, le moteur de traitement des données de SiteCatalyst traite
uniquement les valeurs situées dans les balises XML prises en charge, ignorant ainsi toutes les autres valeurs et
balises HTML.
Le tableau suivant répertorie l'ensemble des balises XML prises en charge, avec les variables JavaScript et les
variables d'en-tête HTTP équivalentes, le cas échéant.
API d'insertion de données
8
Variable
JavaScript
Variable d'en-tête
HTTP
<browserHeight>
S/O
S/O
Hauteur du navigateur en pixels (768, par
exemple).
<browserWidth>
S/O
S/O
Largeur du navigateur en pixels (1024, par
exemple).
<campaign>
campaign
S/O
Code de suivi de la campagne associé à
la page.
<channel>
channel
S/O
Titre de la page ou fil d'Ariane.
<colorDepth>
S/O
S/O
Profondeur de couleurs de l'écran en bits
(24, par exemple).
<connectionType>
S/O
S/O
Type de connexion du visiteur ("lan" ou
"modem").
<cookiesEnabled>
S/O
S/O
Indique si le visiteur prend en charge les
cookies de session directs (O ou N).
<currencyCode>
currencyCode
S/O
Code de devise des recettes (par
exemple : USD.
<domain>
S/O
S/O
Hôte de résolution de l'adresse IP du
visiteur.
<eVarn>
eVar1 - eVar50
S/O
Nom de variable eVar SiteCatalyst.
<events>
events
S/O
Liste d'événements SiteCatalyst.
<hiern>
hier1 - hier5
S/O
Chaîne de hiérarchie.
S/O
S/O
Indique si la page en cours est la page
d'accueil du visiteur (O ou N).
S/O
S/O
Adresse IP du visiteur.
S/O
S/O
Indique si Java est activé ou non sur
l'ordinateur du visiteur (O ou N).
Balise XML
Description
Par exemple, <eVar2>.
Par exemple, <hier2>.
<homePage>
<ipaddress> +
<javaEnabled>
API d'insertion de données
9
Variable
JavaScript
Variable d'en-tête
HTTP
Description
<javaScriptVersion>
S/O
S/O
Version de JavaScript. Par exemple : 1.3.
<language>
S/O
Accept-Language
Langue prise en charge par le navigateur.
Par exemple : "en-us".
<linkName>
linkName
S/O
Nom du lien.
<linkType>
linkType
S/O
Type de lien ("d", "e" ou "o").
<linkURL>
linkURL
S/O
HREF du lien. Dans le cas des liens
personnalisés, les valeurs de page sont
ignorées.
<mediaName>
mediaName
S/O
Nom du fichier multimédia. Utilisé lors du
suivi de contenu multimédia (vidéo) sur
une page Web. Pour plus d'informations,
consultez le Guide de mesure vidéo.
<mediaLength>
mediaLength
S/O
Durée en secondes du fichier multimédia.
<mediaPlayer>
mediaPlayer
S/O
Nom du lecteur utilisé pour lire le fichier
multimédia.
<mediaSession>
mediaSession
S/O
Liste des segments vidéo lus, délimités
par une barre verticale "|", exprimés en
secondes. Par exemple, 0-15|20-25 décrit
une session de lecture multimédia au cours
de laquelle le visiteur :
Balise XML
- A commencé la lecture du fichier
multimédia au décalage 0 (au début) et l'a
poursuivie jusqu'à la quinzième seconde
- A passé les secondes 16-19 (en sautant
vers l'avant, en faisant défiler, en utilisant
l'avance rapide, etc.) - A arrêté la lecture
du fichier multimédia après 25 secondes
(en cliquant sur Arrêt, en fermant le lecteur
vidéo, en accédant à une autre page Web,
etc.)
<pageName> +
pageName
S/O
Nom de la page Web.
API d'insertion de données
10
Variable
JavaScript
Variable d'en-tête
HTTP
pageType
S/O
Type de la page Web. Utilisé uniquement
sur les pages d'erreur 404. Définissez le
paramètre PageType sur "Page d'erreur"
en cas de détection d'une erreur 404.
pageURL
S/O
URL de page Web Par exemple :
http://www.mysite.com/index.html.
<plugins>
S/O
S/O
Liste de noms des modules
complémentaires Netscape séparés par
des points-virgules.
<products>
products
S/O
Liste de tous les produits sur la page.
Séparez les produits à l'aide d'une virgule.
Par exemple : Sports;Ballon;1;5.95, Jouets;
Haut;1:1.99.
prop1 - prop50
S/O
Nom de propriété SiteCatalyst.
<purchaseID>
purchaseID
S/O
ID d'achat.
<referrer>
S/O
S/O
URL du référent de la page.
s_account
S/O
Indique les suites de rapports auxquelles
vous souhaitez envoyer des données.
Séparez les ID à l'aide d'une virgule.
<resolution>
S/O
S/O
Résolution de l'écran (1280x1024, par
exemple).
<scXmlVer>
S/O
S/O
Numéro de version de la demande XML
SiteCatalyst. Par exemple : 1.0.
<server>
server
S/O
Serveur Web d'où provient la page.
<state>
state
S/O
Etat américain dans lequel réside un
visiteur.
<timestamp>
timestamp
S/O
Date et heure de la collecte des données.
Balise XML
<pageType>
<pageURL> +
<propn> Par exemple,
Description
<prop2>
<reportSuiteID> +
API d'insertion de données
11
Variable
JavaScript
Variable d'en-tête
HTTP
<timezone>
S/O
S/O
Ecart de fuseau horaire du visiteur par
rapport à GMT en heures. Par exemple :
-8.
<transactionID>
transactionID
S/O
Valeur couramment utilisée pour
interconnecter les activités utilisateur
multicanaux en vue de la création de
rapports. Pour de plus amples
informations, consultez le Guide de
l'utilisateur des Sources de données.
<userAgent>
S/O
User-Agent
Système d'exploitation et type de
navigateur du système d'exploitation.
S/O
S/O
Cookie d'identification unique du visiteur.
Reportez-vous à la section "Informations
sur le visiteur" dans "Présentation de l'API
d'insertion de données".
zip
S/O
Code postal du visiteur.
Balise XML
<visitorID> ++
<zip>
Description
+ Chaque insertion de données XML nécessite cette balise XML.
++ Chaque insertion de données XML doit inclure <pageName> et/ou <pageURL>. Chaque insertion de données XML
doit inclure <visitorID> et/ou <IPaddress>.
Codes de réponse POST
L'API d'insertion de données prend en charge ces messages de réponse aux opérations HTTP POST.
Le tableau suivant répertorie l'ensemble des balises XML prises en charge, avec les variables JavaScript et les
variables d'en-tête HTTP équivalentes, le cas échéant.
Les messages de réponse peuvent vous aider à comprendre et corriger le problème.
Réponse POST
Description
<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0"
encoding="UTF-8"?><status>SUCCESS</status>
Réussite (général)
<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0"
encoding="UTF-8"?><status>FAILURE</status>
Echec (général)
<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0"
encoding="UTF-8"?><status>FAILURE</status> <reason>NO
account</reason>
Echec (identifiant de suite de rapports
obligatoire manquant)
API d'insertion de données
Réponse POST
12
Description
<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0"
Echec (URL ou nom de page
encoding="UTF-8"?><status>FAILURE</status> <reason>NO pagename
obligatoire manquant)
OR pageurl</reason>
<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0"
encoding="UTF-8"?><status>FAILURE</status> <reason>NO
visitorid OR ipaddress</reason>
<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0"
encoding="UTF-8"?><status>FAILURE</status> <reason>Syntax
Error</reason>
Echec (adresse IP ou identifiant de
visiteur obligatoire manquant)
Echec (erreur de syntaxe : comprend
les caractères réservés non encodés,
la syntaxe XML malformée, etc.)
Exemple de code
L'API d'insertion de données comprend les exemples de code ci-dessous.
Note: N'effectuez pas de copier-coller de ces exemples de code. Ils utilisent, en effet, des valeurs génériques
que vous devez remplacer par des données valides adaptées à votre application.
Exemple POST HTTP
Cet exemple présente la structure d'une demande et d'une réponse POST HTTP à l'aide de l'API d'insertion de
données.
Note: N'effectuez pas de copier-coller de ces exemples de code. Ils utilisent, en effet, des valeurs génériques
que vous devez remplacer par des données valides adaptées à votre application.
Le paramètre [rsid] identifie la suite de rapports à laquelle vous souhaitez envoyer les données. Les autres valeurs,
telles que PageURL, sont données uniquement à titre d'exemple.
Demande POST HTTP 1.0
POST /b/ss//6 HTTP/1.0
Host: [rsid].112.2o7.net
Content-Length: 593
<?xml version=1.0 encoding=UTF-8?>
<request>
<sc_xml_ver>1.0</sc_xml_ver>
<pageURL>apps.sillystring.com/summary.do</pageURL>
<referrer>http://apps.sillystring.com/summary.do</referrer>
<ipAddress>192.168.10.1</ipAddress>
<pageName>summary</pageName>
<eVar2>14911</eVar2>
<userAgent>Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727;
Media Center PC 5.0; .NET CLR 3.0.04506)</userAgent>
<prop10>Brazil</prop10>
<visitorID>1286556420966514130</visitorID>
<timestamp>2009-03-05T01:00:01-05</timestamp>
<reportSuiteID>[rsid]</reportSuiteID>
</request>
API d'insertion de données
13
Réponse POST HTTP
HTTP/1.1 200 OK
Date: Wed, 13 May 2009 16:26:47 GMT
X-C: ms-3.7.2
Expires: Tue, 12 May 2009 16:26:47 GMT
Last-Modified: Thu, 14 May 2009 16:26:47 GMT
Cache-Control: no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform,
private
Pragma: no-cache
ETag: "4A0AF4C7-08E1-37C7F492"
Vary: *
P3P: policyref="/w3c/p3p.xml", CP="NOI DSP COR NID PSA OUR IND COM NAV STA"
xserver: www79
Connection: close
Content-Type: text/xml
<?xml version="1.0" encoding="UTF-8"?>
<status>SUCCESS</status>
Demande POST HTTP 1.1
POST /b/ss//6 HTTP/1.1
Host: [rsid].112.2o7.net
Keep-Alive: timeout=15
Connection: Keep-Alive
Content-Length: 593
<?xml version=1.0 encoding=UTF-8?>
<request>
<sc_xml_ver>1.0</sc_xml_ver>
<pageURL>apps.sillystring.com/summary.do</pageURL>
<referrer>http://apps.sillystring.com/summary.do</referrer>
<ipAddress>192.168.10.1</ipAddress>
<pageName>summary</pageName>
<eVar2>14911</eVar2>
<userAgent>Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727;
Media Center PC 5.0; .NET CLR 3.0.04506)</userAgent>
<prop10>Brazil</prop10>
<visitorID>1286556420966514130</visitorID>
<timestamp>2009-03-05T01:00:01-05</timestamp>
<reportSuiteID>[rsid]</reportSuiteID>
</request>
Réponse POST HTTP 1.1
HTTP/1.1 200 OK
Date: Wed, 13 May 2009 16:25:12 GMT
X-C: ms-3.7.2
Expires: Tue, 12 May 2009 16:25:12 GMT
Last-Modified: Thu, 14 May 2009 16:25:12 GMT
Cache-Control: no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform,
private
Pragma: no-cache
ETag: "4A0AF468-4DF2-33AE9089"
Vary: *
P3P: policyref="/w3c/p3p.xml", CP="NOI DSP COR NID PSA OUR IND COM NAV STA"
xserver: www116
Keep-Alive: timeout=15
Connection: Keep-Alive
Content-Length: 40
Content-Type: text/xml
<?xml version="1.0" encoding="UTF-8"?>
<status>SUCCESS</status>
API d'insertion de données
14
Exemple GET HTTP
Cet exemple présente la structure d'une demande et d'une réponse GET HTTP à l'aide de l'API d'insertion de
données.
Le paramètre [rsid] identifie la suite de rapports à laquelle vous souhaitez envoyer les données. Les autres valeurs,
telles que PageURL, sont données uniquement à titre d'exemple.
Note: N'effectuez pas de copier-coller de ces exemples de code. Ils utilisent, en effet, des valeurs génériques
que vous devez remplacer par des données valides adaptées à votre application.
Demande GET HTTP 1.0
GET /b/ss/[rsid]/0?g=apps.sillystring.com%2Fsummary.do&r=http%3A%2F%2Fapps.sillystring.com%
2Fsummary.do&ip=192.168.10.1&gn=
summary&v2=14911&c10=Brazil&vid=1286556420966514130&ts=2009-03-05T01%3A00%3A01-05 HTTP/1.0
Host: [rsid].112.2o7.net
X-Forwarded-For: 192.168.10.1
Réponse GET HTTP 1.0
HTTP/1.0 200 OK
Date: Wed, 13 May 2009 16:26:47 GMT
X-C: ms-3.7.2
Expires: Tue, 12 May 2009 16:26:47 GMT
Last-Modified: Thu, 14 May 2009 16:26:47 GMT
Cache-Control: no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform,
private
Pragma: no-cache
ETag: "49F5FD79-3E44-38021808"
Vary: *
P3P: policyref="/w3c/p3p.xml", CP="NOI DSP COR NID PSA OUR IND COM NAV STA"
xserver: www83
Connection: close
Content-Type: text/html
Demande GET HTTP 1.1
GET /b/ss/[rsid]/0?g=apps.sillystring.com%2Fsummary.do&r=http%3A%2F%2Fapps.sillystring.com%
2Fsummary.do&ip=192.168.10.1&gn=summary&v2=14911&c10=Brazil&vid=1286556420966514130&ts=2009-03-05T01%3A00%3A01-05
HTTP/1.1
Host: [rsid].112.2o7.net
Keep-Alive: timeout=15
Connection: Keep-Alive
X-Forwarded-For: 192.168.10.1
Réponse GET HTTP 1.1
HTTP/1.1 200 OK
Date: Mon, 19 Oct 2009 17:26:24 GMT
Server: Omniture DC/2.0.0
X-C: ms-4.1.3
Expires: Thu, 01 Jan 1970 00:20:55 GMT
Last-Modified: Thu, 01 Jan 1970 00:20:56 GMT
Cache-Control: no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform,
private
Pragma: no-cache
ETag: "4ADCA140-6E16-1FADA4C7"
Vary: *
P3P: policyref="/w3c/p3p.xml", CP="NOI DSP COR NID PSA OUR IND COM NAV STA"
xserver: www176
Content-Length: 43
Keep-Alive: timeout=15
API d'insertion de données
15
Connection: Keep-Alive
Content-Type: image/gif
Exemple d'insertion de données (PHP)
Cet exemple PHP illustre la connexion aux serveurs de collecte de données Adobe et l'enregistrement d'un affichage
de page.
<?/
**
* @file
* Example code to send one pageview to Omniture via the Data Insertion API
*
and check for a valid response.
*
* @author Omniture, an Adobe Company <[email protected]>
* @copyright 2007-2010 Adobe Systems, Inc. All Rights Reserved.
*/
// NOTE: Contact an ClientCare to identify the correct namespace and domain for your company.
$namespace
$domain
$host
$rsid
$vid
$ip
$page_url
$pageName
$timestamp
=
=
=
=
=
=
=
=
=
"namespace";
"112.2o7.net";
$namespace.".".$domain;
"rsid";
"";
"10.0.0.1";
"";
"Test Page";
"2008-10-21T17:33:22-07";
// create opening XML tags
$xml = "<?xml version=1.0 encoding=UTF-8?>\n";
$xml .= "<request>\n";
$xml .= " <scXmlVer>1.0</scXmlVer>\n";
// add tags for required elements
$xml .= $rsid ? " <reportSuiteID>$rsid</reportSuiteID>\n":"";
//The timestamp line of code can only be used when an Omniture representitive has enabled
timestamp support for your organization.
$xml .= $timestamp ? " <timestamp>$timestamp</timestamp>\n":"";
$xml .= $vid ? " <visitorID>$vid</visitorID>\n":"";
$xml .= $ip ? " <ipAddress>$ip</ipAddress>\n":"";
$xml .= $page_url ? " <pageURL>$page_url</pageURL>\n":"";
$xml .= $pageName ? " <pageName>$pageName</pageName>\n":"";
// close the XML request
$xml .= "</request>\n";
// Create POST, Host and Content-Length headers
$head = "POST /b/ss//6 HTTP/1.0\n";
$head .= "Host: $host\n";
$head .= "Content-Length: ".(string)strlen($xml)."\n\n";
// combine the head and XML
$request = $head.$xml;
$fp=fsockopen($host,80,$errno,$errstr,30);
// Use this function in place of the call above if you have PHP 4.3.0 or
//
higher and have compiled OpenSSL into the build.
//
// $fp = pfsockopen("ssl://".$host, 443, $errno, $errstr);
//
if( $fp ) {
// send data
fwrite($fp,$request);
API d'insertion de données
16
// get response
$response="";
while( !feof($fp) ){
$response .= fgets($fp,1028);
}
fclose($fp);
// display results
echo "RESULTS:\n";
print_r($response);
echo "\n";
// check for errors
if( preg_match("/status\>FAILURE\<\/status/im",$response) ){
/*
* TODO:
* write $request and $response to log file for investigation
* and retries
*/
echo "<h1>Failure</h1>\n";
echo "<p>Note the reason tag in the response, fix and try again.</h1>\n";
}
} else {
echo "<H1>Couldn't open port to SiteCatalyst servers</H1>\n";
if(!$rsid){
echo "<H4>No report suite specified</H4>\n";
} else {
echo "<p>$errstr ($errno)</p>\n";
/*
* TODO:
* write $request and $errstr to log file for investigation
* and retries
*/
}
}
?>
Exemple d'insertion de données (Java)
Cet exemple Java illustre l'utilisation de classes Java pour envoyer une demande XML.
Cet exemple définit l'adresse IP, le nom de la page et des variables personnalisées.
DataSubmission.java
package com.omniture;
import java.util.ArrayList;
import java.util.Iterator;
public class DataInsertion
{
private String rptSuiteID
private String visitorID
private StringBuffer buff
private ArrayList<String> request
= null;
= null;
= null;
= new ArrayList<String>();
public DataInsertion( String rsid, String vid )
{
this.rptSuiteID
= rsid;
this.visitorID
= vid;
}
public String toString()
{
buff
= new StringBuffer();
buff.append( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" );
buff.append( "<request>\n" );
API d'insertion de données
17
buff.append( "<sc_xml_ver>1.0</sc_xml_ver>\n" );
if( this.rptSuiteID != null )
buff.append( this.tagify( "reportsuiteid", this.rptSuiteID ) );
if( this.visitorID != null )
buff.append( this.tagify( "visitorid", this.visitorID ) );
Iterator iter = this.request.iterator();
while( iter.hasNext() )
{
buff.append( iter.next() );
}
buff.append( "</request>\n" );
return buff.toString();
}
private String tagify( String name, String value )
{
return "<" + name + ">" + value + "</" + name + ">\n";
}
private String tagify( String name, char value )
{
return "<" + name + ">" + value + "</" + name + ">\n";
}
public void set( String tag, String value )
{
this.request.add( this.tagify(tag, value) );
}
public void set( String tag, char value )
{
this.request.add( this.tagify(tag, value) );
}
}
DataSubmission.java
package com.omniture;
import
import
import
import
import
java.io.BufferedReader;
java.io.DataOutputStream;
java.io.InputStreamReader;
java.net.URL;
java.net.URLConnection;
public class DataInsertionRequest
{
public static void main(String[] args) throws Exception
{
DataInsertion di = new DataInsertion( "test", "123456" );
di.set( "ipaddress", "127.0.0.1" );
di.set( "pagename", "Test Page" );
di.set( "channel", "Tests" );
di.set( "prop1", "All" );
di.set( "eventList", "event1" );
di.set( "evar2", "Test Page" );
di.set( "evar3", "Test Page" );
di.set( "evar4", "Test Page" );
di.set( "hier1", "Test|Test Page|All" );
URL url = null;
URLConnection urlConn
DataOutputStream printout
= null;
= null;
API d'insertion de données
18
BufferedReader input
= null;
String u
= "http://namespace.112.2o7.net/b/ss/ll/6";
String tmp
= null;
url = new URL( u );
urlConn = url.openConnection();
urlConn.setDoInput( true );
urlConn.setDoOutput( true );
urlConn.setUseCaches( false );
urlConn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded"
);
printout
= new DataOutputStream(urlConn.getOutputStream());
printout.writeBytes( di.toString() );
printout.flush();
printout.close();
input
= new BufferedReader( new InputStreamReader( urlConn.getInputStream(
) ) );
System.out.println( di );
while( null != ( ( tmp = input.readLine() ) ) )
{
System.out.println( tmp );
}
printout.close();
input.close();
}
}
Exemple d'insertion de données (Python)
Cet exemple Python illustre l'accès à l'API d'insertion de données.
import httplib
xml='<?xml version="1.0" encoding="UTF-8"?>
<request> <scXmlVer>1.0</scXmlVer>
<reportSuiteID>Corp1_rs</reportSuiteID>
<timestamp>2010-03-20T10:33:22-07</timestamp> <visitorID>169</visitorID>
<ipAddress>10.0.0.1</ipAddress> <pageName>Test Page</pageName></request>'
conn = httplib.HTTPConnection("namespace.112.2o7.net:80")
conn.request("POST", "/b/ss//6",xml )
response = conn.getresponse()
print(response.status, response.reason)
print(response.read())