Si usted recibe estos mensajes de correo electrónico diario BBC demasiado entonces usted habrá notado que son bastante redundantes. Una noticia que aparece en la sección "En portada" categoría, por ejemplo, también puede aparecer en el "África" categoría. De hecho no es raro encontrar el mismo tema en dos o tres categorías.
Aquí hay un script PHP que acepta un diario de noticias BBC de correo electrónico y los productos de una página en la que cada noticia se muestra sólo una vez.
Para utilizar esta secuencia de comandos que acaba de abrir en un navegador y copiar y pegar todo un mensaje de correo electrónico diario de la BBC en la forma del área de texto y pulse el botón de enviar.
Este script utiliza la máquina de estados finitos clase que está disponible en http://pear.php.net/package/FSM/docs/latest/FSM/FSM.html.
<? phprequire_once 'FSM.php';FSM_1 clase se extiende FSM (
función setPayload ($ carga útil) ($ this-> = $ _payload carga útil;)
getPayload función () (return $ this -> _payload;)
)función SectionName (símbolo $, $ carga útil) ($ carga = "Sección:";)
función ItemTitle (símbolo $, $ carga útil) ($ carga = "Título:";)
función ItemSummary (símbolo $, $ carga útil) ($ carga = "Resumen:";)
función ItemUrl (símbolo $, $ carga útil) ($ carga = "URL:";)$ pila = array ();
$ f = new FSM_1 ( 'ESPERA', $ pila);$ f -> setDefaultTransition (null, 'ESPERA');
$ f -> addTransition ( '.', 'ESPERA', '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) (
$ títulos = array ();
$ ignorar = 0;
foreach (explotar ( "\ n", $ _POST [ 'noticias']) como $ line) (
$ linea = trim ($ line);
if ($ line =='') (continuar;)
$ f -> setPayload ('');
$ f -> proceso (substr ($ line, 0, 1));
de carga útil $ = $ f -> getPayload ();
if ($ carga útil! ='') (
if ($ carga útil == 'Sección:' $ y la línea == 'OPCIONES Y AYUDAR A') (break;)
if ($ carga útil == 'Título:') (
if (in_array ($ linea, $ títulos)) ($ ignorar = 1;)
else (
$ ignorar = 0;
array_push ($ títulos, $ line);
)
)
if ($ ignorar == 0) (
if ($ carga útil == 'Título:') (echo stripslashes ($ line). "<br/> \ n";)
if ($ carga útil == 'Resumen:') (echo stripslashes ($ line). "<br/> \ n";)
if ($ carga útil == 'URL:') (echo "<a href = '". $ line. " 'Target =' _blank '>". $ line. "</ a> <p/> \ n";)
)
)
)
echo "<p/> \ n";
)
?><forma 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>
Aquí están algunas notas acerca de cómo funciona:
Afortunadamente las líneas en la BBC son mensajes de correo electrónico en una secuencia en particular, simplemente forma y esto se refleja en la recaudación de las normas de transición.
Cuando una regla de transición se traduce en una llamada a una función como SectionName, lo que indica que una sección de nombre (como "En portada") ha sido reconocida, la función de las señales de este hecho mediante el establecimiento de $ carga útil en consecuencia. Me han ampliado la clase base para que los $ carga útil que se pone a disposición de estas funciones también está disponible a los códigos que ejemplifican la ampliación de la clase.
El resultado es que cada vez que una línea se lee el diario de correo electrónico se pasa a la (ampliado) FSM para el reconocimiento y luego transformados en consecuencia.
Un punto menor: El "cols" para el texto en la forma puede parecer excesivamente grande. Es este conjunto de modo que las líneas de la dirección de correo electrónico no están dobladas, de modo que analizar no se hace innecesariamente complicado.

Delicious
Digg
Google
Yahoo