14Aug
זה HowTo יראה לכם כיצד בקלות בשורת הפקודה לינוקס לנתח קבצי יומן Apache כדי לקבל את נתוני השאילתה מחרוזת החיפוש שמשתמשים הקלד למצוא את דף האינטרנט שלך במנוע החיפוש.כללתי GUI חיפוש php וכן לשימוש קל.
- 1 השתמש awk ו- sed לנתח קבצי יומן Apache לחיפוש המשתמש הקליד שאילתות
- 2 בבעיות מוכרות
- 3 גרסה 2: העיבוד המקדים שורת הפקודה פחות ועוד עיבוד php
- 4 ToDo
- 5 טיפים וטריקים & amp;אזהרות
- 6 תגובות
השתמש awk ו- sed לנתח קבצי יומן Apache לחיפוש המשתמש הקליד שאילתות
הנה קוד הגלם כדי לעשות את העבודה.שים לב TITLE2 $ יש להחליף ידי מה אתה מחפש אבל החללים מוחלפים "\ +".
לדוגמה: "איך למצוא lollypop גדול" יהיה "איך \ + ל \ + למצוא \ + a \ + גדול \ + lollypop"
הסיבה לכך היא כי אני מתכנן להתקשר פונקציה PHP, איפה אנילאכלס TITLE2 $ כפי שתראו בהמשך.יכולתי לשים את egrep
מאוחר יותר, אבל אז לא יהיה לך את האפשרות של חיפוש שניהם כותרת הדף ושאילתות.הגרסה המקורית שלי פשוט חפשה שאילתות אבל רציתי פונקציה יכולתי לקרוא בקלות עבור דף נתון ואראה את כל השאילתות שמשתמשים מוקלדות בשבועות האחרונים. חתול /var/log/virtualmin/VisiHow.com_access_log |נתוני #Get מיומן גישת egrep "(q | p) =" |#Use רק רשומות שבהן סביר שאילתות חיפוש sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | #Do כמה שינויי עיצוב והכי חשוב לשנות את כל החלליםאו מדגיש עד + egrep -אני "$ TITLE2" | #search עבור TITLE2 $ awk '{להדפיס 11 $}' | נתוני החיפוש #extract רק sed 's / p = / q = / ig' | p יאהו #handle = awk -'q =' F '{להדפיס 2 $}' | #grab כל הנתונים שמתחילות באות Q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20/ / g; '|#reformat כדי -d לחתוך פורמט קריא "& amp;"-f 1 |#strip את הפרמטרים האחרים awk '{להדפיס 0 $ "
"}' #add הפסקות הקישור
כי אנחנו מתכננים פלט לדף אינטרנט
== בואו ליצור מעטפת GUI HTML PHP
לכך עכשיו ==כדי להפוך שימוש זה בקלות אנחנו רוצים לגשת לנתונים שאילתת המשתמש מטופס חיפוש דף אינטרנט.
queries.php
& lt; title & gt; שאילתות משתמש & lt; / title & gt;& Lt; meta name = "רובוטים" תוכן = "noindex" & gt;
& lt; טופס name = "sform" method = "get" & gt;כותרת חיפוש: & lt; input size = "80" value = "? & Lt; php echo _GET $ [ 'title']; & gt;?"name = "title" type = "text" & gt;& Lt; ערך קלט = "חפש" type = "submit" & gt;רמז: אתה יכול להשתמש בתואר חלקי או אפילו regex כמו & lt; / form & gt; "סמסונג * ניזק."
$ title = $ _GET [ 'title'];$ Title = preg_replace( "/ איך / i", "", כותרת $);TITLE2 $ = str_replace( "", "\ +", הכותרת $);TITLE2 $ = str_replace( "_", "\ +", $ TITLE2);
$ bigcmd = & lt; & lt; & lt; EOF
egrep -i "(q | p) =" |#Use רק רשומות שבהן סביר שאילתות חיפוש sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | #Do כמה שינויי עיצוב והכי חשוב לשנות את כל החלליםאו מדגיש עד + egrep -i "TITLE2 $" | #search עבור awk TITLE2 '{להדפיס 11 $}' | נתוני החיפוש #extract רק sed 's / p = / q = / ig' | yahoo #handle p = awk -f'q =' '{להדפיס 2 $}' | #grab כל הנתונים שמתחילות באות Q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20 // g; '|#reformat כדי -d לחתוך פורמט קריא "& amp;"-f 1 |#strip את הפרמטרים האחרים awk '{להדפיס 0 $ ""}' #add הפסקות הקישור
כי אנחנו מתכננים פלט לדף אינטרנט
EOF;
אם "{print
מחפש" title $ "..."( הכותרת $ = "!)";הדפסה "השבוע הנוכחי. ..";הדפסת `החתול /var/log/virtualmin/visihow.com_access_log |נתוני #Get מן bigcmd $ יומן הגישה `;// אנו תומכים p = מדי, כי yahoo משתמשת כי. .. עוף מוזר lol עבור( $ i = 1; $ i & lt; 6; $ i ++){ print "
i $ בשבוע( S) לפני
";להדפיס `zcat /var/log/virtualmin/visihow.com_access_log.$i.gz |נתוני #Get מן bigcmd $ יומן הגישה `;}
} & gt;
& lt; / EOF
בבעיות מוכרות
grep הוא להרים רשומות עם נתוני הפניות כך הוא חוזר רשומות רצויות.לדוגמה, אם מישהו מחפש "iPhone" ומשתמש היה בדף iPhone מכן לחצו כדי לעבור לדף סמסונג, קוד זה מרים את iPhone מן המפנה ובכך כלולים נתונים אשר שאסור שזה יקרה.אני עובד על גרסה 2, שעושה הרבה יותר יהיה לתקן את הבאג הזה על ידי הזזת הרבה של עיבוד מקדים שורת הפקודה לתוך PHP.הקוד יהיה יותר קהה, אבל ייתן הרבה יותר מידע שימושי ומדויק.
גרסה 2: העיבוד המקדים שורת הפקודה פחות ויותר PHP עיבוד
גרסה זו יש את היתרונות / החסרונות הבאים:
- פחות שורת הפקודה העיבוד המקדים עוד אמצעי קוד
- php פירושו יותר מלאה כולל
- מתעלם בקשות כפולות מרובות מאותו IP
- ספירת חיפושים מרובים במקום לפרט אותם מספר פעמים
- הצג במגמת מידע על ידי הצגת הסיכומים שבועי
- פלט הואב divs לגלילה כדי להקל על הצפייה של
- ממוין הדפים הפופולריים ידי אורכי שאילתה הסתכם, מתוכם כ אומר הדפים הפופולריים יותר להראות
- קצת מהיר ומלוכלך JavaScript & amp הראשון;css כדי להפוך את אוטומטי divs להרחיב עבור
& lt צפייה מפורט; title & gt; משתמש שאילתות & lt; / title & gt;& Lt; meta name = "רובוטים" תוכן = "noindex" & gt;
& lt; טופס name = "sform" method = "get" & gt;כותרת חיפוש:? & Lt; input size = "80" value = "& lt; php
אם( strlen( $ _ GET [ 'title']) & gt; 0){
הד _GET $ [ 'title'];
} אחר{
הד "*"; & lt; br = "" type = "text" & gt;} & gt;? "name = "title" / & gt;& Lt; ערך קלט = "חפש" type = "submit" & gt;רמז
: זן * לראות הכל.אתה יכול להשתמש בתואר חלקי או אפילו regex כמו "סמסונג * ניזק." & Lt; / form & gt;
פונקציה sortbylen( $ a, $ b){ strlen בתמורה
( ב $) -strlen( $ a);} הכותרת
$ = $ _GET [ 'title'];$ Title = preg_replace( "/ איך / i", "", כותרת $);TITLE2 $ = str_replace( "", "\ +", הכותרת $);TITLE2 $ = str_replace( "_", "\ +", $ TITLE2);
$ bigcmd = & lt; & lt; & lt; EOF
egrep -i "(q | p) =" |#Use רק רשומות שבהן סביר שאילתות חיפוש sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | #Do כמה שינויי עיצוב והכי חשוב לשנות את כל החלליםאו מדגיש כדי awk + '{להדפיס $ 1 "" 7 $ "" 11 $}' | egrep -i "TITLE2 $" #search עבור TITLE2EOF;
אם( $ title = "!"){ print
"מחפש" title $ "..."; עבור( $ i = 0; $ i & lt; 6; $ i ++){ if( $ i == 0){ /var/log/virtualmin/visihow.com_access_log searchlogdata = `חתול $ | bigcmd` $;} else{ searchlogdata =` zcat /var/log/virtualmin/visihow.com_access_log.$i.gz $ | bigcmd` $;} $ searchlogarray = להתפוצץ( "\ n", searchlogdata $); foreach( searchlogarray $ כפי sdata $){ = logparts $ להתפוצץ( "", sdata $); $ ip = $ logparts [0]; $ url = $ logparts[1]; preg_match( "/( q | p) =( *).?"( \ & amp; |? $) / ", $ logparts [2], גפרורים $);ss $ = urldecode( התאמות $ [2]);$ Ss = str_replace( "+", "", ss $);אם( (strlen( לקצץ( ss $)) & gt; 3) & amp; & amp;( preg_match( "# http \: \ / \ / # אני", $ ss))!){ // להרחיק url מחיפושים באתראם( ($ ip = $ שפתיים) ||( ss $ = $ LSS)!!){ שפתיים $ = $ ip;$ LSS = $ ss;ssdata $ [ "$ url"] = "ss $ |".;}}} Uasort( $ מערך, 'sortbylen');foreach( ssdata $ כפי $ key = & gt; $ ערך){ $ sarr = להתפוצץ( "|", ערך $);foreach( $ sarr כמו $ s){ if( strlen( $ s) & gt; 0) $ s2 [$ s] ++;} Arsort( s2 $);foreach( s2 $ כפי $ key2 = & gt; VAL2 $){ urldata $ [$ מפתח] [$ i] = "VAL2 $: $ key2";.stot $ [$ מפתח] [$ i] + = $ VAL2;} מוגדר( s2 $);} מוגדר( ssdata $);foreach}( $ urldata כמו $ url = & gt; $ weekdata){ print " & lt; a target =" _ blank "href =" $ url "& gt; $ url & lt; / a & gt;
";WK $ = 0;... Foreach( $ weekdata בשבוע $){ print "
" $ WK ++ "בשבוע( S) לפני: חיפושים סה"כ =" $ stot [url $] [$ WK-1] "
";.הדפסה "& lt; div onmouseover =" this.style.height = 500 "onmouseout =" this.style.height = 100 "& lt; br =" "& gt; & lt; / div & gt; style = 'רוחב: 800px; גובה: 100 פיקסלים; הגבול: 1px מוצק אפור; overflow: לגלול '& gt; $ בשבוע ";}}
} & gt;
& lt; / EOF
ToDo
מיין לפי אורך השאילתה כמעין משנית, עם
הראשון שאילתות עוד זהו זה.אני אשמח לשמוע את החוויות שלך עם קוד זה או הצעות לשיפור.
טיפים וטריקים & amp;אזהרות
- הערה: אני תומך p = וכן שקל התקן = כי יאהו להיות העוף המוזר הוא משתמש p =
- הגרסה 2 php מורכב יותר ואני קידוד מהר כל כך חלק מהמשתניםשמות נבחרים גרועים.בבקשה לא להתלונן כקוד החופשי שלה.אבל אם אתה רוצה לתקן את זה עד ולתעד אותו ולהוסיף אותו לתוך ויקי כמו גרסה 3 זה יהיה פנטסטי:) תעביר את זה הלאה!
- אם יש לך בעיות עם כל אחד משלבים אלה, לשאול שאלה לקבלת עזרה נוספת, או לפרסם בסעיף ההערות למטה.
תגובות
| דניאל מומלצים מחבר 69 מאמרים Started 2,601 סעיף עריכות 24,290 נקודות |
דניאל הוא מחבר מומלצים עם VisiHow.דניאל השיג את הרמה של "סגן" עם 24,290 נקודות.דניאל החל 69 מאמרים ועשה 2,601 עריכות מאמר.17,578 אנשים לקרוא תרומות מאמרו של דניאל. |
דניאל : | היי, שמי דניאל. |
דניאל : | אני יכול לעזור לך עם הבעיה שלך על "בקלות לנתח / לחפש מחרוזות לשאילתת החיפוש של דף אינטרנט מיומני Apache באמצעות awk php ומקודדים שורת הפקודה לינוקס sed"? |