JayMan Posted January 2, 2018 Share Posted January 2, 2018 Hi All, Looking for some help if anyone can provide it. I run this Twitter Bot. https://twitter.com/OntarioRoads A friend made this script years ago but he has passed and I've been able to keep it running just by sheer luck but I am trying to improve it since Twitter can do 280 char now. How it works is the below script looks on this website for anything new http://www.mto.gov.on.ca/english/traveller/trip/road_closures.shtml and then makes it into a format like this and emails it out. Subject: *-NEW-* HWY 401 Westbound Collector(s) [ McCOWAN ROAD - ] - Disabled Vehicle ...21:23:09 Body: *-NEW-*HWY 401 Westbound Collector(s) [ McCOWAN ROAD - ] - Disabled VehicleHighway: HWY 401Direction: WestboundFrom/At: McCOWAN ROADLanes Affected: right lane and right shoulder blockedReason Disabled VehicleLast Change: Entered 2018-01-01 21:13Event Start: January 01, 2018 21:13====END==== To which then I grab the subject line and feed it into a basic command line windows app I have and tweet it out. What I am looking to do is increase the info in the tweets now that I can. I think if I can just add more info to the subject line and then tweet that out it would work but I am up for any ideas you may all have to make it better. I don't make any money off this twitter bot you will see there are no ads etc.. I've included a screenshot of a piece of the DB so you can see what all gets populated. <?php // Declare variables // $debug = false; //$url = "http://www.mto.gov.on.ca/english/traveller/conditions/rdclosure.htm"; $url = "http://www.mto.gov.on.ca/english/traveller/trip/road_closures.shtml"; //$url = "./road_closures.html"; $email_recip = "REMOVED"; #$email_recip = "REMOVEDt"; $email_from = "REMOVED"; $email_from_addr = "REMOVED"; $message_header = ""; $message_footer = ""; $arfield1 = array("summary","highway","direction","fromat","to","lanesaffected","trafficimpact","reason","others","eventstart","eventend"); $cntarfield1 = count($arfield1); $timenow = date("Y-m-d H:i:s"); // Connect to database $dbname = "mevents"; $dbuser = "REMOVED"; $dbpass = "REMOVED"; $datestamp = date(" ...G:i:s"); $link = mysql_connect('localhost',$dbuser,$dbpass); if (!$link) { die('Could not connect: ' . mysql_error()); } mysql_select_db($dbname); // DON'T EDIT PAST HERE UNLESS YOU KNOW WHAT YOU'RE DOING // // MAIN PROGRAM /// $webpage = read_web($url); $content = find_data($webpage, "<!-- MIDDLE COLUMN", "</html>"); $content = find_data($content, "</div><a ", "</html>"); $curr_events = read_html_table($content,true); // Parse the events HTML table if ($curr_events["totalevents"]>0) { $sql = "update mEvents set eventid = 'xRoadInfo' where eventid like 'RoadInfo%'"; $result = mysql_query($sql); } for ($curr_event_num = 1; $curr_event_num <= $curr_events["totalevents"]; $curr_event_num++) { $send_email = false; // Flag used to see if an email should be sent for new closure events $event_message = $message_header; $curr_event_found = false; if ($curr_events[$curr_event_num]["unscheduledevents"]==0) { $sql = "select * from mEvents where eventid = '".($curr_events[$curr_event_num]["eventid"])."' limit 1"; } else { $unscd = explode("\n",$curr_events[$curr_event_num]["others"]["data"]); $sql = "select * from mEvents where eventid='xRoadInfo' and highway='".$curr_events[$curr_event_num]["highway"]["data"]."' and direction='".$curr_events[$curr_event_num]["direction"]["data"]."' and fromat='".$curr_events[$curr_event_num]["fromat"]["data"]."'"; if ($unscd[0]!="") $sql .= " and others like '".$unscd[0]."%'"; } $result = mysql_query($sql); if (mysql_num_rows($result)>0) $curr_event_found = true; if (!$curr_event_found) { // Add the not found current event to the message $send_email = true; if ($curr_events[$curr_event_num]["eventend"]["data"]=="") { $event_message .= "*-NEW-*\n"; } else { $event_message .= "-CLEARED-\n"; } if ($debug) $event_message .= $curr_events[$curr_event_num]["eventid"]; $sqlquery = "insert into mEvents (eventid,date_insert"; $sqlval = "('".$curr_events[$curr_event_num]["eventid"]."','".$timenow."'"; for ($a=0;$a<$cntarfield1;$a++) { $sqlquery .= ",`".$arfield1[$a]."`"; $sqlval .= ",'".addslashes($curr_events[$curr_event_num][$arfield1[$a]]["data"])."'"; if ($curr_events[$curr_event_num][$arfield1[$a]]["data"]!="") { $event_message .= $curr_events[$curr_event_num][$arfield1[$a]]["field"]."".$curr_events[$curr_event_num][$arfield1[$a]]["data"]."\n"; } if ($debug) $event_message .= "<br/>"; } $sqlquery .= ") values".$sqlval.")"; mysql_query($sqlquery); $event_message .= "====END====\n"; $email_subject = "*-NEW-* "; $email_subject .= $curr_events[$curr_event_num]["summary"]["data"]; $email_subject .= $datestamp; //$email_subject .= " #BellLetsTalk"; } else { $row = mysql_fetch_array($result); if ($row["eventend"]=="") { if ($curr_events[$curr_event_num]["unscheduledevents"]==0) { if ($curr_events[$curr_event_num]["eventend"]["data"]!="") { $send_email = true; $event_message .= "-CLEARED-\n"; if ($debug) $event_message .= $curr_events[$curr_event_num]["eventid"]; $sqlquery = "update mEvents set date_update='$timenow'"; for ($a=0;$a<$cntarfield1;$a++) { $sqlquery .= ",`".$arfield1[$a]."`='".addslashes($curr_events[$curr_event_num][$arfield1[$a]]["data"])."'"; if ($curr_events[$curr_event_num][$arfield1[$a]]["data"]!="") { $event_message .= $curr_events[$curr_event_num][$arfield1[$a]]["field"]."".$curr_events[$curr_event_num][$arfield1[$a]]["data"]."\n"; } if ($debug) $event_message .= "<br/>"; } $sqlquery .= " where eventid='".$curr_events[$curr_event_num]["eventid"]."'"; mysql_query($sqlquery); $event_message .= "====END====\n"; $email_subject = "*-CLR-* "; $email_subject .= $curr_events[$curr_event_num]["summary"]["data"]; $email_subject .= $datestamp; //$email_subject .= " #BellLetsTalk"; } } else { $sqlquery = "update mEvents set eventid='".$curr_events[$curr_event_num]["eventid"]."' where id=".$row["id"]; mysql_query($sqlquery); } } } $event_message .= $message_footer; //Send an email if there is a new/resolved event if ($send_email) { if ($debug) print ("Sending the message below to " . $email_recip . ", from \"" . $email_from . "\" <" .$email_from_addr . ">.\n" . $event_message . "\n"); else mail ($email_recip, $email_subject, $event_message, "From: \"" . $email_from . "\" <" .$email_from_addr . ">"); } } // FOUR LINES BELOW COMMENTED OUT TO STOP REPEATING MESSAGE //if ($curr_events["totalevents"]>0) //{ // $sql = "delete from mEvents where eventid = 'xRoadInfo'"; //$result = mysql_query($sql); //} mysql_close(); // 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,$arfield1,$cntarfield1; $arrevents = array(); preg_match_all('/<a id="Event.+<\/table>/Us',$strHTMLTable,$dataevents); $dataevents = $dataevents[0]; $countdataevents = count($dataevents); $j = 0; for($i=0; $i<$countdataevents; $i++) { preg_match('/<a id="Event([0-9]{4,8})">/', $dataevents[$i], $matches); $eventid = $matches[1]; //if ($eventid>0) { $j++; $arrevents[$j]["eventid"] = $eventid; preg_match('/<th colspan="2">(.*)<\/th>/', $dataevents[$i], $matches); $arrevents[$j]["summary"]["field"] = ""; $arrevents[$j]["summary"]["data"] = $matches[1]; preg_match_all('/<tr>.+<\/tr>/Us',$dataevents[$i],$tr); $tr = $tr[0]; $counttr = count($tr); for ($k=1;$k<$cntarfield1;$k++) { $arrevents[$j][$arfield1[$k]]["field"] = ""; $arrevents[$j][$arfield1[$k]]["data"] = ""; } if ($eventid>0) $arrevents[$j]["unscheduledevents"] = 0; else $arrevents[$j]["unscheduledevents"] = 1; for ($k=1;$k<$counttr;$k++) { preg_match_all('/<td.+<\/td>/Us',$tr[$k],$td); $td = $td[0]; $td1 = cleandatafield(cleandata($td[0])); if (checkdatafield($td1)==1) { $arrevents[$j][$td1]["field"] = cleandata($td[0])." "; $arrevents[$j][$td1]["data"] = cleandata($td[1]); } else { if (cleandata($td[1])!="") { $arrevents[$j]["others"]["field"] = ""; $arrevents[$j]["others"]["data"] .= cleandata($td[0])." ".cleandata($td[1])."\n"; } } } } } echo "<br/>\ntotal ".$j; $arrevents["totalevents"] = $j; return $arrevents; } //end function readhtmltable function cleandata($x) { $y = $x; $y = preg_replace('/<td.+>/U',"",$y); $y = str_replace("</td>","",$y); $y = str_replace("<strong>","",$y); $y = str_replace("</strong>","",$y); $y = str_replace("/r/n","",$y); $y = trim($y); return $y; } function cleandatafield($x) { $y = $x; $y = str_replace("/","",$y); $y = str_replace(":","",$y); $y = str_replace(" ","",$y); $y = strtolower($y); return $y; } function checkdatafield($x) { global $debug,$arfield1,$cntarfield1; $found = 0; for ($i=0;$i<$cntarfield1;$i++) { if ($x==$arfield1[$i]) $found = 1; } return $found; } print ("ClosedRoadScript"); print date(" G:i:s"); ?> 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.