diff options
Diffstat (limited to 'lib/pubsubhubbub')
-rw-r--r-- | lib/pubsubhubbub/README.txt | 21 | ||||
-rw-r--r-- | lib/pubsubhubbub/publisher.php | 86 |
2 files changed, 107 insertions, 0 deletions
diff --git a/lib/pubsubhubbub/README.txt b/lib/pubsubhubbub/README.txt new file mode 100644 index 000000000..3d27c4044 --- /dev/null +++ b/lib/pubsubhubbub/README.txt @@ -0,0 +1,21 @@ +This PHP library for PubSubHubbub was written by Josh Fraser (joshfraser.com) and is released under the Apache 2.0 License + +Usage: +// specify which hub you want to use. in this case we'll use the demo hub on app engine. +$hub_url = "http://pubsubhubbub.appspot.com/"; + +// create a new pubsubhubbub publisher +$p = new Publisher($hub_url); + +// specify the feed that has been updated +$topic_url = "http://www.onlineaspect.com"; + +// notify the hub that the specified topic_url (ATOM feed) has been updated +// alternatively, publish_update() also accepts an array of topic urls +if ($p->publish_update($topic_url)) { + echo "$topic_url was successfully published to $hub_url"; +} else { + echo "Ooops..."; + print_r($p->last_response()); +} +
\ No newline at end of file diff --git a/lib/pubsubhubbub/publisher.php b/lib/pubsubhubbub/publisher.php new file mode 100644 index 000000000..f176a9b8a --- /dev/null +++ b/lib/pubsubhubbub/publisher.php @@ -0,0 +1,86 @@ +<?php + +// a PHP client library for pubsubhubbub +// as defined at http://code.google.com/p/pubsubhubbub/ +// written by Josh Fraser | joshfraser.com | [email protected] +// 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; + } +} + +?>
\ No newline at end of file |