PHP: Behandler BBC Daily Email

Hvis du får disse BBC daglige e-post også, så du vil ha lagt merke til at de er ganske overflødig. En nyhet som vises i " Oppslag " kategori, for eksempel, kan også vises i " AFRIKA " kategori. Faktisk er det ikke uvanlig å finne den samme varen i to eller tre categories.Here er et PHP-script som aksepterer en daglig BBC news e-post og utganger en side der hver nyhet er oppført bare én gang.
For å bruke dette skriptet bare åpen den i en nettleser og kopiere og lime inn en hel BBC daglig e-post til skjemaets tekstområdet og trykk på send-knappen.
Dette skriptet bruker Finite State Machine klasse som er tilgjengelig på http://pear.php.net/package /FSM/docs/latest/FSM/FSM.html
. <? phprequire_once 'FSM.php'; klasse FSM_1 strekker FSM {funksjon setPayload ($ nyttelast) {$ dette- > _payload = $ nyttelast; } Funksjon getPayload () {return $ dette - > _payload; }} Funksjon section ($ symbol, $ nyttelast) {$ nyttelast = " Seksjon: "; } Funksjon ItemTitle ($ symbol, $ nyttelast) {$ nyttelast = " Tittel: "; } Funksjon ItemSummary ($ symbol, $ nyttelast) {$ nyttelast = " Summary: "; } Funksjon ItemURL ($ symbol, $ nyttelast) {$ nyttelast = " URL: "; } $ Stack = array (); $ f = new FSM_1 ( 'VENTER', $ stack), $ f - > setDefaultTransition (null, "VENTER '); $ f - > addTransition ( 'VENTER', 'SECTION_NAME', null '.'); $ f - > addTransitionAny ( 'SECTION_NAME', 'DELIM_OR_ITEM_TITLE', 'section'); $ 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', 'section'); $ 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) {$ titler = array (); $ Ignorere = 0; foreach (eksplodere (" \\ n ", $ _POST [ 'news']) som $ linje) {$ linje = trim ($ linje); if ($ linje == '') {fortsette; } $ F - > setPayload ( ''); $ F - > fremgangsmåte (substr ($ linje, 0, 1)); $ Nyttelast = $ f - > getPayload (); if ($ nyttelast = '') {if ($ nyttelast == 'Seksjon:' og $ linjen == 'valg og hjelpe') {break; } If ($ nyttelast == 'Tittel:') {if (in_array ($ linje, $ titler)) {$ ignorere = 1; } Else {$ ignorere = 0; array_push ($ titler, $ linje); }} If ($ ignorere == 0) {if ($ nyttelast == 'Tittel:') {echo stripslashes ($ linje). &Quot; < br /> \\ n "; } If ($ nyttelast == 'Summary:') {echo stripslashes ($ linje). &Quot; < br /> \\ n "; } If ($ nyttelast == 'URL:') {echo " < a href = '" . $ Linje. &Quot; ' target = "_ blank" > " . $ Linje. &Quot; < /a > < p /> \\ n "; }}}} Echo " < p /> \\ n ";} >? ≪ form action = " <? echo $ _SERVER [ 'PHP_SELF'];? > " method = " post " name = " adminlogin " id = " adminlogin " style = " display: inline; " > ≪ textarea name = " nyheter " id = " nyheter " rader = " 20 " kolonner = " 200 " > < /textarea > < br /> ≪ innspill name = " Send inn " type = " sende " id = " Send inn " value = " Send inn " > ≪ innspill name = " submitid " type = " skjult " id = " submitid " value = " en " /> < /skjema >
Her er noen notater om hvordan det fungerer:
Heldigvis linjene i BBC e-post er sekvensert i en spesielt enkelt måte, og dette gjenspeiles i samlingen overgangs rules.When en overgangsregel resulterer i en samtale til en funksjon som section, noe som indikerer at en del navn (for eksempel " Oppslag ") har blitt anerkjent, funksjons signalene dette faktum ved å sette $ nyttelasten. Jeg har utvidet base klassen slik at $ nyttelast som er gjort tilgjengelig for disse funksjonene er også tilgjengelig for koder som instantiate den utvidede class.The Resultatet er at hver gang en linje er lest fra den daglige e-post det er gått til (utvidet ) FSM for anerkjennelse og deretter behandlet accordingly.One mindre punkt: " kolonner " innstillingen for tekstfeltet i form kan virke overdrevent stor. Det er satt på denne måten slik at linjer fra e-posten ikke er brettet, slik at parsing ikke er gjort unødvendig komplisert.



Previous:
Next Page: