PHP: Bearbeitung von bbc tägliche e-Mail
Wenn Sie diese BBC täglich e-Mails erhalten haben auch dann Sie bemerkt, dass sie ziemlich überholt sind. Eine Nachricht, die in der Kategorie 'TOP STORIES' erscheint kann beispielsweise auch in der Kategorie 'Afrika' angezeigt werden. In der Tat ist es nicht ungewöhnlich, das gleiche Element in zwei oder drei Kategorien zu finden.
Hier ist ein PHP-Skript, das nimmt eine tägliche BBC Nachrichten e-Mail und gibt eine Seite, in welcher jede, die Nachricht Element nur einmal aufgeführt ist.
Die Verwendung dieses Skript nur öffnen Sie es in einem Browser und kopieren und einfügen eine gesamte BBC täglich e-Mail in das Formular Textfeld und drücken Sie 'Senden'.
Dieses Skript verwendet die Finite State Machine-Klasse, die auf https://pear.php.net/package/FSM/docs/latest/FSM/FSM.html verfügbar ist.
<? Phprequire_once ' FSM.php';class FSM_1 erweitert FSM {}
Funktion SetPayload ($payload) {$this -> _payload = $payload;}
Funktion GetPayload () {Return $this -> _payload;}
} function SectionName ($symbol, $payload) {$payload = 'Abschnitt:';}
Funktion ItemTitle ($symbol, $payload) {$payload = 'Titel:';}
Funktion ItemSummary ($symbol, $payload) {$payload = 'Zusammenfassung:';}
Funktion ItemURL ($symbol, $payload) {$payload = 'URL:';} $stack = Array ();
$f = neue FSM_1 ('warten', $stack); $f -> SetDefaultTransition (null, 'Warten');
$f -> AddTransition ('.', 'Warten', 'Abschnittsname', 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', 'Abschnittsname', 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'), wenn ($_POST ['Submitid'] == 1) {}
$titles = Array ();
$ignore = 0;
Foreach (als $line explodieren ('\n', $_POST ['Nachricht'])) {}
$line = Trim ($line);
Wenn ($line == '') {continue;}
$f -> SetPayload (');
$f -> Prozess (Substr ($line, 0, 1));
$payload = $f -> GetPayload ();
Wenn ($payload! = '') {}
Wenn ($payload == ' Abschnitt:' und $line == 'Optionen und Hilfe') {break;}
Wenn ($payload == ' Titel:') {}
Wenn (In_array ($line, $titles)) {$ignore = 1;}
Else {}
$ignore = 0;
Array_push ($titles, $line);
}
}
Wenn ($ignore == 0) {}
Wenn ($payload == ' Titel:') {echo Stripslashes ($line). '< Br / > \n'; }
Wenn ($payload == ' Zusammenfassung:') {echo Stripslashes ($line). '< Br / > \n'; }
Wenn ($payload == ' URL:') {Echo '< a Href =' '. $line. '' Target = '_blank' >'. $line. '</a >< p / > \n'; }
}
}
}
Echo '< p / > \n';
}
? >< bilden Aktion = '<? Echo $_SERVER ['PHP_SELF'];? > 'Methode ='post'Name ='Adminlogin'Id ='Adminlogin'Style ='Display: Inline;' >
< Textarea Name = 'Nachricht' Id = 'Nachrichten' Zeilen = '20' Cols = '200' >< / Textarea >< Br / >
< input Name = 'Submit' Type = 'submit' Id = 'Submit' Value = 'Submit' >
< Eingabename = 'Submitid' Type = 'hidden' Id = 'Submitid' Value = '1' / >
< / form >
Hier sind einige Hinweise darüber, wie es funktioniert:
Glücklicherweise sind die Linien in der BBC-Mails sequenziert, einem besonders einfach weg und dies spiegelt sich in der Sammlung der Übergangsregeln.
Wenn Ergebnisse einer Übergangsregel in einem Aufruf einer Funktion wie SectionName, darauf hinweist, dass ein Abschnittsname (z. B. 'TOP STORIES') anerkannt worden, die Funktion signalisiert diese Tatsache durch $payload entsprechend festlegen. Ich habe die Basisklasse erweitert, sodass die $payload, die diese Funktionen zur Verfügung gestellt wird ist auch Codes, die die erweiterte Klasse instanziieren.
Das Ergebnis ist, dass jedes Mal, wenn eine Zeile aus der täglichen e-Mail gelesen wird, ist es an der (erweiterten) FSM Anerkennung übergeben und dann entsprechend aufbereitet.
Eine Kleinigkeit: die 'Spalten' Einstellung für die TextArea-Komponente in Form übermäßig große mag. Sie ist so gesetzt, so dass Linien der e-Mail nicht gefaltet werden, so dass die Analyse nicht unnötig kompliziert gemacht wird.
PHP: Bearbeitung von bbc tägliche e-Mail
PHP: Bearbeitung von bbc tägliche e-Mail : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Wenn Sie diese BBC täglich e-Mails erhalten haben auch dann Sie bemerkt, dass sie ziemlich überholt sind. Eine Nachricht, die in der Kategorie 'TOP STORIES' erscheint kann beispielsweise auch in der Kategorie 'Afrika' angezeigt werden. In der Tat ist es nicht ungewöhnlich, das gleiche Element in zwei oder drei Kategorien zu finden.
Hier ist ein PHP-Skript, das nimmt eine tägliche BBC Nachrichten e-Mail und gibt eine Seite, in welcher jede, die Nachricht Element nur einmal aufgeführt ist.
Die Verwendung dieses Skript nur öffnen Sie es in einem Browser und kopieren und einfügen eine gesamte BBC täglich e-Mail in das Formular Textfeld und drücken Sie 'Senden'.
Dieses Skript verwendet die Finite State Machine-Klasse, die auf https://pear.php.net/package/FSM/docs/latest/FSM/FSM.html verfügbar ist.
<? Phprequire_once ' FSM.php';class FSM_1 erweitert FSM {}
Funktion SetPayload ($payload) {$this -> _payload = $payload;}
Funktion GetPayload () {Return $this -> _payload;}
} function SectionName ($symbol, $payload) {$payload = 'Abschnitt:';}
Funktion ItemTitle ($symbol, $payload) {$payload = 'Titel:';}
Funktion ItemSummary ($symbol, $payload) {$payload = 'Zusammenfassung:';}
Funktion ItemURL ($symbol, $payload) {$payload = 'URL:';} $stack = Array ();
$f = neue FSM_1 ('warten', $stack); $f -> SetDefaultTransition (null, 'Warten');
$f -> AddTransition ('.', 'Warten', 'Abschnittsname', 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', 'Abschnittsname', 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'), wenn ($_POST ['Submitid'] == 1) {}
$titles = Array ();
$ignore = 0;
Foreach (als $line explodieren ('\n', $_POST ['Nachricht'])) {}
$line = Trim ($line);
Wenn ($line == '') {continue;}
$f -> SetPayload (');
$f -> Prozess (Substr ($line, 0, 1));
$payload = $f -> GetPayload ();
Wenn ($payload! = '') {}
Wenn ($payload == ' Abschnitt:' und $line == 'Optionen und Hilfe') {break;}
Wenn ($payload == ' Titel:') {}
Wenn (In_array ($line, $titles)) {$ignore = 1;}
Else {}
$ignore = 0;
Array_push ($titles, $line);
}
}
Wenn ($ignore == 0) {}
Wenn ($payload == ' Titel:') {echo Stripslashes ($line). '< Br / > \n'; }
Wenn ($payload == ' Zusammenfassung:') {echo Stripslashes ($line). '< Br / > \n'; }
Wenn ($payload == ' URL:') {Echo '< a Href =' '. $line. '' Target = '_blank' >'. $line. '</a >< p / > \n'; }
}
}
}
Echo '< p / > \n';
}
? >< bilden Aktion = '<? Echo $_SERVER ['PHP_SELF'];? > 'Methode ='post'Name ='Adminlogin'Id ='Adminlogin'Style ='Display: Inline;' >
< Textarea Name = 'Nachricht' Id = 'Nachrichten' Zeilen = '20' Cols = '200' >< / Textarea >< Br / >
< input Name = 'Submit' Type = 'submit' Id = 'Submit' Value = 'Submit' >
< Eingabename = 'Submitid' Type = 'hidden' Id = 'Submitid' Value = '1' / >
< / form >
Hier sind einige Hinweise darüber, wie es funktioniert:
Glücklicherweise sind die Linien in der BBC-Mails sequenziert, einem besonders einfach weg und dies spiegelt sich in der Sammlung der Übergangsregeln.
Wenn Ergebnisse einer Übergangsregel in einem Aufruf einer Funktion wie SectionName, darauf hinweist, dass ein Abschnittsname (z. B. 'TOP STORIES') anerkannt worden, die Funktion signalisiert diese Tatsache durch $payload entsprechend festlegen. Ich habe die Basisklasse erweitert, sodass die $payload, die diese Funktionen zur Verfügung gestellt wird ist auch Codes, die die erweiterte Klasse instanziieren.
Das Ergebnis ist, dass jedes Mal, wenn eine Zeile aus der täglichen e-Mail gelesen wird, ist es an der (erweiterten) FSM Anerkennung übergeben und dann entsprechend aufbereitet.
Eine Kleinigkeit: die 'Spalten' Einstellung für die TextArea-Komponente in Form übermäßig große mag. Sie ist so gesetzt, so dass Linien der e-Mail nicht gefaltet werden, so dass die Analyse nicht unnötig kompliziert gemacht wird.
PHP: Bearbeitung von bbc tägliche e-Mail
By Wiezutun
PHP: Bearbeitung von bbc tägliche e-Mail : Mehreren tausend Tipps, um Ihr Leben einfacher machen.