Se você receber esses e-mails diários BBC demasiado então você terá percebido que eles são bastante redundantes. Uma notícia que aparece na seção "Últimas notícias" categoria, por exemplo, também podem aparecer na seção "ÁFRICA" categoria. Na verdade, não é incomum encontrar o mesmo item em duas ou três categorias.

Aqui está um script PHP que aceita um diário BBC news e-mail e saídas de uma página na qual cada tema está listado apenas uma vez.
Para usar este script basta abri-la em um navegador e copiar e colar um todo BBC e-mail diário na forma do texto do espaço e pressione o botão enviar.

Este script utiliza a Máquina de estado finito turma que está disponível no http://pear.php.net/package/FSM/docs/latest/FSM/FSM.html.

<? php
require_once 'FSM.php';
FSM_1 classe estende FSM (
função setPayload ($ payload) ($ this-> _payload = $ payload;)
getPayload função () (return $ this -> _payload;)
)
função SectionName (símbolo $, $ payload) ($ payload = "Secção:";)
função ItemTitle (símbolo $, $ payload) ($ payload = "Título:";)
função ItemSummary (símbolo $, $ payload) ($ payload = "Summary:";)
função ItemURL (símbolo $, $ payload) ($ payload = "URL:";)
$ stack = Array ();
$ f = new FSM_1 ( 'ESPERA', $ stack);
$ 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 ();
$ ignore = 0;
foreach (explode ( "\ n", $ _POST [ 'news']), R $ linha) (
$ linha = trim ($ linha);
if ($ linha =='') (continue;)
$ f -> setPayload ('');
$ f -> processo (substr ($ linha, 0, 1));
$ $ f = carga útil -> getPayload ();
if ($ payload! ='') (
if ($ payload == 'Secção: «e $ linha ==' OPÇÕES E AJUDA ') (break;)
if ($ payload == 'Cargo:') (
if (in_array ($ linha, $ títulos)) ($ ignore = 1;)
else (
$ ignore = 0;
array_push ($ títulos, $ linha);
)
)
if ($ ignore == 0) (
if ($ payload == 'Cargo:') (echo stripslashes ($ linha). "<br/> \ n";)
if ($ payload == 'Resumo:') (echo stripslashes ($ linha). "<br/> \ n";)
if ($ payload == 'URL:') (echo "<a href =" ". $ linha. " 'Target =" _blank ">". $ linha. "</ 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>

Aqui estão algumas notas sobre como funciona:

Felizmente as linhas para a BBC e-mails são sequenciadas, uma forma particularmente simples e isto é refletido na cobrança das regras de transição.

Quando uma regra de transição resulta em uma chamada a uma função, como SectionName, indicando que um nome de seção (como "Últimas notícias") tem sido reconhecida, a função sinais deste fato, fixando $ carga útil nesse sentido. Eu tenho estendido a classe base para que os R $ payload que é disponibilizado para estas funções está também disponível para códigos que exemplificam a classe estendida.

O resultado é que cada vez que uma linha é lida a partir do e-mail diário é passado para o (alargada) FSM para o reconhecimento e depois transformados em conformidade.

Um pequeno ponto: O "cols" configuração para o textarea em forma pode parecer excessivamente grandes. É definido desta forma, para que as linhas de e-mail não são dobrados, de modo que não é feita ao analisar desnecessariamente complicado.
Average rating: