Chapitre 7
ACTUALITE DANS UN SITE INTERNET
 
 
Précédent Suivant
 

Actualité dans un site Internet
Comment informer les visiteurs ?
* Les visiteurs ne viennent pas toujours régulièrement sur le site
* Nécessité de les informer rapidement
* Moyen classique: le bulletin d'information
* Envoi d'un courrier à l'adresse du visiteur
* Nécessite une inscription
* Nouveau moyen: la syndication ou flux d'actualité
* Page actualité disponible sur le site
* Outil de récupération automatique
* Pas d'inscription, il suffit de marquer la page
* Le client est informé en permanence
* Il lui suffit de regarder l'information qu'il reçoit
* Pas besoin de penser à aller sur le site
* Il peut centraliser toutes ses sources d'actualité
Bulletin d'information ou newsletter
* Equivalent électronique au bulletin d'information classique
* Envoi à l'adresse électronique de la personne
* Mécanisme d'inscription indispensable
* Utilisation de son adresse électronique
* Procédure de vérification de l'utilisateur
* Eviter l'inscription automatique par robot
* Utiliser un CAPTCHA et/ou l'envoi d'un email de confirmation
* Procédure de désinscription très simple
* Eviter qu'on vous considère comme site spammeur
* Problème des logiciels antispam
* Beaucoup de newsletters sont considérées comme spam
* Les gens ne se désinscrivent pas
==> les robots référencent l'émetteur comme spammeur
* Proposer la désinscription systématiquement dans l'email
* Mettre un mot-clé dans le sujet de l'email
* Exemple: [INFOCINE] Sortie du film...
* Permet à l'utilisateur de créer facilement un filtre
Envoi d'un message électronique
Envoi d'une newsletter
Serveur SMTP intranet
Serveur SMTP extérieur
Serveur SMTP local
Envoi d'email par PHP
* boolean mail(string $destinataire,string $sujet,
string $message,string $entetes)
* $destinataire: adresse électronique du destinataire
* $sujet: sujet du message
* $message: corps du message
* $entetes: entêtes du message
* Adresse de l'expéditeur
* Adresse de retour
* Type de contenu
* Certains fournisseurs désactivent cette fonctionnalité
* Permet d'éviter certaines formes de spam
* D'autres proposent leur propre fonction
* Mécanisme similaire
Construction des messages
* Message = entêtes + corps
* Format d'un entête
* nom_entête: contenu_entête
* Attention à la casse dans le nom des entêtes
* Exemple
<?php
$entetes = "From: bruno@nawouak.net\n";
$entetes .= "Reply-To: bruno@nawouak.net\n";
$message = "Salut !\n\n";
$message .= "Je teste l'envoi d'email par PHP.\n";
$message .= "Confirme-moi que ça fonctionne.\n\n";
$message .= "Ciao !";
mail("copain@gmail.com","Test PHP",$message,$entetes);
?>
Entête des messages
* Entête "From"
* Adresse expéditeur
* Personnalisation: "Bruno Bachelet" bruno@nawouak.net
* N'est pas forcément réelle
* Entête "To"
* Adresse(s) destinataire(s)
* Séparées par une virgule
* Entête "Reply-To"
* Adresse réponse
* Par défaut, celle de "From"
* Entête "Cc"
* Carbon Copy
* Adresse(s) destinataire(s) d'une copie du message
* Séparées par une virgule
* Entête "Bcc"
* Blind Carbon Copy
* Adresse(s) destinataire(s) caché(s) d'une copie du message
Message au format HTML
* Entête "Content-Type"
* Type (MIME) du contenu de l'email
* Jeu de caractères utilisé
* Texte simple
* Content-Type: text/plain; charset="iso-8859-1"
* Contenu HTML
* Content-Type: text/html; charset="iso-8859-1"
* Exemple de message HTML
<?php
$entetes = "From: bruno@nawouak.net\n";
$entetes .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
$message_html = "<html><body><p><b>Salut !</b></p>";
$message_html .= "<p>Je teste le format HTML cette fois.</p>";
$message_html .= "<p>Ciao !</p></body></html>";
mail("copain@gmail.com","Test HTML",$message_html,$entetes);
?>
Message composé
* Frontière entre les parties du message
* Chaîne de caractères aléatoire
* $frontiere = "-----=".md5(uniqid(rand()));
* Utilisation du format MIME 1.0
* $entetes .= "MIME-Version: 1.0\n";
* Message composé d'alternatives
* $entetes .= "Content-Type: multipart/alternative;
boundary=\"$frontiere\"\n";
* Message composé de plusieurs fichiers
* $entetes .= "Content-Type: multipart/mixed;
boundary=\"$frontiere\"\n";
* Séparation des fichiers par la frontière
$message = "This is a multi-part message in MIME format.\n\n";
$message .= "--".$frontiere."\n";
$message .= $entete1."\n\n".$message1."\n\n";
$message .= "--".$frontiere."\n";
$message .= $entete2."\n\n".$message2."\n\n";
$message .= "--".$frontiere."--\n";
Envoyer une pièce jointe
* Message électronique = texte
* Fichiers binaires ==> fichiers texte
* Appliquer une fonction d'encodage
* Indiquer dans le message quel encodage
* Encodage "base64"
$chemin = "image/logo.gif";
$fichier = fopen($chemin,"rb");
$contenu = fread($fichier,filesize($chemin));
fclose($fichier);
$contenu_encode = chunk_split(base64_encode($contenu));
* Entête "Content-Transfer-Encoding"
* Texte
$entete .= "Content-Transfer-Encoding: 8bit\n\n";
* Binaire encodé
$entete .= "Content-Transfer-Encoding: base64\n\n";
* Nom et type du fichier
$entete .= "Content-Type: image/gif; name=\"logo.gif\"\n";
* Syntaxe d'une pièce jointe
$message .= "--".$frontiere."\n";
$message .= $entete."\n\n".$contenu_encode."\n\n";
Envoi de messages
* Envoyer une newsletter à une liste d'abonnés
* On suppose un champ "abonné" dans la base "utilisateur"
* Proposer un formulaire pour saisir le message
* Ecrire le code PHP qui crée le message et l'envoie aux abonnés
* Envoyer un message HTML ou texte
* On veut envoyer un message en HTML
* On propose une version alternative en texte
* Ecrire le code PHP qui génère le message au bon format
* Envoyer une pièce attachée
* On veut envoyer un fichier PDF
* Type MIME: application/pdf
* On suppose qu'il est stocké sur le serveur
* Il sera accompagné d'un message texte
* Ecrire le code PHP qui génère le message au bon format
Syndication ou flux d'actualité
* Syndication: rendre disponible à d'autres de l'information
* Utilisée pour diffuser des actualités
* Des sites peuvent les afficher
* Des logiciels peuvent les récupérer: "feed reader"
* Un nouveau moyen d'informer les gens
* Pas d'inscription des utilisateurs
* Récupération automatique par logiciel
* Fréquence choisie par l'utilisateur
* Possibilité de centraliser l'actualité de plusieurs sources
* Deux formats basés sur le langage XML
* RSS: Really Simple Syndication
* Atom: proche de RSS, mais format libre
Principe du flux d'actualité
Exemple de lecteur: le plugin "Sage"
Le langage XML
* HTML: HyperText Markup Language
* Langage à balise
* XML: eXtensible Markup Language
* Langage à balise
* Extensible: ajout infini de nouvelles balises
* Création de son propre langage
* Objectif: séparer les données de la manière de les représenter
* XHTML: eXtensible HyperText Markup Language
* Successeur de HTML
* Langage formulé à partir de XML
* Première version: reformulation de HTML en XML
Structure du langage XML
* XML
* Langage sous forme de balises
* Langage générique permettant de définir son propre langage
* Format XML
* Contient des éléments
* Un élément peut contenir d'autres éléments
* Un élément peut posséder des attributs
* Balise = élément
* <balise>valeur balise</balise>
* Contrairement à HTML, toutes les balises sont fermées
* "/" représente la fermeture d'une balise
* <balise> seule est interdite en XML
* Il faut impérativement <balise/>
* Attribut
* <balise attribut="valeur attribut">valeur balise</balise>
* <balise attribut="valeur attribut"/>
Exemple de langage formulé avec XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<biblio>
<ouvrage type="thriller">
<titre>Dragon rouge</titre>
<auteur>Harris, Thomas</auteur>
</ouvrage>
<ouvrage type="science fiction">
<titre>Contact</titre>
<auteur>Sagan, Carl</auteur>
</ouvrage>
<ouvrage type="roman">
<titre>Et si c'était vrai</titre>
<auteur>Lévy, Marc</auteur>
</ouvrage>
</biblio>
Comment exploiter un fichier XML ?
* DTD: Document Type Definition
* Décrit le langage formulé avec XML
* Nécessaire pour vérifier la syntaxe du fichier
* Pas obligatoire pour la représentation des données
* XML = fichier texte
* Tout logiciel peut exploiter les données
* XSLT: eXtended Stylesheet Language Transformations
* Langage formulé avec XML
* Permet de transformer un fichier XML
* Par exemple, transformation en HTML
* Exemple simple de transformation avec XSLT
* <xml:template match="nom">
<em><x:apply-templates/></em>
</x:template>
* Balise <nom> transformée en balise <em>
Génération de XML avec PHP
<?php
header("Content-type: application/xml");
echo "<?xml version='1.0' encoding='ISO-8859-1'?>";
echo "<biblio>";
if (@mysql_connect("localhost","root","")) {
if (@mysql_select_db("bibliotheque")) {
$requete="SELECT * FROM ouvrage";
$result=@mysql_query($requete);
while ($enr=@mysql_fetch_object($result)) {
echo "<ouvrage type='$enr->type'>";
echo "<titre>$enr->titre</titre>";
echo "<auteur>$enr->auteur</auteur>";
echo "</ouvrage>";
}
}
}
echo "</biblio>";
?>
Base de données pour le cinéma
* Fichier XML = base de données
* Ne nécessite pas d'application serveur
* Mise à jour de la base = modification du fichier
* Possibilité par PHP
* Moins efficace qu'une base SQL
* Retour au site collaboratif pour le cinéma
* Proposer un format XML pour stocker les données
* Pour les films, les professionnels et les rôles
* Pour les salles et les séances
Exemple de flux RSS
<rss version="2.0">
<channel>
<title>Mon site</title>
<description>Ceci est un exemple de flux RSS</description>
<pubDate>Wed, 27 Jul 2005 00:30:30 -0700</pubDate>
<link>www.monsite.fr</link>
<item>
<title>Actualité No1</title>
<description>Ceci est ma première actualité</description>
<pubDate>Wed, 25 Jul 2005 00:30:30 -0700</pubDate>
<link>www.monsite.fr/actu1</link>
</item>
<item>
<title>Actualité No2</title>
<description>Ceci est ma deuxième actualité</description>
<pubDate>Tue, 19 Jul 2005 04:32:51 -0700</pubDate>
<link>www.monsite.fr/actu2</link>
</item>
</channel>
</rss>
Diffusion d'un flux RSS
* Informer le navigateur de la présence d'un flux RSS x
* Placer l'adresse du flux dans l'entête de chaque page
* <link rel="alternate"
type="application/rss+xml" title="RSS 2.0"
href="http://www.monsite.fr/fluxrss.php"/>
* Une icône doit apparaître dans le navigateur
* Cliquer dessus pour mémoriser le lien
* Génération du flux RSS
* Format de la date de publication avec PHP
* Fonction date("D, d M Y H:i:s +0100")
* Interrogation de PHP à intervalle régulier ==> surcharge serveur
* Possibilité de mise en cache de la page PHP
* Autre solution, créer un fichier XML sur le serveur
* Lien direct sur le fichier XML
* Actualisation du fichier à chaque ajout d'actualité