HOW IT WORKS
- The Bash script football_check.sh, is the parent, which is configured in cron to run each Monday morning. Its job is to collect the source code from the BBC football results site, and grep for the first line matching the team we are looking for. It then dumps this into another file in the same directory which we will use later. Once it has completed this, it calls create_report.php
- create_report.php opens the files created above and checks if the team has lost. If they have won, or drawn, it will not send out the email. If an email needs to be sent, it contains a template to the content of the email, and creates the text contained in the mail, including a link to the match report.
THE SCRIPTS
- football_check.sh
#!/bin/bash # # A football results checker script. Checks if Portsmouth or # Palace have lost in the last week, and if so, sends out a # 'Commiseration' email # # # An HRH Script!!!! results_site="http://news.bbc.co.uk/sport1/hi/football/results/default.stm" palace_file="/var/www/hrhscript/footiecheck/palace_res.txt" pompy_file="/var/www/hrhscript/footiecheck/pompy_res.txt" palace_email="/var/www/hrhscript/footiecheck/palace_email.txt" pompy_email="/var/www/hrhscript/footiecheck/pompy_email.txt" # collect the data from the bbc site #wget --proxy=off $results_site -o results.txt wget $results_site -o results.txt # Check for the last time they played, and create a file with that information. cat default.stm | grep -m 1 "Crystal Palace" > $palace_file cat default.stm | grep -m 1 "Portsmouth" > $pompy_file # Run the php script to check these files ./create_report.php 2> /dev/null # Send out the emails if there is one to send. if [ -f $palace_email ] then ./paul_email.php rm -f $palace_email fi if [ -f $pompy_email ] then ./mark_email.php rm -f $pompy_email fi # Remove the used files to start fresh next monday rm -f default.stm # remove the BBC website information rm -f p*res.txt # remove the results text files rm -f results.txt
#!/usr/bin/php # This is a bit of code to parse the output from the football result files. If there are files to check, it # will have a look at them, work out whats happened, and send out the good news!!! # Assign variables $palace_email = "your.victim@theirdomain.co.uk"; $pompy_email = "your.victim@theirdomain.co.uk"; $palace_str = "Crystal Palace"; $pompy_str = "Portsmouth"; $palace_draw = false; $pompy_draw = false; # Collect data which has come from bash and wget $palace_text = `cat /var/www/hrhscript/footiecheck/palace_res.txt`; $pompy_text = `cat /var/www/hrhscript/footiecheck/pompy_res.txt`; $palace_len = strlen($palace_text); $pompy_len = strlen($pompy_text); # A function to clean up the html text passed in to a point where we can use it. # This is not done via a strip tags function as we can use this to our advantage later function clean_up_html($text_in) { $out = str_replace('<div class="mvb"><a href="', "", $text_in); $out = str_replace('</div>', "", $out); $out = str_replace('" class="stats">', " % ", $out); $out = str_replace(' | <a href="', "", $out); $out = str_replace('">Report', "", $out); $out = str_replace('<a href="', "", $out); return $out; } # A function to create the email text which will be sent out function create_email($team,$lost_to,$notify_name,$notify,$report_url,$file_name) { # Variables $start = "Dear $notify_name , \n\nIn my absence I would like to let you know that $team lost to $lost_to this weekend. \n\nI cannot personally tell you how rubbish their performance was, however, if it would make you any more miserable, I would like you to read the following match report: $report_url \n\nKind regards,\nLord Butler"; # Dump it into the file `echo "$start" > $file_name`; } # Check what we have to work with, and create the email text. if ( $palace_len > 200 ) { ######### If the script is here, there are palace resutls to analyse: # Split up the data into lots of little bits $palace_clean = clean_up_html($palace_text); $palace_parts = explode("</a>", $palace_clean); $home_data = explode(" % ", $palace_parts[0]); $away_data = explode(" % ", $palace_parts[1]); $result_data = explode(" ", $away_data[0]); $result = $result_data[1]; $scores = explode ("-", $result); $home_score = $scores[0]; $away_score = $scores[1]; ######### Start with the logic, find out if anything is worth sending. # Check if it was a draw. if ( $home_score == $away_score ) { $palace_draw = true; echo "The game was a draw \n";} if ( !$palace_draw ) { # Check if Palace where home or away if ( $home_data[1] == $palace_str ) { $palace_home = true; $palace_away = false;$opposing = $away_data[1];} if ( $away_data[1] == $palace_str ) { $palace_away = true; $palace_home = false; $opposing = $home_data[1];} # Check who won, home or away if ( $home_score > $away_score ) { $home_victory = true; } else { $home_victory = false; } # Check if palace lost if (( $palace_away && $home_victory ) || ( $palace_home && !$home_victory )) { create_email($palace_str,$opposing,"Paul",$palace_email,$palace_parts[2],"palace_email.txt"); } else { echo " $palace_str won \n"; } } } else { echo "Palace Results Not found"; } ################################# # Now check the pompy results # ################################# # Check what we have to work with, and create the email text. if ( $pompy_len > 200 ) { ######### If the script is here, there are pompy resutls to analyse: # Split up the data into lots of little bits $pompy_clean = clean_up_html($pompy_text); $pompy_parts = explode("</a>", $pompy_clean); $home_data = explode(" % ", $pompy_parts[0]); $away_data = explode(" % ", $pompy_parts[1]); $result_data = explode(" ", $away_data[0]); $result = $result_data[1]; $scores = explode ("-", $result); $home_score = $scores[0]; $away_score = $scores[1]; ######### Start with the logic, find out if anything is worth sending. # Check if it was a draw. if ( $home_score == $away_score ) { $pompy_draw = true; echo "The $pompy_str game was a draw \n";} if ( !$pompy_draw ) { # Check if pompy where home or away if ( $home_data[1] == $pompy_str ) { $pompy_home = true; $pompy_away = false; $opposing = $away_data[1];} if ( $away_data[1] == $pompy_str ) { $pompy_away = true; $pompy_home = false; $opposing = $home_data[1];} # Check who won, home or away if ( $home_score > $away_score ) { $home_victory = true; } else { $home_victory = false; } # Check if pompy lost if (( $pompy_away && $home_victory ) || ( $pompy_home && !$home_victory )) { create_email($pompy_str,$opposing,"Mark",$pompy_email,$pompy_parts[2],"pompy_email.txt"); } else { echo " $pompy_str won \n"; } } } else { echo "pompy Results Not found"; }
#!/usr/bin/php /* * The PHP mailer programs - HRH */ $to = "notify.victim1@theirdommain.co.uk, notify.victim1@theirdommain.co.uk"; $subject = "This Weekends results"; $msg = `cat /var/www/hrhscript/footiecheck/pompy_email.txt`; $header = 'From: Lord Butler'; mail($to,$subject,$msg,$header);
NOTES
- This script assumes you are able to send / relay mail from the host.
- Yes I know it could have all been handled by a single php script. It was written in a big hurry!
- I have added the following line to my crontab, so that this runs at half eight on Monday morning:
"30 8 * * 1 cd /var/www/hrhscript/footiecheck/ ; ./football_check.sh #Football check report"
No comments:
Post a Comment