Jump to content

Script Die Help


webstar

Recommended Posts

[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 table
if ($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 event
if ($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 run
write_events_file($content);

// Functions //
//read_web - Read the web page
//          $strURL ==> URL of the webpage
function 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 substring
function 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 file
function 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 events
function 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_file

print ("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.
Link to comment
Share on other sites

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 event
if ($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?
Link to comment
Share on other sites

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.
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.