Si vous recevez ces courriels BBC quotidien trop, alors vous aurez remarqué qu'ils sont assez redondants. Une nouvelle qui apparaît dans le "TOP STORIES" catégorie, par exemple, peuvent aussi apparaître dans la région "Afrique" catégorie. En fait, il n'est pas rare de trouver la même question dans deux ou trois catégories.

Voici un script PHP qui accepte un email quotidien BBC news et les résultats d'une page dans laquelle chaque article est cotée une seule fois.
Pour utiliser ce script, il suffit d'ouvrir dans un navigateur, et copier et coller tout un quotidien BBC email dans le formulaire de la zone de texte et appuyez sur le bouton "soumettre".

Ce script utilise la Finite State Machine de classe qui est disponible à http://pear.php.net/package/FSM/docs/latest/FSM/FSM.html.

<? php
require_once 'FSM.php';
étend la classe FSM_1 FSM (
fonction setPayload (charge utile) ($ this-> = $ _payload charge;)
getPayload fonction () (return $ this -> _payload;)
)
fonction SectionName (symbole $, $ charge) ($ charge = "Section:";)
fonction ItemTitle (symbole $, $ charge) ($ charge = "Titre:";)
fonction ItemSummary (symbole $, $ charge) ($ charge = "Summary:";)
fonction ItemURL (symbole $, $ charge) ($ charge = "URL:";)
$ stack = array ();
$ f = new FSM_1 ( 'ATTENTE', $ stack);
$ f -> setDefaultTransition (null, 'attente');
$ f -> addTransition ( '.', 'attente', 'SECTION_NAME', null);
$ f -> addTransitionAny ( 'SECTION_NAME', 'DELIM_OR_ITEM_TITLE', 'SectionName');
$ f -> addTransition ( '*', 'DELIM_OR_ITEM_TITLE', 'ITEM_SUMMARY', 'ItemTitle');
$ f -> addTransition ( '.', 'DELIM_OR_ITEM_TITLE', 'SECTION_NAME', null);
$ f -> addTransitionAny ( 'DELIM_OR_ITEM_TITLE', 'ITEM_TITLE', 'SectionName');
$ f -> addTransitionAny ( 'ITEM_SUMMARY', 'ITEM_Ignore', 'ItemSummary');
$ f -> addTransitionAny ( 'ITEM_TITLE', 'ITEM_Ignore', null);
$ f -> addTransitionAny ( 'ITEM_Ignore', 'ITEM_URL', null);
$ f -> addTransitionAny ( 'ITEM_URL', 'DELIM_OR_ITEM_TITLE', 'ItemURL');
if ($ _POST [ 'submitid'] == 1) (
$ titres = array ();
$ ignore = 0;
foreach (explode ( "\ n", $ _POST [ 'news']) as $ ligne) (
$ ligne = trim ($ line);
if ($ line =='') (continue;)
$ f -> setPayload ('');
$ f -> processus (substr ($ line, 0, 1));
$ charge = $ f -> getPayload ();
if ($ charge utile! ='') (
if ($ charge == 'article: "et $ line ==' OPTIONS ET AIDE ') (break;)
if ($ charge == 'Titre:') (
if (in_array ($ line, $ titres)) ($ ignore = 1;)
else (
$ ignore = 0;
array_push ($ titres, $ line);
)
)
if ($ ignorer == 0) (
if ($ charge == 'Titre:') (echo stripslashes ($ line). "<br/> \ n";)
if ($ charge == 'Résumé:') (echo stripslashes ($ line). "<br/> \ n";)
if ($ charge == 'URL:') (echo "<a href = '". $ ligne. "Target =" _blank ">". $ ligne. "</ a> <p/> \ n";)
)
)
)
echo "<p/> \ n";
)
?>
<form action = "<? echo $ _SERVER [ 'PHP_SELF'];?>" method =" post "name =" adminlogin "id =" adminlogin "style =" display: inline; ">
<textarea name="news" id="news" rows="20" cols="200"> </ textarea> <br/>
name="Submit" <input type="submit" id="Submit" value="Submit">
name="submitid" <input type="hidden" id="submitid" value="1"/>
</ form>

Voici quelques notes sur la façon dont cela fonctionne:

Heureusement, les lignes de la BBC, les messages sont dans une séquence en particulier, et simplement ce qui se reflète dans la collection de règles de transition.

Quand une règle de transition se traduit par un appel à une fonction comme SectionName, indiquant que le nom de section (tel que "Top Stories») a été reconnue, la fonction des signaux de ce fait en mettant $ charge en conséquence. J'ai étendu la classe de base afin que la charge utile de $ qui est mis à la disposition de ces fonctions est également disponible pour les codes qui instancie la classe étendue.

Le résultat est que chaque fois que la ligne est lue à partir de la e-mail tous les jours, il est passé à la (extended) FSM pour la reconnaissance, puis traitées en conséquence.

Un point mineur: Le "cols" pour la mise en forme textarea mai semblent excessivement large. Elle est fixée de cette façon afin que les lignes de l'adresse e-mail ne sont pas pliées, de sorte que l'analyse n'est pas effectuée inutilement compliqué.
Average rating: