Séance 2 : formats de données¶
Introduction¶
Motivation¶
Lors de la séance précédente, vous avez utilisé des expressions régulières pour analyser le contenu des pages.
laborieux
limité au HTML
fragile
Type de contenu¶
Présentation¶
Il existe une taxonomie standard des formats de données, appelés types de contenu (media types).
Ces types de contenu ont une structure à deux niveaux ; exemples :
text/html
text/plain
image/png
audio/mpeg
video/H264
application/pdf
Type de contenu d’un message HTTP¶
Tout message HTTP qui comporte un contenu doit spécifier son format,
à l’aide de l’en-tête Content-Type
.
Content-Type: text/html; charset=utf-8
Négociation de contenu¶
Dans la requête,
le client peut indiquer au serveur les types de contenu qu’il est capable de traiter,
à l’aide du champs Accept
.
Accept: text/html,application/xhtml+xml,
application/xml;q=0.9,*/*;q=0.8
Le verbe HEAD
¶
Lorsqu’on est intéressé uniquement par les en-têtes, et pas par le contenu,
on peut utiliser le verbe HEAD
au lieu du verbe GET
.
Formats usuels¶
HTML : text/html
¶
Format documentaire, surtout destiné à l’affichage.
Sauf pour les serveurs qui ne fournissent que ce format, on lui préférera des formats plus adaptés au traitement automatique.
XML : application/xml
¶
Peut être vu comme une extension de HTML, autorisant n’importe quelle balise :
<commande no="12345">
<client no="678-789"/>
<articles>
<article code="ab12">
<quantité>2</quantité>
<prix>10.10</prix>
</article>
<article code="cd34">
<quantité>7</quantité>
<prix>42.00</prix>
</article>
</articles>
</commande>
XML en Java¶
Disponible en standard : javax.xml.parsers.
DocumentBuilder db =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = db.parse(inputStream, urlString);
JSON¶
Sous-ensemble de Javascript, limité à la description de données :
{
"no_commande": "12345",
"no_client": "678-789",
"articles": [
{
"code": "ab12",
"quantite": 2,
"prix": 10.10
},
{
"code": "cd34",
"quantite": 7,
"prix": 42.10
}
]
}
Votre travail¶
Votre travail¶
Améliorez le programme de la séance précédente :
en remplaçant les expression régulières par un véritable parser HTML (par exemple JSoup) ;
en vérifiant si l’URL passée au programme retourne bien du HTML, et en ne comptant les liens que dans ce cas ;
en utilisant le verbe
HEAD
(au lieu deGET
) pour vérifier la validité des liens ;en affichant le nombre de liens valides par grande catégorie de contenu (
text
,image
,audio
…).