[ 'name' => 'User', 'type' => 'text', 'required' => true, 'exampleValue' => 'NigelFarage', ], 'limit' => self::LIMIT, ] ]; public function collectData() { $user = trim($this->getInput('user')); if (preg_match('#^https?://parler\.com/(\w+)#i', $user, $m)) { $user = $m[1]; } $posts = $this->fetchParlerProfileFeed($user); foreach ($posts as $post) { // For some reason, the post data is placed inside primary attribute $primary = $post->primary; $item = [ 'title' => mb_substr($primary->body, 0, 100), 'uri' => sprintf('https://parler.com/feed/%s', $primary->uuid), 'author' => $primary->username, 'uid' => $primary->uuid, 'content' => nl2br($primary->full_body), ]; $date = DateTimeImmutable::createFromFormat('m/d/YH:i A', $primary->date_str . $primary->time_str); if ($date) { $item['timestamp'] = $date->getTimestamp(); } else { Debug::log(sprintf('Unable to parse data from Parler.com: "%s"', $date)); } if (isset($primary->image)) { $item['enclosures'][] = $primary->image; $item['content'] .= sprintf('', $primary->image); } $this->items[] = $item; } } private function fetchParlerProfileFeed(string $user): array { $json = getContents('https://parler.com/open-api/profile-feed.php', [], [ CURLOPT_POSTFIELDS => http_build_query([ 'user' => $user, 'page' => '1', ]), ]); $response = json_decode($json); if ($response === false) { throw new \Exception('Unable to decode json from Parler'); } if ($response->status !== 'ok') { throw new \Exception('Did not get OK from Parler'); } if ($response->data === []) { throw new \Exception('Unknown Parler username'); } return $response->data->posts; } }