forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			86 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			86 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php | ||
|  | 
 | ||
|  | // a PHP client library for pubsubhubbub
 | ||
|  | // as defined at http://code.google.com/p/pubsubhubbub/
 | ||
|  | // written by Josh Fraser | joshfraser.com | josh@eventvue.com
 | ||
|  | // Released under Apache License 2.0
 | ||
|  | 
 | ||
|  | class Publisher { | ||
|  |      | ||
|  |     protected $hub_url; | ||
|  |     protected $last_response; | ||
|  |      | ||
|  |     // create a new Publisher
 | ||
|  |     public function __construct($hub_url) { | ||
|  |          | ||
|  |         if (!isset($hub_url)) | ||
|  |             throw new Exception('Please specify a hub url'); | ||
|  |          | ||
|  |         if (!preg_match("|^https?://|i",$hub_url))  | ||
|  |             throw new Exception('The specified hub url does not appear to be valid: '.$hub_url); | ||
|  |              | ||
|  |         $this->hub_url = $hub_url; | ||
|  |     } | ||
|  | 
 | ||
|  |     // accepts either a single url or an array of urls
 | ||
|  |     public function publish_update($topic_urls, $http_function = false) { | ||
|  |         if (!isset($topic_urls)) | ||
|  |             throw new Exception('Please specify a topic url'); | ||
|  |          | ||
|  |         // check that we're working with an array
 | ||
|  |         if (!is_array($topic_urls)) { | ||
|  |             $topic_urls = array($topic_urls); | ||
|  |         } | ||
|  |          | ||
|  |         // set the mode to publish
 | ||
|  |         $post_string = "hub.mode=publish"; | ||
|  |         // loop through each topic url 
 | ||
|  |         foreach ($topic_urls as $topic_url) { | ||
|  | 
 | ||
|  |             // lightweight check that we're actually working w/ a valid url
 | ||
|  |             if (!preg_match("|^https?://|i",$topic_url))  | ||
|  |                 throw new Exception('The specified topic url does not appear to be valid: '.$topic_url); | ||
|  |              | ||
|  |             // append the topic url parameters
 | ||
|  |             $post_string .= "&hub.url=".urlencode($topic_url); | ||
|  |         } | ||
|  |          | ||
|  |         // make the http post request and return true/false
 | ||
|  |         // easy to over-write to use your own http function
 | ||
|  |         if ($http_function) | ||
|  |             return $http_function($this->hub_url,$post_string); | ||
|  |         else | ||
|  |             return $this->http_post($this->hub_url,$post_string); | ||
|  |     } | ||
|  | 
 | ||
|  |     // returns any error message from the latest request
 | ||
|  |     public function last_response() { | ||
|  |         return $this->last_response; | ||
|  |     } | ||
|  |      | ||
|  |     // default http function that uses curl to post to the hub endpoint
 | ||
|  |     private function http_post($url, $post_string) { | ||
|  |          | ||
|  |         // add any additional curl options here
 | ||
|  |         $options = array(CURLOPT_URL => $url, | ||
|  |                          CURLOPT_POST => true, | ||
|  |                          CURLOPT_POSTFIELDS => $post_string, | ||
|  |                          CURLOPT_USERAGENT => "PubSubHubbub-Publisher-PHP/1.0"); | ||
|  | 
 | ||
|  |     	$ch = curl_init(); | ||
|  |     	curl_setopt_array($ch, $options); | ||
|  | 
 | ||
|  |         $response = curl_exec($ch); | ||
|  |         $this->last_response = $response; | ||
|  |         $info = curl_getinfo($ch); | ||
|  | 
 | ||
|  |         curl_close($ch); | ||
|  |          | ||
|  |         // all good
 | ||
|  |         if ($info['http_code'] == 204)  | ||
|  |             return true; | ||
|  |         return false;	 | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | ?>
 |