14Aug
Dette HowTo vil vise deg hvordan du enkelt på Linux kommandolinjen analysere apache loggfiler for å få søkestrengen spørring data som brukerne skriver for å finne din nettside i en søkemotor.Jeg har tatt en php søk GUI samt for enkel bruk.
- en Bruk awk og sed å analysere apache loggfiler for brukeren skrev søkene
- 2 kjente problemer
- 3 versjon 2: Mindre kommandolinje forbehandling og mer php behandling
- 4 ToDo
- 5 Tips triks & amp;Advarsler
- 6 Kommentarer
Bruk awk og sed å analysere apache loggfiler for brukeren skrev søkene
Her er rå kode for å få jobben gjort.Merk at $ TITLE2 skal erstatte av hva du leter etter, men mellomrom er erstattet med "\ +".
For eksempel: "Hvordan finne en stor lollypop" ville være "Hvordan \ + til \ + finne \ + a \ + stor \ + lollypop"
Dette er fordi jeg har tenkt å ringe fra en php funksjon, hvor jeg vilbefolke $ TITLE2 som du vil se senere.Jeg kunne ha satt egrep
senere, men da vil du ikke ha mulighet til å søke både sidetittel og spørringer.Min opprinnelige versjonen bare søkte spørsmål, men jeg ville ha en funksjon jeg lett kunne kalle for en gitt side og se alle de spørsmål som brukere har skrevet i løpet av de siste ukene. katt /var/log/virtualmin/VisiHow.com_access_log |#Get Data fra tilgangsloggen egrep "(q | p) =" |#use Bare poster som sannsynligvis har søk sed 's /% 22 / "/ g, s /% 20 / + / g, s / _ / + / g;' | #Do noen formateringsendringer og viktigst endre alle områdereller understreker til + egrep -I "$ TITLE2" | #search for $ TITLE2 awk '{skrive $ 11} | #extract bare søkedata sed' s / p = / q = / ig '| #handle Yahoo p = awk -F 'q =' '{print $ 2}' | #grab alle data som starter med q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20/ / g; '|#reformat til lesbar format cut -d "& amp;"-f 1 |#strip av andre parametere awk '{print $ 0 "
"} #add
kobling pauser fordi vi planlegger å sende signaler til en nettside
== La oss lage et PHP
HTML GUI wrapper for denne bedriften ==For å gjøre dette enkelt bruk vi ønsker å få tilgang til brukerspørringsdata fra en nettside søkeskjemaet.
queries.php
& lt; title & gt; Brukerspørringer & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;
& lt; form name = "sform" method = "get" & gt;Søk Tittel: & lt; innspill size = "80" value = "& lt; php echo $ _GET [ 'tittel']; & gt;?"name = "title" type = "text" & gt;& Lt; inngangsverdien = "Søk" type = "submit" & gt;TIPS: Du kan bruke en delvis tittel eller regex som & lt; / skjema & gt; "Samsung * skade."
$ title = $ _GET [ 'tittel'];$ Title = preg_replace( "/ hvordan / i", "", $ tittel);$ TITLE2 = str_replace( "", "\ +", $ tittel);$ TITLE2 = str_replace( "_", "\ +", $ TITLE2);
$ bigcmd = & lt; & lt; & lt; eof
egrep -i "(q | p) =" |#use Bare poster som sannsynligvis har søk sed 's /% 22 / "/ g, s /% 20 / + / g, s / _ / + / g;' | #Do noen formateringsendringer og viktigst endre alle områdereller understreker til + egrep -i "$ TITLE2" | #search for TITLE2 awk '{skrive $ 11} | #extract bare søkedata sed' s / p = / q = / ig '| #handle yahoo p = awk -F'q =' '{print $ 2}' | #grab alle data som starter med q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20 // g; '|#reformat til lesbar format cut -d "& amp;"-f 1 |#strip av andre parametere awk '{print $ 0 ""} #add
kobling pauser fordi vi planlegger å sende signaler til en nettside
EOF;
hvis "{
print Searching for" $ title "..."( $ title = "!)";print "værende uke. ..";print `cat /var/log/virtualmin/visihow.com_access_log |#Get Data fra tilgangsloggen $ bigcmd `;// Vi støtter p = også fordi yahoo bruker det. .. merkelig andebryst lol for( $ i = 1; $ i & lt; 6; $ i ++){ print "
$ i UKE( er) siden
";skrive `zcat /var/log/virtualmin/visihow.com_access_log.$i.gz |#Get Data fra tilgangsloggen $ bigcmd `;}
} & gt;
& lt; / EOF
kjente problemer
Den grep er å plukke opp poster med henvisninger data slik at den er på vei tilbake uønskede poster.For eksempel hvis noen søker på "iPhone" og en bruker var på en iPhone side deretter klikket for å gå til en Samsung side, plukker denne koden opp iPhone fra referent og dermed omfatter at data som det ikke burde.Jeg jobber med versjon 2, som gjør mye mer, og vil fikse denne feilen ved å flytte mye av kommandolinjen preprosessering i php.Koden vil være mer stumpe, men vil gi langt mer nyttige og nøyaktige data.
Versjon 2: Mindre kommandolinje forbehandling og mer php behandling
Denne versjonen har følgende fordeler / ulemper:
- Mindre kommandolinje forbehandling betyr lengre kode
- mer php betyr mer kontroll og har
- Ignorerer flere dupliserte forespørsler fra samme ip
- teller flere søk i stedet for å føre dem flere ganger
- Vis trending informasjon ved å vise ukentlige total
- produksjonen eri rull divs for enkel visning av populære sider
- Ordnet etter spørre lengder utgjorde, hvorav ca. betyr mer populære sidene viser første
- litt rask og skitne javascript & amp;css å gjøre divs auto utvide for detaljert visning
& lt; title & gt; Brukerspørringer & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;
& lt; form name = "sform" method = "get" & gt;Søk Tittel: & lt; innspill size = "80" value = "& lt; php
if( strlen( $ _ GET [ 'tittel']) & gt; 0){
echo $ _GET [ 'tittel'];
} else{
echo "*"; & lt; br = "" type = "text" & gt;} & gt;? "Name = "title" / & gt;& Lt; inngangsverdien = "Søk" type = "submit" & gt;
TIPS: Skriv inn * for å se alt.Du kan bruke en delvis tittel eller regex som "Samsung * skade." & Lt; / skjema & gt;
funksjon sortbylen( $ a, $ b){
retur strlen( $ b) -strlen( $ a);}
$ title = $ _GET [ 'tittel'];$ Title = preg_replace( "/ hvordan / i", "", $ tittel);$ TITLE2 = str_replace( "", "\ +", $ tittel);$ TITLE2 = str_replace( "_", "\ +", $ TITLE2);
$ bigcmd = & lt; & lt; & lt; eof
egrep -i "(q | p) =" |#use Bare poster som sannsynligvis har søk sed 's /% 22 / "/ g, s /% 20 / + / g, s / _ / + / g;' | #Do noen formateringsendringer og viktigst endre alle områdereller understreker til + awk '{print $ 1 "" $ 7 "" $ 11} | egrep -i "$ TITLE2" #search for TITLE2EOF;
if( $ title = ""){
print "Searching for" $ title "..."; for( $ i = 0; $ i & lt; 6; $ i ++){ if( $ i == 0){ $ searchlogdata = `cat /var/log/virtualmin/visihow.com_access_log | $ bigcmd`;} else{ $ searchlogdata =` zcat /var/log/virtualmin/visihow.com_access_log.$i.gz | $ bigcmd`;} $ searchlogarray = eksplodere( "\ n", $ searchlogdata); foreach( $ searchlogarray som $ sdata){ $ logparts = eksplodere( "", $ sdata); $ ip = $ logparts [0]; $ url = $ logparts[1]; preg_match( "/( q | p) =( *).?»( \ & amp; |? $) / ", $ logparts [2], fyrstikker $);$ Ss = urldecode( $ kampene [2]);$ Ss = str_replace( "+", "", $ ss);if( (strlen( trim( $ ss)) & gt; 3) & amp; & amp;( preg_match( "# http \: \ / \ / # i", $ ss))){ // holde ut url fra nettstedsøkif( ($ ip = $ leppe) ||( $ ss = $ LSS)!){ $ leppe = $ ip;$ LSS = $ ss;$ Ssdata [ "$ url"] = "$ ss |.";}}} Uasort( $ array, 'sortbylen');foreach( $ ssdata som $ key = & gt; $ verdi){ $ Sarr = eksplodere( "|", $ verdi);foreach( $ Sarr som s $){ if( strlen( $ s) & gt; 0) $ s2 [$ s] ++;} Arsort( $ s2);foreach( $ s2 som $ key2 = & gt; $ VAL2){ $ urldata [$ key] [$ i] = "$ VAL2: $ key2";.$ STOT [$ key] [$ i] + = $ VAL2;} Unset( $ s2);} Unset( $ ssdata);} Foreach( $ urldata som $ url = & gt; $ weekdata){ print " & lt; a target =" _ blank "href =" $ url "& gt; $ url & lt; / a & gt;
";$ Wk = 0;... Foreach( $ weekdata som $ uke){ print "
" $ wk ++ "WEEK( er) siden: Totale søk =" $ STOT [$ url] [$ wk-1] "
";.print "& lt; div onmouseover =" this.style.height = 500 "onmouseout =" this.style.height = 100 "& lt; br =" "& gt; & lt; / div & gt; style = 'width: 800px; height: 100px; border: 1px solid grå, overløp: bla '& gt; $ uke ";}}
} & gt;
& lt; / EOF
ToDo
Sorter etter søket lengde som en sekundær form, med lengre søk først
Det er det.Jeg vil gjerne høre dine erfaringer med denne koden eller forslag til forbedringer.
Tips triks & amp;Advarsler
- Merk: Jeg støtter p = samt og standard q = fordi Yahoo være merkelig andebryst er det bruker p =
- Versjon 2 php er mer kompleks, og jeg ble koding fort så noen av variablenenavn ble valgt dårlig.vennligst ikke klage som sin gratis kode.Men hvis du ønsker å fikse den opp og dokumentere den og legge den inn i wikien som versjon 3 som ville være fantastisk:) betale den frem!
- Hvis du har problemer med noen av disse trinnene, stille et spørsmål om mer hjelp, eller legge i kommentarfeltet nedenfor.
Kommentarer
| Daniel Utvalgt Forfatter 69 Artikler i gang 2601 Artikkel Edits 24,290 poeng |
Daniel er en kjennetegnet forfatter med VisiHow.Daniel har oppnådd nivået av "løytnant" med 24,290 poeng.Daniel har startet 69 artikler og gjort 2,601 artikkelen redigeringer.17,578 mennesker har lest Daniels artikkel bidrag. |
Daniel : | Hei, mitt navn er Daniel. |
Daniel : | Kan jeg hjelpe deg med ditt problem om "Enkelt analysere / søke på et nettsted søk søkestrenger fra Apache stokker med php awk og sed linux kommandolinje-verktøy"? |