webstar Posted December 29, 2006 Share Posted December 29, 2006 [code]<?php// Declare variables //$debug = false;$url = "http://www.mto.gov.on.ca/english/traveller/conditions/rdclosure.htm";//$url = "./roadclosed1/rdclosure.htm";#$email_recip = "****";$email_recip = "*****";$email_subject = "Closed Road Update" . date(" (G:i:s)");$email_from = "WxServer Roads";$email_from_addr = "*****";$message_header = "A new/updated road closure has been posted. Below is a summary,\n====START====\n";$message_footer = "\n";$eventfilename = "roadclosed.txt";// DON'T EDIT PAST HERE UNLESS YOU KNOW WHAT YOU'RE DOING //// MAIN PROGRAM ///$webpage = read_web($url);$content = find_data($webpage, "<DIV CLASS=\"content\">", "</DIV>"); // All content is in the <DIV></DIV>$content = find_data($content, "<TABLE", "</TABLE>"); // Look for the events HTML table$curr_events = read_html_table($content,true); // Parse the events HTML table$old_content = read_events_file(); // Read the old events HTML tableif ($old_content) { $old_events = read_html_table($old_content, true); // Parse the old events HTML table} else { unset($old_events);}if ($debug) { print("Number of current events = " . count($curr_events) . "\n"); }if ($debug) { print("Number of old events = " . count($old_events) . "\n"); }//Go through the current events and look for a corrisponding old event$send_email = false; // Flag used to see if an email should be sent for new closure events$event_message = $message_header;for ($curr_event_num = 0; $curr_event_num < count($curr_events); $curr_event_num++) { $curr_event_found = false; for ($old_event_num = 0; $old_event_num < count($old_events); $old_event_num++) { if ($debug) { print("Comparing (" . $curr_events[$curr_event_num][0] . "?" . $old_events[$old_event_num][0] . ") & (" . $curr_events[$curr_event_num][1] . "?" . $old_events[$old_event_num][1] . ") & (" . $curr_events[$curr_event_num][2] . "?" . $old_events[$old_event_num][2] . ")\n"); } if (($curr_events[$curr_event_num][0] == $old_events[$old_event_num][0]) && ($curr_events[$curr_event_num][1] == $old_events[$old_event_num][1]) && ($curr_events[$curr_event_num][2] == $old_events[$old_event_num][2]) ) { // Found a matching event $curr_event_found = true; } } if (!$curr_event_found) { // Add the not found current event to the message $send_email = true; if ($debug) { print ("Found a new event:\nRegion: " . $curr_events[$curr_event_num][1] . "\nHighway(s): " . $curr_events[$curr_event_num][0] . "\nReason: " . $curr_events[$curr_event_num][2] . "\n=====END=====\n"); }// $event_message .= ">>> NEW <<<\n"; $event_message .= "Region: " . $curr_events[$curr_event_num][1] . "\nHighway(s): " . $curr_events[$curr_event_num][0] . "\nReason: " . $curr_events[$curr_event_num][2] . "\n====END====\n"; } else {// if ($debug) { print ("Found a previously sent event:\nRegion: " . $curr_events[$curr_event_num][1] . "\nHighway(s): " . $curr_events[$curr_event_num][0] . "\nReason: " . $curr_events[$curr_event_num][2] . "\n====END====\n"); }// $event_message .= "Region: " . $curr_events[$curr_event_num][1] . "\nHighway(s): " . $curr_events[$curr_event_num][0] . "\nReason: " . $curr_events[$curr_event_num][2] . "\n====END====\n"; }}$event_message .= $message_footer;//Send an email if there is a new eventif ($send_email) { print ("Sending the message below to " . $email_recip . ", from \"" . $email_from . "\" <" .$email_from_addr . ">.\n" . $event_message . "\n"); mail ($email_recip, $email_subject, $event_message, "From: \"" . $email_from . "\" <" .$email_from_addr . ">"); print ("Found a new event:\nRegion: " . $curr_events[$curr_event_num][1] . "\nHighway(s): " . $curr_events[$curr_event_num][0] . "\nReason: " . $curr_events[$curr_event_num][2] . "\n==========\n");}//Save the events to check the next time the script is runwrite_events_file($content);// Functions ////read_web - Read the web page// $strURL ==> URL of the webpagefunction read_web($strURL){ global $debug; $buffer = ""; if($debug){ print("Reading \"$strURL\".\n"); } $fh = fopen($strURL, "rb"); if ($fh === false) { return ""; } while (!feof($fh)) { $buffer .= fread($fh, 1024); } fclose($fh); return $buffer;} // end function read_web// find)data - Gets a substring of the webpage by scraping the data// $strFile ==> text of the webpage// $strStart_Pattern ==> start of the substring// $strEnd_Pattern ==> end of the substringfunction find_data($strFile,$strStart_Pattern,$strEnd_Pattern, $intStart_Position = 0){ global $debug; if($debug){ print("Searching for \"$strStart_Pattern\"...\"$strEnd_Pattern\".\n"); } $first_match = strpos($strFile,$strStart_Pattern, $intStart_Position); if ($first_match) { # find the begining of the tag for ($i = $first_match; $i>0;$i--) { $char = $strFile[$i]; if ($char == "<" ) { $first_match = $i; //record the location of the tag break; } } $partialbuffer = substr($strFile,$first_match,strlen($strFile) - $first_match); # find the end of the sub string $second_match = strpos($partialbuffer,$strEnd_Pattern); return substr($partialbuffer,0,$second_match + strlen($strEnd_Pattern)); } else { return(false); }} //end function find_data// read_html_table - Read the contents of an HTML table and return the array(s)// strHTMLTable ==> HTML table text// boolSkipFirstRow ==> Skip the first row if it contains column titles (true/false)function read_html_table($strHTMLTable, $boolSkipFirstRow){ global $debug; $table = ""; $th = ""; $td = ""; if($boolSkipFirstRow) { $rownum = -2; } else { $rownum = -1; } $rowopen = false; $strPos = 0; do { // Scrape through the table if (strtoupper(substr($strHTMLTable, $strPos, 3)) == "<TR") { //Look for the rows $strPos +=3; $strPos = strpos($strHTMLTable, ">", $strPos) + 1; // Find the end of the row open tag $rowopen = true; $rownum++; } if (strtoupper(substr($strHTMLTable, $strPos, 5)) == "</TR>") { $rowopen = false; $strPos += 5; // jump to the end of the close tag } if (strtoupper(substr($strHTMLTable, $strPos, 3)) == "<TH") { // Look for headers $strPos += 3; $strPos = strpos($strHTMLTable, ">", $strPos) + 1; // Find the end of the header open tag $endPos = strpos(strtoupper($strHTMLTable), "</TH>", $strPos); // Find the header close tag $th[] = substr($strHTMLTable, $strPos, $endPos - $strPos); $strPos = $endPos + 5; if($debug) { print("Found column header \"" . end($th) . "\" (" . (count($th) - 1) . ")\n"); } } if (strtoupper(substr($strHTMLTable, $strPos, 3)) == "<TD") { // Look for cells $strPos += 3; $strPos = strpos($strHTMLTable, ">", $strPos) + 1; // Find the end of the cell open tag $endPos = strpos(strtoupper($strHTMLTable), "</TD>", $strPos); // Find the cell close tag $td[$rownum][] = str_replace(array("\n","\t"),"",substr($strHTMLTable, $strPos, $endPos - $strPos)); $td[$rownum][count($td[$rownum]) - 1] = str_replace("\r"," ",$td[$rownum][count($td[$rownum]) - 1]); $td[$rownum][count($td[$rownum]) - 1] = preg_replace("/[\s]+/"," ",$td[$rownum][count($td[$rownum]) - 1]); $strPos = $endPos + 5; if($debug) { print("Found cell data \"" . end($td[$rownum]) . "\" (" . $rownum . "|" . (count($td[$rownum]) - 1) . ")\n"); } } $strPos++; } while ($strPos <= strlen($strHTMLTable)); return $td; /* if ($boolRowOneColumnTitles) { if ($th[0] != "") { // Create a new array that uses the headers as the array key $newtd = ""; $header = ""; $row = ""; if ($debug) { print(count($th) . " headers\n"); } if ($debug) { print(count($td) . " rows\n"); } for ($row = 0; $row <= count($td) - 1; $row++) { for ($cell = 0; $cell <= count($td[$row]) - 1; $cell++) { if ($debug) { print("(". $row . "|" . $cell . ") => " . $th[$cell] . "(" . $row . ") = " . $td[$row][$cell] . "\n"); } $newtd[$th[$cell]][$cell] = $td[$row][$cell]; } } return $newtd; } else { // There are no headers, so just return the td array. return $td; } } else { // Just return what's in the td array return $td; } */} //end function readhtmltable// read_events_file - Reads the old events from event filefunction read_events_file(){ global $debug; $eventfile = "roadclosed.txt"; $buffer = ""; if (is_file($eventfile)) { // Check to see if the event log exists $fh = fopen($eventfile, "r"); while (!feof($fh)) { $buffer .= fread($fh, 1024); } return $buffer; } return; // Return an empty array} // end function read_events_file// write_events_file - Writes the current events to a file to be read later// - strEvents ==> array of eventsfunction write_events_file($strEvents){ global $debug; $eventfile = "roadclosed.txt"; $fh = fopen($eventfile, "w"); if ($fh === false) { if ($debug) { print("ERROR: Could not write to \"" . $eventfile . "\"!\n"); } } else { fwrite ($fh, $strEvents); fclose ($fh); } return;} // end function write_events_fileprint ("ClosedRoadScript");print date(" (G:i:s)");?>[/code]That is my coding. What I need to do is if the script finds the words "There are no reported closures." it will stop running and not email anything out.I hope someone can help me. Quote Link to comment Share on other sites More sharing options...
trq Posted December 29, 2006 Share Posted December 29, 2006 Narrow your problem down and please, give us a better description of what it is your trying to do. Quote Link to comment Share on other sites More sharing options...
webstar Posted December 29, 2006 Author Share Posted December 29, 2006 I am trying to make an if statement that does the following but I can't figure out how to word it or where to place it.if $message == There are no reported closures. then DIE;Now I think it needs to be before this part.[code]//Send an email if there is a new eventif ($send_email) { print ("Sending the message below to " . $email_recip . ", from \"" . $email_from . "\" <" .$email_from_addr . ">.\n" . $event_message . "\n"); mail ($email_recip, $email_subject, $event_message, "From: \"" . $email_from . "\" <" .$email_from_addr . ">"); print ("Found a new event:\nRegion: " . $curr_events[$curr_event_num][1] . "\nHighway(s): " . $curr_events[$curr_event_num][0] . "\nReason: " . $curr_events[$curr_event_num][2] . "\n==========\n");}[/code]So that it stops the script from sending the email.Does this help any? Quote Link to comment Share on other sites More sharing options...
webstar Posted December 29, 2006 Author Share Posted December 29, 2006 So is the 3rd Party Script forum the place where bad people go? It's not a 3rd Party Script. It was a script created for me which you won't find anyplace else online that anyone else can use. The only problem is the guy who created it for me got shipped overseas for 6 months. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.