mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2025-02-16 23:29:56 +03:00
[NovayaGazetaEuropeBridge] Add bridge (#2827)
This commit is contained in:
parent
65e6d9f454
commit
c78c1254a8
1 changed files with 141 additions and 0 deletions
141
bridges/NovayaGazetaEuropeBridge.php
Normal file
141
bridges/NovayaGazetaEuropeBridge.php
Normal file
|
@ -0,0 +1,141 @@
|
|||
<?php
|
||||
class NovayaGazetaEuropeBridge extends BridgeAbstract
|
||||
{
|
||||
|
||||
const MAINTAINER = 'sqrtminusone';
|
||||
const NAME = 'Novaya Gazeta Europe Bridge';
|
||||
const URI = 'https://novayagazeta.eu';
|
||||
|
||||
const CACHE_TIMEOUT = 3600; // 1 hour
|
||||
const DESCRIPTION = 'Returns articles from Novaya Gazeta Europe';
|
||||
|
||||
const PARAMETERS = array(
|
||||
'' => array(
|
||||
'language' => array(
|
||||
'name' => 'Language',
|
||||
'type' => 'list',
|
||||
'defaultValue' => 'ru',
|
||||
'values' => array(
|
||||
'Russian' => 'ru',
|
||||
'English' => 'en',
|
||||
)
|
||||
),
|
||||
'limit' => array(
|
||||
'name' => 'Limit',
|
||||
'type' => 'number',
|
||||
'required' => false,
|
||||
'title' => 'Maximum number of items to return',
|
||||
'defaultValue' => 20
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
public function collectData()
|
||||
{
|
||||
$url = 'https://novayagazeta.eu/api/v1/get/main';
|
||||
if ($this->getInput('language') != 'ru') {
|
||||
$url .= '?lang=' . $this->getInput('language');
|
||||
}
|
||||
|
||||
$json = getContents($url);
|
||||
$data = json_decode($json);
|
||||
|
||||
foreach ($data->records as $record) {
|
||||
foreach ($record->blocks as $block) {
|
||||
if (!property_exists($block, 'date')) {
|
||||
continue;
|
||||
}
|
||||
$title = strip_tags($block->title);
|
||||
if (!empty($block->subtitle)) {
|
||||
$title .= '. ' . strip_tags($block->subtitle);
|
||||
}
|
||||
$item = array(
|
||||
'uri' => self::URI . '/articles/' . $block->slug,
|
||||
'block' => $block,
|
||||
'title' => $title,
|
||||
'author' => join(', ', array_map(function ($author) {
|
||||
return $author->name;
|
||||
}, $block->authors)),
|
||||
'timestamp' => $block->date / 1000,
|
||||
'categories' => $block->tags
|
||||
);
|
||||
$this->items[] = $item;
|
||||
}
|
||||
}
|
||||
usort($this->items, function ($item1, $item2) {
|
||||
return $item2['timestamp'] <=> $item1['timestamp'];
|
||||
});
|
||||
if ($this->getInput('limit') !== null) {
|
||||
$this->items = array_slice($this->items, 0, $this->getInput('limit'));
|
||||
}
|
||||
foreach ($this->items as &$item) {
|
||||
$block = $item['block'];
|
||||
$body = '';
|
||||
if (property_exists($block, 'body') && $block->body !== null) {
|
||||
$body = self::convertBody($block);
|
||||
} else {
|
||||
$record_json = getContents("https://novayagazeta.eu/api/v1/get/record?slug={$block->slug}");
|
||||
$record_data = json_decode($record_json);
|
||||
$body = self::convertBody($record_data->record);
|
||||
}
|
||||
$item['content'] = $body;
|
||||
unset($item['block']);
|
||||
}
|
||||
}
|
||||
|
||||
private function convertBody($data) {
|
||||
$body = '';
|
||||
if ($data->previewUrl !== null && !$data->isPreviewHidden) {
|
||||
$body .= '<figure><img src="' . $data->previewUrl . '"/>';
|
||||
if ($data->previewCaption !== null) {
|
||||
$body .= '<figcaption>' . $data->previewCaption . '</figcaption>';
|
||||
}
|
||||
$body .= '</figure>';
|
||||
}
|
||||
if ($data->lead !== null) {
|
||||
$body .= "<p><b>{$data->lead}</b></p>";
|
||||
}
|
||||
if (!empty($data->body)) {
|
||||
foreach ($data->body as $datum) {
|
||||
$body .= self::convertElement($datum);
|
||||
}
|
||||
}
|
||||
return $body;
|
||||
}
|
||||
|
||||
private function convertElement($datum) {
|
||||
switch ($datum->type) {
|
||||
case 'text':
|
||||
return $datum->data;
|
||||
case 'image/single':
|
||||
$alt = strip_tags($datum->data);
|
||||
$res = "<figure><img src=\"{$datum->previewUrl}\" alt=\"{$alt}\" />";
|
||||
if ($datum->data !== null) {
|
||||
$res .= "<figcaption>{$datum->data}</figcaption>";
|
||||
}
|
||||
$res .= '</figure>';
|
||||
return $res;
|
||||
case 'text/quote':
|
||||
return "<figure><blockquote>{$datum->data}</blockquote></figure><br>";
|
||||
case 'embed/native':
|
||||
$desc = $datum->link;
|
||||
if (property_exists($datum, 'caption')) {
|
||||
$desc = $datum->caption;
|
||||
}
|
||||
return "<p><a link=\"{$datum->link}\">{$desc}</a></p>";
|
||||
case 'text/framed':
|
||||
$res = '';
|
||||
if (property_exists($datum, 'typeDisplay')) {
|
||||
$res .= "<p><b>{$datum->typeDisplay}</b></p>";
|
||||
}
|
||||
$res .= "<p>{$datum->data}</p>";
|
||||
if (property_exists($datum, 'attachment')
|
||||
&& property_exists($datum->attachment, 'type')) {
|
||||
$res .= self::convertElement($datum->attachment);
|
||||
}
|
||||
return $res;
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue