logo


פרק 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.="&deg; 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.="&deg; 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 ,פשוט
תוכן עניינים
TokeParser :שליפת תגיות בלי מאמץ

אודות
תוכן עניינים
פרק 1: ה Perl שאתם צריכים לדעת
פרק 2: קישור Perl לעמודי הרשת
פרק 3: שמירת מצב
פרק 4: HTML בחטף ותבניות (Templates) רשת
פרק 5: עיבוד וניתוח של עמודי רשת
מטרה פשוטה: קוד כמו שסבתא נהגה להכין  
פשוט, LWP:Simple  
רודפים אחרי תגים  
שליפת תגיות בלי מאמץ: TokeParser  
ניתוח תכונות בקלות  
השיטה היא לנתח: מסכם עמודי רשת  
פרק 6: להשתעשע עם בסיסי נתונים מקוונים:אקסס
פרק 7: המודל MySQL
פרק 8: להשתעשע בבסיסי נתונים - GUFE - החזית הכללית והשימושית
פרק 9: המילניום - ניהול זמן ותאריך
פרק 10: ניהול רשימות והאשים (Hashs)
פרק 11: הפניה להפניה
פרק 12: הכרות עם mod_perl