14Aug
Detta HowTo visar hur du enkelt på Linux kommandorad tolka Apache loggfiler för att få söksträng frågedata som användarna skriver att hitta din webbsida i en sökmotor.Jag har tagit en php sökning GUI samt för enkel användning.
- en Använd awk och sed att tolka apache loggfiler för användaren skrivit sökfrågor
- 2 Kända problem
- 3 Version 2: Mindre kommandoraden förbehandling och mer php bearbetning
- 4 ToDo
- 5 Tips tricks & amp;Varningar
- 6 Kommentarer
Använd awk och sed att tolka apache loggfiler för användaren skrivit sökfrågor
Här är rå koden för att få jobbet gjort.Observera att $ title2 bör ersätta med vad du letar efter men utrymmen ersätts med "\ +".
Till exempel: "Hur man hittar en stor lollypop" skulle vara "Hur \ + att \ + hitta \ + en \ + stor \ + lollypop"
Detta beror på att jag planerar att ringa från en php funktion, där jag kommerbefolka $ title2 som du kommer att se senare.Jag kunde ha givit egrep
senare men då du inte kommer att ha möjlighet att söka både sidans titel och frågor.Min ursprungliga version bara sökt frågor men jag ville ha en funktion jag kunde enkelt ringa för en viss sida och se alla frågor som användare har skrivit under de senaste veckorna. cat /var/log/virtualmin/VisiHow.com_access_log |#Get Data från åtkomstlogg egrep "(q | p) =" |#use Endast poster som sannolikt har sökfrågor sed 's /% 22 / "/ g, s /% 20 / + / g; s / _ / + / g;' | #Do några formateringsändringar och viktigast ändra alla utrymmeneller understryker att + egrep -I "$ title2" | #search för $ title2 awk '{print $ 11}' | #extract endast sökdata sed 's / p = / q = / ig' | #handle Yahoo p = awk -F 'q =' '{print $ 2}' | #grab all data som börjar med q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20/ / g; '|#reformat till läsbart format cut -d "& amp;"-f 1 |#strip av andra parametrar awk '{print $ 0 "
"} "#add
länk raster eftersom vi planerar att exportera till en webbsida
== Låt oss skapa ett PHP
HTML GUI wrapper för detta nu ==att göra detta lätt användning vi vill komma åt användarfrågedata från en webbsida sökfunktionen.
queries.php
& lt; title & gt; Användar Frågor & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;
& lt; formen name = "sform" method = "get" & gt;Sök Titel: & lt; input size = value = "80" "? & Lt; php echo $ _GET [ 'title']; & gt;?"name = "title" type = "text" & gt;& Lt; input value = "Sök" type = "submit" & gt;TIPS: Du kan använda en partiell titel eller ens RegEx som & lt; / Form & gt; "Samsung * skada."
$ title = $ _GET [ 'title'];$ Title = preg_replace( "/ hur / i", "", $ title);$ Title2 = str_replace( "", "\ +", $ title);$ Title2 = str_replace( "_", "\ +", $ title2);
$ bigcmd = & lt; & lt; & lt; eof
egrep -i "(q | p) =" |#use Endast poster som sannolikt har sökfrågor sed 's /% 22 / "/ g, s /% 20 / + / g; s / _ / + / g;' | #Do några formateringsändringar och viktigast ändra alla utrymmeneller understryker att + egrep -i "$ title2" | #search för title2 awk '{print $ 11}' | #extract endast sökdata sed 's / p = / q = / ig' | #handle yahoo p = awk -F"q = ''{ print $ 2} '| #grab all data som börjar med q = sed' s / q = // g; s / + / / g; s /% 22 /" / g; s /% 20 // g; '|#reformat till läsbart format cut -d "& amp;"-f 1 |#strip av andra parametrar awk '{print $ 0 ""} "#add
länk raster eftersom vi planerar att mata ut till en webbsida
EOF;
om "{
tryck efter" $ titel "..."( $ title = "!)";print "aktuella veckan. ..";trycket `cat /var/log/virtualmin/visihow.com_access_log |#Get Data från accessloggen $ bigcmd `;// Vi stöder p = också eftersom Yahoo använder det. .. udda anka lol för( $ i = 1, i $ & lt; 6, $ i ++){ print "
$ i VECKA( S) AGO
";skriva ut `zcat /var/log/virtualmin/visihow.com_access_log.$i.gz |#Get Data från accessloggen $ bigcmd `;}
} & gt;
& lt; / eof
Kända problem
Den grep plockar upp skivor med hänvisnings data så det återvänder oönskade poster.Till exempel om någon söker på "iPhone" och en användare var på en iPhone sida sedan klickade för att gå till en Samsung sida, plockar denna kod upp iPhone från den remitterande och därmed omfattar det uppgifter som den borde.Jag arbetar på version 2, som gör en mycket mer och kommer att åtgärda det här felet genom att flytta en stor del av kommandoraden förbehandling i php.Koden kommer att vara mer trubbig, men kommer att ge mycket mer användbara och korrekta uppgifter.
Version 2: Mindre kommandoraden förbehandling och mer php bearbetning
Denna version har följande fördelar / nackdelar:
- Mindre kommandorad förbehandling innebär längre kod
- mer php innebär mer kontroll och funktioner
- ignorerar flera dubbla förfrågningar från samma IP
- Räknar flera sökningar i stället för att lista dem flera gånger
- Visa trender information genom att visa vecko summor
- utgången äri rullnings Divar för enkel visning av populära sidor
- Sorterade per fråge längder uppgick, vilket ungefär betyder mer populära sidor först visa
- lite snabb och smutsig JavaScript & amp;css att göra divs auto expandera för detaljerad visning
& lt; title & gt; Användar Frågor & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;
& lt; formen name = "sform" method = "get" & gt;Sök Titel: & lt; input size = värde "80" = "& 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ök" type = "submit" & gt;
TIPS: Ange * för att se allt.Du kan använda en partiell titel eller ens RegEx som "Samsung * skada." & Lt; / Form & gt;
funktion sortbylen( $ a, $ b){
retur strlen( $ b) -strlen( $ a);}
$ title = $ _GET [ 'title'];$ Title = preg_replace( "/ hur / i", "", $ title);$ Title2 = str_replace( "", "\ +", $ title);$ Title2 = str_replace( "_", "\ +", $ title2);
$ bigcmd = & lt; & lt; & lt; eof
egrep -i "(q | p) =" |#use Endast poster som sannolikt har sökfrågor sed 's /% 22 / "/ g, s /% 20 / + / g; s / _ / + / g;' | #Do några formateringsändringar och viktigast ändra alla utrymmeneller understryker att + awk '{print $ 1 "" $ 7 "" $ 11}' | egrep -i "$ title2" #search för title2EOF,
if( $ title = "!"){
print "Söker efter" $ titel "...", för( $ 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 = explodera( "\ n", $ searchlogdata), foreach( $ searchlogarray som $ sdata){ $ logparts = explodera( "", $ sdata), $ ip = $ logparts [0]; $ url = $ logparts[1], preg_match( "/( q | p) =( *).?"( \ & amp; |? $) / "$ logparts [2], matchar $);$ Ss = urldecode( $ matcher [2]);$ Ss = str_replace( "+", "", $ ss);if( (strlen( trim( $ ss)) & gt; 3) & amp; & amp;( preg_match( "# http \: \ / \ / # i", $ ss))!){ // hålla ut url från plats sökningarif( ($ ip = $ läpp) ||( $ ss = $ LSS)!){ $ läpp = ip $;$ LSS = $ ss;$ Ssdata [ "$ url"] = "$ ss |".}}} Uasort( $ array, "sortbylen ');foreach( $ ssdata som $ key = & gt; $ värde){ $ Sarr = explodera( "|", $ value);foreach( $ Sarr som s $){ if( strlen( $ s) & gt; 0) $ s2 [$ s] ++;} Arsort( $ s2);foreach( $ s2 som $ nyckel2 = & gt; $ val2){ $ urldata [$ key] [$ i] = "$ val2: $ NKL2";.$ 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 $ vecka){ print "
" $ wk ++ "VECKA( S) AGO: Antal sökningar =" $ 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; kant: 1px solid grå; overflow: rulla "& gt; $ vecka";}}
} & gt;
& lt; / eof
ToDo
Sortera efter fråge längd som en sekundär sortera, med längre frågor första
Det är det.Jag vill gärna höra dina erfarenheter med denna kod eller förslag till förbättringar.
Tips Tricks & amp;Varningar
- Obs: Jag stöder p = samt och standard q = eftersom Yahoo är den udda anka det är använder p =
- Version 2 php är mer komplex och jag kodning snabbt så några av de variablernamn valdes dåligt.vänligen inte klaga som dess fria kod.Men om du vill fixa det och dokumentera den och lägga den i wikin som version 3 som skulle vara fantastiskt:) betala det fram!
- Om du har problem med något av dessa steg, ställa en fråga om mer hjälp, eller lägga i kommentarerna nedan.
Kommentarer
| Daniel Utvalda Författare 69 artiklarna igång 2601 Artikel Edits 24,290 Points |
Daniel är presenterad författare med VisiHow.Daniel har uppnått nivån "löjtnant" med 24,290 poäng.Daniel har startat 69 artiklar och gjort 2,601 artikel ändringar.17,578 personer har läst Daniels artikel bidrag. |
Daniel : | Hej, mitt namn är Daniel. |
Daniel : | Kan jag hjälpa dig med ditt problem om "Lätt tolka / Sök en webbsida sökfråga strängar från Apache loggar med PHP awk och sed Linux kommandoradsverktyg"? |