פרק 5: עיבוד וניתוח של עמודי רשתרודפים אחרי התגיםכנראה, שהסימונים בתוך אתר ה Weather Underground משמשים לעיבוד פנימי, אולם גם אנו יכולים לעשות בהם שימוש. על הסקריפט שלנו מוטל, בסך- הכל לחפש את מציין הטמפרטורה, בכדי לשלוף את הנתון המעודכן... מה שאנו אכן נעשה, דבר נוסף הוא המרה של הטמפרטורה ממעלות צלסיוס, לפרנהייט (ב Weather Underground משתמשים בשיטה המטרית, אולם תושבי Smallville הם אמריקאים לכל דבר). #grab temperature and convert to Fahrenheit if ($weatherPage=~/<!-- Temperature == ([0-9]+\.[0-9]+) -->/i) {$weatherTemp=$1; #convert C to F below $weatherTemp=int(($weatherTemp*1.8)+32); $weatherTemp.="° F" } else {$weatherTemp="N/A"} תנאי ה if בודק אם העמוד הנבדק כולל את מציין הטמפרטורה. במקרה שהאתר יהיה בלתי זמין בשל בעיות רשת, או לחילופין תהיה בעיה בתוכנו הפנימי, הוראת התנאי תיכשל, והמשתנה weatherTemp$ יקבל את הערך "N/A" (לא זמין). שימו לב שאנו משתמשים בביטוי הרגולרי match (התאם) על מנת לאתר את המיקום של מציין הטמפרטורה. הביטוי נועד למצוא את המשפט, בדיוק כמו שהוא מופיע בקוד הHTML אולם מאפשר לערך המספרי של הטמפרטורה להשתנות "([0-9]+\.[0-9]+)". בתרגום חופשי ניתן לקרוא את הביטוי כ" מופע אחד או יותר של ספרה, לאחריה נקודה עשרונית, ולאחריה ספרה אחת או יותר. כיוון שהביטוי תחום בתוך סוגריים החלק החלק המתאים ייושם אוטומטית לתוך המשתנה $1 של Perl (אם היה עוד זוג סוגריים החלק המתאים להם היה מושם לתוך $2 וכו'). אנו משימים את הערך של $1, הטמפרטורה, לתוך המשתנה weatherTemp$ ולאחר מכן מבצעים עליו מספר פעולות חשבוניות בכדי להסב את הטמפ' למעלות פרנהייט, ולאחר מכן מכניסים את הסימן למעלות ואת האות F (המסמלת פרנהייט). ועתה כאשר אנו כבר יודעים את הטמפרטורה נשאר לנו, בסך הכל להכניסה לתוך מציין המקום המתאים בעיתוננו, ובכך ליצור את העיתון עם מזג האוויר המעודכן תמיד. הקישו כאן לצפיה בהדגמה חייה של העיתון המשופר. #!/usr/bin/perl use CGI; use LWP::Simple; $cgiobject=new CGI; $cgiobject->use_named_parameters; print $cgiobject->header; #read in template page $templateFile="smallville.html"; open(INFILE,"<$templateFile"); @templatePage=<INFILE>; close(INFILE); #condense page array into one scalar variable $resultPage=join("",@templatePage); #determine current date ($sec,$min,$hour,$mday, $mon,$year,$wday,$yday,$isdst)=localtime(time); $curDay=(Sunday,Monday,Tuesday,Wednesday, Thursday,Friday,Saturday)[$wday]; $curMonth=(January,February,March,April, May,June,July,August,September, October,November,December)[$mon]; $liveDate="$curDay, $curMonth $mday, ".($year+1900); #search-and-replace on date $resultPage=~s/<!--INSERT DATE HERE-->/$liveDate/g; #set URL to weather web page $weatherURL="http://www.wunderground.com/cgi-bin/ findweather/getForecast?query=14850"; #retrieve this web page $weatherPage=get($weatherURL); #grab temperature and convert to Fahrenheit if ($weatherPage=~/<!-- Temperature == ([0-9]+\.[0-9]+) -->/i) {$weatherTemp=$1; #convert C to F below $weatherTemp=int(($weatherTemp*1.8)+32); $weatherTemp.="° F" } else {$weatherTemp="N/A"} #search-and-replace on weather $resultPage=~s/<!--INSERT WEATHER HERE-->/$weatherTemp/g; #done, output page to browser print $resultPage; LWP:Simpe ,פשוט
|