jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set $this->authorized = false; } public function test() { try { $this->auth(); echo "Successfully communicated with the API"; } catch (Exception $err) { echo "Error connecting to Ghost: ".$err->getMessage(); } } public function auth() { if ($this->authorized) { return; } $this->authorized = false; $attrs = [ 'cookies' => $this->jar, 'headers' => ['content-type' => 'application/json'] ]; $body["username"] = $this->config->username; $body["password"] = $this->config->password; $vars = [ 'http_errors' => false, 'timeout' => 5, 'body' => json_encode($body) ]; $result = parent::execute($this->url('ghost/api/v3/admin/session'), $attrs, $vars, 'POST'); if (null === $result) { throw new Exception("Error contacting the API"); } if ($result->getStatusCode() !== 201) { switch ($result->getStatusCode()) { case 404: throw new Exception("User is not found"); case 422: throw new Exception("Invalid credentials"); } throw new Exception("Unknown error"); } $this->authorized = true; return $result; } public function livestats() { $status = 'inactive'; $this->auth(); $attrs = [ 'cookies' => $this->jar, 'headers' => ['content-type' => 'application/json'] ]; $result = parent::execute($this->url('ghost/api/v3/admin/posts/'), $attrs, []); if (null === $result) { throw new Exception("Could not connect to Ghost"); } $response = json_decode($result->getBody()); $posts = $response->posts; $statuses = array_count_values(array_column($posts, 'status')); $data = [ 'draft' => isset($statuses['draft']) ? $statuses['draft'] : 0, 'scheduled' => isset($statuses['scheduled']) ? $statuses['scheduled'] : 0, 'published' => isset($statuses['published']) ? $statuses['published'] : 0 ]; $status = 'active'; return parent::getLiveStats($status, $data); } public function url($endpoint) { $api_url = parent::normaliseurl($this->config->url).$endpoint; return $api_url; } }