<?php

		// --- GOOGLE ACCOUNT SETTINGS -------------------------


	define( 'GOOGLE_USERNAME', 'mygoogleemail@gmail.com' );
	define( 'GOOGLE_PASSWORD', 'supersecretpassword');


	// --- ALERT SETTINGS ----------------------------------


	// alert frequency ( how often you recieve emails )
	//	- as it happens: 0
	//	- daily: 1
	//	- weekly: 6
	define( 'ALERT_FREQUENCY', 0 );

	// result type ( what to seaerch )
	//	- everything: 7
	//	- discussions: 8
	//	- news: 1
	//	- blogs: 4
	//	- video: 9
	//	- books: 22
	define( 'ALERT_RESULT_TYPE', 7 );

	// result quality filter
	//	- best results: 0
	//	- all results: 1
	define( 'ALERT_QUALITY', 0 );


	// --- CURL SETTINGS ----------------------------------


	define( 'GOOGLE_COOKIEFILE', 'cookies.txt' );

	class GAlerts
	{
		
		public function createAlert( $search ) {
	
	        $ch = curl_init();
	        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
	        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
	        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	        curl_setopt($ch, CURLOPT_COOKIEJAR, GOOGLE_COOKIEFILE);
	        curl_setopt($ch, CURLOPT_COOKIEFILE, GOOGLE_COOKIEFILE);
	        curl_setopt($ch, CURLOPT_HEADER, 0);
	        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
	        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
	        curl_setopt($ch, CURLOPT_TIMEOUT, 120);
	
	        curl_setopt($ch, CURLOPT_URL,
	        'https://accounts.google.com/ServiceLogin?hl=en&service=alerts&continue=http://www.google.com/alerts/manage');
	        $data = curl_exec($ch);
	
	        $formFields = $this->getFormFields( $data );
	
	        $formFields['Email']  = GOOGLE_USERNAME;
	        $formFields['Passwd'] = GOOGLE_PASSWORD;
	        unset($formFields['PersistentCookie']);
	
	        $post_string = '';
	        foreach($formFields as $key => $value) {
	        	$post_string .= $key . '=' . urlencode($value) . '&';
	        }
	
	        $post_string = substr($post_string, 0, -1);
	
	        curl_setopt($ch, CURLOPT_URL, 'https://accounts.google.com/ServiceLoginAuth');
	        curl_setopt($ch, CURLOPT_POST, 1);
	        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
	
	        $result = curl_exec($ch);
	
	        if (strpos($result, '<title>Redirecting') === false) {
	            var_dump($result);
	            die("Login failed");
	        } else {

	            curl_setopt($ch, CURLOPT_URL, 'http://www.google.com/alerts');
	            curl_setopt($ch, CURLOPT_POST, 0);
	            curl_setopt($ch, CURLOPT_POSTFIELDS, null);
	
	            $result = curl_exec($ch);
	
	            // Create alert
	
	            preg_match('/<input type="hidden" name="x" value="([^"]+)"/', $result, $matches);
	
	            $post = array(
	                "x" => $matches[1],			// anti-XSRF key
	                "q" => $search,				// Search term  
	                "t" => ALERT_RESULT_TYPE,	// Result type: 7-everything, 8-discussions
	                "f" => ALERT_FREQUENCY,		// Frequency: 0: as it happens, 1: daily, 6: weekly
	                "l" => ALERT_QUALITY,		// All results: 1, best results: 0
	                "e" => "feed"		// Type of delivery: rss: "feed"
	            );
	
	            $post_string = '';
	
	            foreach($post as $key => $value) {
	                $post_string .= $key . '=' . urlencode($value) . '&';
	            }
	
	            $post_string = substr($post_string, 0, -1);
				
	            curl_setopt($ch, CURLOPT_URL, 'http://www.google.com/alerts/create');
	            curl_setopt($ch, CURLOPT_POST, 1);
	            curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
	
	            $result = curl_exec($ch);

	            $matches = array();
	            preg_match('#<a href="(http://www.google.com/alerts/feeds/[\d/]+)"#', $result, $matches);
	
	            $top_alert = $matches[1];
	
	            return $top_alert;
	        }
	    }
	
	
	    private function getFormFields($data)
	    {
	        if (preg_match('/(<form.*?id=.?gaia_loginform.*?<\/form>)/is', $data, $matches)) {
	            $inputs = $this->getInputs($matches[1]);
	
	            return $inputs;
	        } else {
	            die("didn't find login form");
	        }
	    }
	
	    private function getInputs($form)
	    {
	        $inputs = array();
	
	        $elements = preg_match_all('/(<input[^>]+>)/is', $form, $matches);
	
	        if ($elements > 0) {
	            for($i = 0; $i < $elements; $i++) {
	                $el = preg_replace('/\s{2,}/', ' ', $matches[1][$i]);
	
	                if (preg_match('/name=(?:["\'])?([^"\'\s]*)/i', $el, $name)) {
	                    $name  = $name[1];
	                    $value = '';
	
	                    if (preg_match('/value=(?:["\'])?([^"\'\s]*)/i', $el, $value)) {
	                        $value = $value[1];
	                    }
	
	                    $inputs[$name] = $value;
	                }
	            }
	        }
	
	        return $inputs;
	    }

	} // end class	    

?>