Se si ricevono questi messaggi di posta elettronica al giorno BBC troppo allora si avrà notato che sono abbastanza superfluo. Una notizia che compare nella "Top Stories" categoria, per esempio, può apparire anche nel "AFRICA" categoria. In realtà non è insolito trovare lo stesso elemento in due o tre categorie.

Ecco uno script PHP che accetta uno giornaliero BBC news e-mail e le uscite di una pagina in cui ogni notizia è quotata solo una volta.
Per utilizzare questo script appena aperto in un browser e copiare e incollare un intero BBC e-mail al giorno in forma di testo e premere il pulsante di invio.

Questo script utilizza il Finite State Machine classe che è disponibile presso http://pear.php.net/package/FSM/docs/latest/FSM/FSM.html.

<? php
require_once 'FSM.php';
classe FSM_1 estende FSM (
funzione setPayload ($ payload) ($ this-> _payload = $ payload;)
getPayload funzione () (return $ this -> _payload;)
)
funzione SectionName (simbolo $, $ payload) ($ payload = "Sezione:";)
funzione itemTitle (simbolo $, $ payload) ($ payload = "Titolo:";)
funzione ItemSummary (simbolo $, $ payload) ($ payload = "Oggetto:";)
funzione ItemURL (simbolo $, $ payload) ($ payload = "URL:";)
$ stack = array ();
$ f = new FSM_1 ( 'ATTESA', $ stack);
$ f -> setDefaultTransition (null, 'ATTESA');
$ f -> addTransition ( '.', 'ATTESA', '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) (
$ titoli = array ();
$ ignore = 0;
foreach (explode ( "\ n", $ _POST [ 'news']) as $ line) (
$ line = trim ($ line);
if ($ line =='') (continue;)
$ f -> setPayload ('');
$ f -> processo (substr ($ line, 0, 1));
carico pagante = $ $ f -> getPayload ();
if ($ payload! ='') (
if ($ payload == 'Sezione:' e $ line == 'OPZIONI DI AIUTO E') (break;)
if ($ payload == 'Titolo:') (
if (in_array ($ line, $ titoli)) ($ ignore = 1;)
else (
$ ignore = 0;
array_push ($ titolo, $ line);
)
)
if ($ ignorare == 0) (
if ($ payload == 'Titolo:') (echo stripslashes ($ line). "<br/> \ n";)
if ($ payload == 'Oggetto:') (echo stripslashes ($ line). "<br/> \ n";)
if ($ payload == 'URL:') (echo "<a href = '". $ line. " 'Target =' _blank '>". $ line. "</ 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/>
<input type="submit" id="Submit" name="submit" value="Submit">
name="submitid" <input type="hidden" id="submitid" value="1"/>
</ form>

Ecco alcune note su come funziona:

Fortunatamente le linee della BBC email sono sequenziati in un modo particolarmente semplice e questo si riflette nella raccolta di norme transitorie.

Quando una transizione regola i risultati in una chiamata a una funzione come SectionName, indicando che un nome di sezione (ad esempio "Top Stories") è stato riconosciuto, la funzione di segnali di questo fatto impostando $ payload di conseguenza. Ho esteso la classe di base in modo che il carico utile $ che viene messo a disposizione queste funzioni sono disponibili anche i codici che istanzia la classe estesa.

Il risultato è che ogni volta che una linea che viene letto dal quotidiano e-mail è passata al (esteso) FSM per il riconoscimento e poi trasformati di conseguenza.

Un piccolo punto: la "cols" per il testo in forma può sembrare eccessivamente grandi. Essa è impostata in questo modo in modo che le linee da e-mail non sono piegati, in modo che l'analisi non è stata fatta inutilmente complicato.
Average rating: