14Aug

Nemt parse / søge en web sides søgeforespørgsler strings fra apache logs hjælp php awk og sed linux kommando line utilities

click fraud protection
6 Dele: Brug awk og sed at parse apache logfiler for bruger indtastet søgeforespørgsler Kendte problemer Version 2: Mindre kommandolinjen forbehandling og mere php behandling ToDo Tips tricks & amp;Advarsler Kommentarer

Denne HowTo vil vise dig, hvordan du nemt på Linux kommandolinjen parse dine apache logfiler at få søgestrengen forespørgsel data, som brugerne indtaster at finde din webside i en søgemaskine.Jeg har inkluderet en php søgning GUI samt for nem brug.

Var disse oplysninger nyttige?Ja |ingen |Jeg har brug for hjælp
Indhold
  • en Brug argumentantallet og sed at parse apache logfiler for brugeren indtastet søgeforespørgsler
  • 2 ufærdigt
  • 3 Version 2: Mindre kommandolinjen forbehandling og mere php behandling
  • 4 ToDo
  • 5 Tips Tricks & amp;Advarsler
  • 6 Kommentarer
Ad

Brug awk og sed at parse apache logfiler for brugeren indtastet søgeforespørgsler

Her er den rå kode for at få arbejdet gjort.Bemærk, at $ TITLE2 skal erstatte med hvad du leder efter, men rum er erstattet med "\ +".

instagram viewer

For eksempel: "Hvordan finder man en stor lollypop" ville være "Hvordan \ + til \ + finde \ + a \ + stor \ + lollypop"

Det er fordi jeg planlægger at ringe fra en php-funktion, hvor jeg vilbefolke $ TITLE2 som du vil se senere.Jeg kunne have sat egrep

senere, men så vil du ikke have mulighed for at søge både side titel og forespørgsler.Min oprindelige version bare søgte forespørgsler, men jeg ønskede en funktion, jeg kunne nemt kalde for en given side og se alle de forespørgsler, som brugere har indtastet i de seneste par uger.

kat /var/log/virtualmin/VisiHow.com_access_log |#Get Data fra adgang log egrep "(q | p) =" |#use Kun poster, der sandsynligvis har søgeforespørgsler sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | #Do nogle formateringsændringer og vigtigst ændre alle rumeller understreger til + egrep -I "$ TITLE2" | #search for $ TITLE2 awk '{print $ 11}' | sed #extract kun søgedata 's / p = / q = / ig «| #handle Yahoo p = awk -F 'q =' '{print $ 2}' | #grab alle data der starter med q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20/ / g; '|#reformat til læsbar format cut -d "& amp;"-f 1 |#strip off andre parametre awk '{print $ 0 "
"}' #add
link pauser, fordi vi planlægger at output til en webside

Var disse oplysninger nyttige?Ja |ingen |Jeg har brug for hjælp

== Lad os oprette en PHP

HTML GUI wrapper for dette nu ==

For at gøre dette let brug, vi ønsker at få adgang til brugerens forespørgslen data fra en webside søgeskemaet.

queries.php

& lt; title & gt; Bruger Forespørgsler & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;

& lt; formen name = metode "sform" = "få" & gt;Søg Titel: & lt; input size = "80" value = "& lt; PHP echo $ _GET [ 'title']; & gt;?"name = "title" type = "text" & gt;& Lt; input value = "Søg" type = "submit" & gt;TIP: Du kan bruge en delvis titel eller endda regex såsom & lt; / blanket & gt; "Samsung * skader."

Var disse oplysninger nyttige?Ja |ingen |Jeg har brug for hjælp

$ title = $ _GET [ 'title'];$ Title = preg_replace( "/ hvordan / i", "", $ titel);$ TITLE2 = str_replace( "", "\ +", $ titel);$ TITLE2 = str_replace( "_", "\ +", $ TITLE2);

$ bigcmd = & lt; & lt; & lt; eof

egrep -i "(q | p) =" |#use Kun poster, der sandsynligvis har søgeforespørgsler sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | #Do nogle formateringsændringer og vigtigst ændre alle rumeller understreger til + egrep -i "$ TITLE2" | #search for TITLE2 awk '{print $ 11}' | #extract kun søgedata sed 's / p = / q = / ig «| #handle yahoo p = awk -F'q =' '{print $ 2}' | #grab alle data der starter med q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20 // g; '|#reformat til læsbar format cut -d "& amp;"-f 1 |#strip off andre parametre awk '{print $ 0 "
"}' #add
link pauser, fordi vi planlægger at output til en webside

EOF;

Var disse oplysninger nyttige?Ja |ingen |Jeg har brug for hjælp

hvis "{

print Søgning efter" $ title "..."( $ title = "!)";print "aktuelle uge. ..
";print `cat /var/log/virtualmin/visihow.com_access_log |#Get Data fra adgang log $ bigcmd `;// Vi støtter p = også fordi yahoo bruger at. .. ulige ænder lol for( $ i = 1; $ i & lt; 6; $ i ++){ print "
$ i UGE( S) AGO
";udskrive `zcat /var/log/virtualmin/visihow.com_access_log.$i.gz |#Get Data fra adgang log $ bigcmd `;}

} & gt;

Var disse oplysninger nyttige?Ja |ingen |Jeg har brug for hjælp

& lt; / eof

ufærdigt

Den grep er picking up plader med henvisende data, så det vender tilbage uønskede poster.For eksempel hvis nogen søger efter "iPhone" og en bruger var på en iPhone side derefter klikkede for at gå til en Samsung side, denne kode opfanger iPhone fra den henvisende og dermed indeholder, at data, som det burde ikke.Jeg arbejder på version 2, der gør meget mere, og vil løse denne fejl ved at flytte en stor del af kommandolinjen præprocessering i php.Koden vil være mere stump, men vil give langt mere brugbare og præcise data.

Var disse oplysninger nyttige?Ja |ingen |Jeg har brug for hjælp

Version 2: Mindre kommandolinjen forbehandling og mere php behandling

Denne version har følgende fordele / ulemper:

  • Mindre kommandolinje forbehandlingsfasen betyder længere kode
  • mere php betyder mere kontrol og funktioner
  • Ignorerer flere dublerede anmodninger fra samme ip
  • Counts flere søgninger i stedet for notering dem flere gange
  • Vis trending oplysninger ved at vise ugentlige totaler
  • Output eri rulles divs for nem visning af populære sider
  • Sorteret efter forespørgsel længder alt, hvoraf ca betyder mere populære sider viser først
  • lidt hurtig og beskidt javascript & amp;css at gøre divs auto udvide til detaljeret visning

& lt; title & gt; Bruger Forespørgsler & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;

& lt; formen name = metode "sform" = "få" & gt;Søg Titel:? & Lt; input size = "80" value = "& lt; php
if( strlen( $ _ GET [ 'title']) & gt; 0){
echo $ _GET [ 'title'];
} else{
echo "*"; & lt; br = "" type = "text" & gt;} & gt;? "name = "title" / & gt;& Lt; input value = "Søg" type = "submit" & gt;
TIP: Indtast * til at se alt.Du kan bruge en delvis titel eller endda regex som "Samsung * skader." & Lt; / blanket & gt;

Var disse oplysninger nyttige?Ja |ingen |Jeg har brug for hjælp

funktion sortbylen( $ a, $ b){

tilbagevenden strlen( $ b) -strlen( $ a);

}

$ title = $ _GET [ 'title'];$ Title = preg_replace( "/ hvordan / i", "", $ titel);$ TITLE2 = str_replace( "", "\ +", $ titel);$ TITLE2 = str_replace( "_", "\ +", $ TITLE2);

$ bigcmd = & lt; & lt; & lt; eof

egrep -i "(q | p) =" |#use Kun poster, der sandsynligvis har søgeforespørgsler sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | #Do nogle formateringsændringer og vigtigst ændre alle rumeller understreger til + awk '{print $ 1 "" $ 7 "" $ 11}' | egrep -i "$ TITLE2" #search for TITLE2

EOF,

Var disse oplysninger nyttige Ja | Nej | jeg har brug for hjælp
?

if( $ title = "!"){

print "Søgning efter" $ 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], $ matcher);$ Ss = urldecode( $ kampe [2]);$ Ss = str_replace( "+", "", $ ss);if( (strlen( trim( $ ss)) & gt; 3) & amp; & amp;( preg_match( "# http \: \ / \ / # i", $ ss))!){ // holde url fra stedet søgningerif( ($ ip = $ læbe) ||( $ ss = $ LSS)!!){ $ læbe = $ ip;$ LSS = $ ss;$ Ssdata [ "$ url"] = "$ ss |."}}} Uasort( $ array, "sortbylen ');foreach( $ ssdata som $ key = & gt; $ værdi){ $ Sarr = eksplodere( "|", $ værdi);foreach( $ Sarr som $ s){ if( strlen( $ s) & gt; 0) $ s2 [$ s] ++;} Arsort( $ s2);foreach( $ s2 som $ TAST2 = & gt; $ VAL2){ $ urldata [$ key] [$ i] = "$ VAL2: $ TAST2
".$ STOT [$ key] [$ i] + = $ VAL2;} Frakoblet( $ s2);} Frakoblet( $ ssdata);} Foreach( $ urldata som $ url = & gt; $ weekdata){ print " & lt; en target =" _ blank "href =" $ url "& gt; $ url & lt; / a & gt;
";$ Wk = 0;... Foreach( $ weekdata som $ uge){ print "
" $ wk ++ "UGE( S) AGO: Total søgninger =" $ 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å; overflow: rul '& gt; $ ugen ";}}

} & gt;

Var disse oplysninger nyttige?Ja |ingen |Jeg har brug for hjælp

& lt; / eof

ToDo

Sorter efter forespørgsel længde som en sekundær slags, med længere forespørgsler første

Det er det.Jeg ville elske at høre dine oplevelser med denne kode eller forslag til forbedringer.

Tips Tricks & amp;Advarsler

  • Note: Jeg støtter p = så godt og standard q = fordi Yahoo er den ulige ænder er det bruger p =
  • Version 2 php er mere kompleks, og jeg var kodning hurtigt, så nogle af de variablernavne blev udvalgt dårligt.venligst ikke klage som dets frie kode.Men hvis du ønsker at ordne det op og dokumentere det og føje den ind i wiki som version 3, der ville være fantastisk:) betale tilbage!
  • Hvis du har problemer med nogen af ​​disse trin, stille et spørgsmål om mere hjælp, eller skrive i kommentarfeltet nedenfor.

Kommentarer

VisiHow hilser alle kommentarer .Hvis du ikke ønsker at være anonym, registrere eller logge ind. Det er gratis.




Daniel
Featured Forfatter
69 Artikler Startede
2601 Artikel Edits
24,290 Points
Daniel er en featured forfatter med VisiHow.Daniel har opnået niveauet for "Løjtnant" med 24,290 point.Daniel har startet 69 artikler og gjorde 2.601 artiklen redigeringer.17,578 mennesker har læst Daniels artiklen bidrag.
Ask Daniel
Daniel : Hej, mit navn er Daniel.
Daniel : Kan jeg hjælpe dig med dit problem om "Let parse / søge en webside søgen søgestrenge fra apache logs hjælp php awk og sed linux kommandolinje utilities"?
Accepter