From 1e4fc681f09b2074cf0307a2f7b30910976a8711 Mon Sep 17 00:00:00 2001 From: Steve Binkowski Date: Fri, 7 Jan 2022 15:28:48 -0500 Subject: [PATCH] Add access to pagination from last response --- disqusapi/disqusapi.php | 104 +++++++++++++++++++++++++--------------- 1 file changed, 65 insertions(+), 39 deletions(-) diff --git a/disqusapi/disqusapi.php b/disqusapi/disqusapi.php index 00ff7eb..d2ff352 100644 --- a/disqusapi/disqusapi.php +++ b/disqusapi/disqusapi.php @@ -4,11 +4,11 @@ * * http://disqus.com/api/ * - * @author DISQUS - * @copyright 2007-2010 Big Head Labs - * @link http://disqus.com/ - * @package disqusapi - * @version 0.1.1 + * @author DISQUS + * @copyright 2007-2010 Big Head Labs + * @link http://disqus.com/ + * @package disqusapi + * @version 0.1.1 * * $disqus = new DisqusAPI($secret_key) * $disqus->trends->listThreads() @@ -23,23 +23,27 @@ require_once(dirname(__FILE__) . '/url.php'); if (!extension_loaded('json')) { - require_once(dirname(__FILE__) . '/json.php'); - function dsq_json_decode($data) { - $json = new JSON; - return $json->unserialize($data); - } + require_once(dirname(__FILE__) . '/json.php'); + function dsq_json_decode($data) { + $json = new JSON; + return $json->unserialize($data); + } } else { - function dsq_json_decode($data) { - return json_decode($data); - } + function dsq_json_decode($data) { + return json_decode($data); + } } global $DISQUS_API_INTERFACES; $DISQUS_API_INTERFACES = dsq_json_decode(file_get_contents(dirname(__FILE__) . '/interfaces.json')); -class DisqusInterfaceNotDefined extends Exception {} +class DisqusInterfaceNotDefined extends Exception { + +} + class DisqusAPIError extends Exception { + public function __construct($code, $message) { $this->code = $code; $this->message = $message; @@ -47,7 +51,11 @@ public function __construct($code, $message) { } class DisqusResource { - public function __construct($api, $interface=null, $node=null, $tree=array()) { + + // For access to cursor information from the last call. + public $cursor = NULL; + + public function __construct($api, $interface = NULL, $node = NULL, $tree = []) { global $DISQUS_API_INTERFACES; if (!$interface) { @@ -62,14 +70,6 @@ public function __construct($api, $interface=null, $node=null, $tree=array()) { $this->tree = $tree; } - public function __get($attr) { - $interface = $this->interface->$attr; - if (!$interface) { - throw new DisqusInterfaceNotDefined(); - } - return new DisqusResource($this->api, $interface, $attr, $this->tree); - } - public function __call($name, $args) { $resource = $this->interface->$name; if (!$resource) { @@ -79,7 +79,7 @@ public function __call($name, $args) { foreach ((array)$resource->required as $k) { if (empty($kwargs[$k])) { - throw new Exception('Missing required argument: '.$k); + throw new Exception('Missing required argument: ' . $k); } } @@ -94,38 +94,48 @@ public function __call($name, $args) { $format = (!empty($kwargs['format']) ? $kwargs['format'] : $api->format); unset($kwargs['version'], $kwargs['format']); - $url = 'https://'.DISQUS_API_HOST; - $path = '/api/'.$version.'/'.implode('/', $this->tree).'/'.$name.'.'.$format; + $url = 'https://' . DISQUS_API_HOST; + $path = '/api/' . $version . '/' . implode('/', $this->tree) . '/' . $name . '.' . $format; if (!empty($kwargs)) { if ($resource->method == 'POST') { $post_data = $kwargs; } else { - $post_data = false; - $path .= '?'.dsq_get_query_string($kwargs); + $post_data = FALSE; + $path .= '?' . dsq_get_query_string($kwargs); } } - $response = dsq_urlopen($url.$path, $post_data); - + $response = dsq_urlopen($url . $path, $post_data); $data = call_user_func($api->formats[$format], $response['data']); if ($response['code'] != 200) { throw new DisqusAPIError($data->code, $data->response); } + DisqusAPICursor::setCursor(isset($data->cursor) ? $data->cursor : NULL); + return $data->response; } + + public function __get($attr) { + $interface = $this->interface->$attr; + if (!$interface) { + throw new DisqusInterfaceNotDefined(); + } + return new DisqusResource($this->api, $interface, $attr, $this->tree); + } } class DisqusAPI extends DisqusResource { - public $formats = array( - 'json' => 'dsq_json_decode' - ); - public function __construct($key=null, $format='json', $version='3.0') { + public $formats = [ + 'json' => 'dsq_json_decode', + ]; + + public function __construct($key = NULL, $format = 'json', $version = '3.0') { $this->key = $key; $this->format = $format; $this->version = $version; @@ -136,15 +146,31 @@ public function __invoke() { throw new Exception('You cannot call the API without a resource.'); } - public function setKey($key) { - $this->key = $key; - } - public function setFormat($format) { $this->format = $format; } + public function setKey($key) { + $this->key = $key; + } + public function setVersion($version) { $this->version = $version; } -} \ No newline at end of file +} + +class DisqusAPICursor { + + private static $cursor = NULL; + + private function __construct() { + } + + public static function getCursor() { + return static::$cursor; + } + + public static function setCursor($cursor) { + static::$cursor = $cursor; + } +}