diff options
author | Andrew Dolgov <[email protected]> | 2017-01-21 23:06:35 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2017-01-21 23:06:35 +0300 |
commit | 0047f2578f126cb6de2eed928e86ed7340c3854d (patch) | |
tree | f0232c896bfd89b4ff5d9f57402cb14c9693660d /lib/pubsubhubbub/Publisher.php | |
parent | 6be7fe00aeb5f7dbed1f6ed6fd84f316032cfa0a (diff) | |
parent | 566e8574fb4fe2325069625557eb34e8f619c2e4 (diff) |
Merge branch 'lib-upgrades' into 'master'
Third-party library upgrades
* lib: Upgrade php-gettext from 1.0.11 to 1.0.12
* lib: Upgrade accept-to-gettext.php from 2003-08-14 to 2007-04-01
* lib: Upgrade JShrink from 0.5.1 to 1.1.0
* lib: Upgrade mobile-detect from svn r44 (2012-05-03) to 2.8.24 (2016-11-11)
* lib: Upgrade php-publisher from ??? to a5d6a0e (2016-11-15)
* lib: Upgrade php-subscriber from ??? to 1213f89 (2016-11-15)
* lib: Upgrade script.aculo.us from 1.8.3 to 1.9.0
* lib: Upgrade timezones.txt from 2010k/l/m/n/2011a to 2016j
See merge request !40
Diffstat (limited to 'lib/pubsubhubbub/Publisher.php')
-rw-r--r-- | lib/pubsubhubbub/Publisher.php | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/lib/pubsubhubbub/Publisher.php b/lib/pubsubhubbub/Publisher.php new file mode 100644 index 000000000..df7c1920e --- /dev/null +++ b/lib/pubsubhubbub/Publisher.php @@ -0,0 +1,125 @@ +<?php +/** + * a PHP client library for pubsubhubbub. + * + * @link https://github.com/pubsubhubbub/ + * + * @author Josh Fraser | joshfraser.com | [email protected] + * @license Apache License 2.0 + */ +namespace pubsubhubbub\publisher; + +use InvalidArgumentException; + +class Publisher +{ + /** + * @var string + */ + protected $hub_url; + + /** + * @var string + */ + protected $last_response; + + /** + * Create a new Publisher. + * + * @param string $hub_url + */ + public function __construct($hub_url) + { + if (! isset($hub_url)) { + throw new InvalidArgumentException('Please specify a hub url'); + } + + if (! preg_match('|^https?://|i', $hub_url)) { + throw new InvalidArgumentException('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. + * + * @param string|array $topic_urls + * @param callable $http_function + * + * @return mixed + */ + public function publish_update($topic_urls, $http_function = false) + { + if (! isset($topic_urls)) { + throw new InvalidArgumentException('Please specify a topic url'); + } + + // check that we're working with an array + if (! is_array($topic_urls)) { + $topic_urls = [$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 InvalidArgumentException('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); + } + + return $this->http_post($this->hub_url, $post_string); + } + + /** + * Returns any error message from the latest request. + * + * @return string + */ + public function last_response() + { + return $this->last_response; + } + + /** + * Default http function that uses curl to post to the hub endpoint. + * + * @param string $url + * @param string $post_string + * + * @return bool + */ + private function http_post($url, $post_string) + { + // add any additional curl options here + $options = [ + 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); + + return $info['http_code'] == 204; + } +} |