XBMC Gmail notifications.
I have this php script currently running on my nas to let me know if I have any new mail. It works with gmail.com, googlemail.com and google app address’. I simply use cron to execute the script every 15 minutes.
i.e. (0,15,30,45 17-23 * * * php /var/www/checkgmail.php > /dev/null #Check Gmail)
i.e. (0,15,30,45 17-23 * * * php /var/www/checkgmail.php > /dev/null #Check Gmail)
1: <?php2: $emailaddress = 'someemailaddress@gmail.com'; // i.e. bob@gmail.com or bob@bobsdomain.com if you use google apps
3: $password = 'somepassword'; // email password
4: $xbmcaddress = '192.168.1.1'; // IP or hostname of your xbmc
5: $xbmcport = '8080'; // port the xbmc web server is running on.
6: 7:8: $domain = explode('@',$emailaddress);
9: if ($domain['1'] == 'gmail.com' || $domain['1'] == 'googlemail.com')
10: {11: $use_googleapps = false;
12: } else {
13: $use_googleapps = true;
14: }15: if ($use_googleapps == true)
16: {17: $url = 'https://mail.google.com/a/'.$domain['1'].'/feed/atom';
18: } else {
19: $url = 'https://mail.google.com/mail/feed/atom';
20: } 21: 22: 23: $ch = curl_init ($url); 24: curl_setopt($ch, CURLOPT_HEADER, 0); 25: curl_setopt($ch, CURLOPT_PROTOCOLS,CURLPROTO_HTTPS); 26: curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 27: curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);28: $curllogin = $emailaddress.':'.$password;
29: curl_setopt($ch, CURLOPT_USERPWD,$curllogin); 30: $rawdata=curl_exec($ch); 31: curl_close ($ch); 32: 33: $array = xml2array($rawdata);34: $array = $array['feed'];
35: //print_r($array);
36:37: if ($array['fullcount'] < 1)
38: {39: echo ' no new mail ';
40: } else {
41: if ($array['fullcount'] == 1)
42: {43: fopen("http://".$xbmcaddress.":".$xbmcport."/xbmcCmds/xbmcHttp?command=ExecBuiltIn(Notification(".$emailaddress.",You%20Have%20A%20New%20Email!))",r);
44: } else {
45: fopen("http://".$xbmcaddress.":".$xbmcport."/xbmcCmds/xbmcHttp?command=ExecBuiltIn(Notification(".$emailaddress.".",You%20Have%20".$array['fullcount']."%20New%20Emails!))",r);
46: } 47: 48: 49: } 50: 51: 52: 53: function xml2array($contents, $get_attributes=1, $priority = 'tag') { 54: if(!$contents) return array(); 55: 56: if(!function_exists('xml_parser_create')) {57: //print "'xml_parser_create()' function not found!";
58: return array(); 59: } 60: 61: //Get the XML parser of PHP - PHP must have this module for the parser to work 62: $parser = xml_parser_create('');63: xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); # http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss
64: xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); 65: xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); 66: xml_parse_into_struct($parser, trim($contents), $xml_values); 67: xml_parser_free($parser); 68: 69: if(!$xml_values) return;//Hmm... 70: 71: //Initializations 72: $xml_array = array(); 73: $parents = array(); 74: $opened_tags = array(); 75: $arr = array(); 76: 77: $current = &$xml_array; //Refference 78: 79: //Go through the tags. 80: $repeated_tag_index = array();//Multiple tags with same name will be turned into an array 81: foreach($xml_values as $data) { 82: unset($attributes,$value);//Remove existing values, or there will be trouble 83: 84: //This command will extract these variables into the foreach scope 85: // tag(string), type(string), level(int), attributes(array). 86: extract($data);//We could use the array by itself, but this cooler. 87: 88: $result = array(); 89: $attributes_data = array(); 90: 91: if(isset($value)) { 92: if($priority == 'tag') $result = $value; 93: else $result['value'] = $value; //Put the value in a assoc array if we are in the 'Attribute' mode 94: } 95: 96: //Set the attributes too. 97: if(isset($attributes) and $get_attributes) { 98: foreach($attributes as $attr => $val) { 99: if($priority == 'tag') $attributes_data[$attr] = $val; 100: else $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr' 101: } 102: } 103: 104: //See tag status and do the needed.105: if($type == "open") {//The starting of the tag '<tag>'
106: $parent[$level-1] = &$current; 107: if(!is_array($current) or (!in_array($tag, array_keys($current)))) { //Insert New tag 108: $current[$tag] = $result; 109: if($attributes_data) $current[$tag. '_attr'] = $attributes_data; 110: $repeated_tag_index[$tag.'_'.$level] = 1; 111: 112: $current = &$current[$tag]; 113: 114: } else { //There was another element with the same tag name 115: 116: if(isset($current[$tag][0])) {//If there is a 0th element it is already an array 117: $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result; 118: $repeated_tag_index[$tag.'_'.$level]++; 119: } else {//This section will make the value an array if multiple tags with the same name appear together 120: $current[$tag] = array($current[$tag],$result);//This will combine the existing item and the new item together to make an array 121: $repeated_tag_index[$tag.'_'.$level] = 2; 122: 123: if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well 124: $current[$tag]['0_attr'] = $current[$tag.'_attr']; 125: unset($current[$tag.'_attr']); 126: } 127: 128: } 129: $last_item_index = $repeated_tag_index[$tag.'_'.$level]-1; 130: $current = &$current[$tag][$last_item_index]; 131: } 132:133: } elseif($type == "complete") { //Tags that ends in 1 line '<tag />'
134: //See if the key is already taken.
135: if(!isset($current[$tag])) { //New Key
136: $current[$tag] = $result;137: $repeated_tag_index[$tag.'_'.$level] = 1;
138: if($priority == 'tag' and $attributes_data) $current[$tag. '_attr'] = $attributes_data;
139:140: } else { //If taken, put all things inside a list(array)
141: if(isset($current[$tag][0]) and is_array($current[$tag])) {//If it is already an array...
142:143: // ...push the new element into that array.
144: $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
145:146: if($priority == 'tag' and $get_attributes and $attributes_data) {
147: $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
148: }149: $repeated_tag_index[$tag.'_'.$level]++;
150:151: } else { //If it is not an array...
152: $current[$tag] = array($current[$tag],$result); //...Make it an array using using the existing value and the new value
153: $repeated_tag_index[$tag.'_'.$level] = 1;
154: if($priority == 'tag' and $get_attributes) {
155: if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well
156:157: $current[$tag]['0_attr'] = $current[$tag.'_attr'];
158: unset($current[$tag.'_attr']);
159: } 160:161: if($attributes_data) {
162: $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
163: } 164: }165: $repeated_tag_index[$tag.'_'.$level]++; //0 and 1 index is already taken
166: } 167: } 168:169: } elseif($type == 'close') { //End of tag '</tag>'
170: $current = &$parent[$level-1]; 171: } 172: } 173:174: return($xml_array);
175: } 176: ?>
Comments
Post a Comment