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é |