Wenn Sie erhalten diese BBC täglich E-Mails auch dann werden Sie bemerkt haben, dass sie ziemlich überflüssig. Ein News-Artikel, die in der "Top Stories" Kategorie, zum Beispiel, können auch in der "Afrika" Kategorie. In der Tat ist es nicht ungewöhnlich zu finden, das gleiche Element in zwei oder drei Kategorien.

Hier ist ein PHP-Skript akzeptiert, dass ein täglich BBC News E-Mail-und Ausgänge einer Seite, in dem jedes Thema wird nur einmal.
So verwenden Sie dieses Skript nur öffnen Sie sie in einem Browser kopieren und dann eine ganze BBC täglich E-Mails in Form von Text und drücken Sie die Schaltfläche "Senden".

Dieses Skript verwendet die Finite State Machine-Klasse, ist abrufbar unter http://pear.php.net/package/FSM/docs/latest/FSM/FSM.html.

<? php
require_once 'FSM.php';
Klasse FSM_1 erweitert FSM (
Funktion setPayload ($ payload) ($ this-> _payload = $ Nutzlast;)
Funktion getPayload () (return $ this -> _payload;)
)
Funktion SectionName ($ symbol, $ payload) ($ Nutzlast = "Abschnitt:";)
Funktion ItemTitle ($ symbol, $ payload) ($ Nutzlast = "Titel:";)
Funktion ItemSummary ($ symbol, $ payload) ($ Nutzlast = "Zusammenfassung";)
Funktion ItemURL ($ symbol, $ payload) ($ Nutzlast = "URL:";)
$ stack = array ();
$ f = new FSM_1 ( "Warten", $ stack);
$ f -> setDefaultTransition (null, "Warten");
$ f -> addTransition ( '. "," Warten "," 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) (
$ Titel = array ();
$ ignore = 0;
foreach (explode ( "\ n", $ _POST [ 'news']) as $ line) (
$ line = trim ($ line);
if ($ online =='') (continue;)
$ f -> setPayload ('');
$ f -> Prozess (substr ($ line, 0, 1));
Nutzlast = $ $ f -> getPayload ();
if ($ Nutzlast! ='') (
if ($ Nutzlast == "Abschnitt:" und $ line == 'OPTIONEN UND HILFE') (break;)
if ($ Nutzlast == 'Titel:') (
if (in_array ($ line, $ Titel)) ($ ignore = 1;)
else (
$ ignore = 0;
array_push ($ Titel, $ line);
)
)
if ($ ignorieren == 0) (
if ($ Nutzlast == 'Titel:') (echo stripslashes ($ line). "<br/> \ n";)
if ($ Nutzlast == 'Zusammenfassung:') (echo stripslashes ($ line). "<br/> \ n";)
if ($ Nutzlast == '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 name="submit" type="submit" id="Submit" value="Submit">
<input name="submitid" type="hidden" id="submitid" value="1"/>
</ form>

Hier sind einige Anmerkungen dazu, wie es funktioniert:

Glücklicherweise die Zeilen in der BBC-E-Mails sind sequenziert in einer besonders einfach, und dies spiegelte sich in der Sammlung des Übergangs Regeln.

Wenn ein Übergang in der Regel dazu, einen Anruf zu einer Funktion, wie SectionName weist darauf hin, dass ein Abschnitt Namen (z. B. "Top Stories") anerkannt worden ist, die Funktion Signale diese Tatsache, indem $ Nutzlast werden. Ich habe das Basis-Klasse, so dass die Nutzlast $ zur Verfügung gestellt wird, dass zu diesen Funktionen gibt es auch auf Codes, die eine Instanz der abgeleiteten Klasse.

Das Ergebnis ist, dass jedes Mal, wenn eine Zeile gelesen wird aus der täglichen E-Mail ist es an dem (erweiterten) FSM für die Anerkennung und dann verarbeitet werden.

Eine geringfügige Punkt: Die "cols"-Einstellung für die textarea in Form Mai scheinen übermäßig groß. Es ist diese Art, so dass Zeilen aus der E-Mail sind nicht gefaltet, so dass Parsing ist nicht unnötig kompliziert.
Average rating: