mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2025-01-17 14:18:35 +01:00
[Parler] feat: add new bridge (#2634)
This commit is contained in:
parent
57c8806954
commit
7379e2b3d5
80
bridges/ParlerBridge.php
Normal file
80
bridges/ParlerBridge.php
Normal file
@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
final class ParlerBridge extends BridgeAbstract
|
||||
{
|
||||
const NAME = 'Parler.com bridge';
|
||||
const URI = 'https://parler.com';
|
||||
const DESCRIPTION = 'Fetches the latest posts from a parler user';
|
||||
const MAINTAINER = 'dvikan';
|
||||
const CACHE_TIMEOUT = 60 * 15; // 15m
|
||||
const PARAMETERS = [
|
||||
[
|
||||
'user' => [
|
||||
'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('<img loading="lazy" src="%s">', $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;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user