2020-08-20 08:36:11 +03:00
|
|
|
<?php
|
|
|
|
|
|
|
|
class EpicgamesBridge extends BridgeAbstract
|
2022-07-01 16:10:30 +03:00
|
|
|
{
|
2020-08-20 08:36:11 +03:00
|
|
|
const NAME = 'Epic Games Store News';
|
|
|
|
const MAINTAINER = 'otakuf';
|
|
|
|
const URI = 'https://www.epicgames.com';
|
|
|
|
const DESCRIPTION = 'Returns the latest posts from epicgames.com';
|
|
|
|
const CACHE_TIMEOUT = 3600; // 60min
|
|
|
|
|
|
|
|
const PARAMETERS = [ [
|
|
|
|
'postcount' => [
|
|
|
|
'name' => 'Limit',
|
2020-10-15 10:53:19 +03:00
|
|
|
'type' => 'number',
|
2022-03-24 13:59:34 +03:00
|
|
|
'required' => true,
|
2020-08-20 08:36:11 +03:00
|
|
|
'title' => 'Maximum number of items to return',
|
|
|
|
'defaultValue' => 10,
|
|
|
|
],
|
|
|
|
'language' => [
|
|
|
|
'name' => 'Language',
|
|
|
|
'type' => 'list',
|
|
|
|
'values' => [
|
|
|
|
'English' => 'en',
|
|
|
|
'العربية' => 'ar',
|
|
|
|
'Deutsch' => 'de',
|
|
|
|
'Español (Spain)' => 'es-ES',
|
|
|
|
'Español (LA)' => 'es-MX',
|
|
|
|
'Français' => 'fr',
|
|
|
|
'Italiano' => 'it',
|
|
|
|
'日本語' => 'ja',
|
|
|
|
'한국어' => 'ko',
|
|
|
|
'Polski' => 'pl',
|
|
|
|
'Português (Brasil)' => 'pt-BR',
|
|
|
|
'Русский' => 'ru',
|
|
|
|
'ไทย' => 'th',
|
|
|
|
'Türkçe' => 'tr',
|
|
|
|
'简体中文' => 'zh-CN',
|
|
|
|
'繁體中文' => 'zh-Hant',
|
|
|
|
],
|
|
|
|
'title' => 'Language of blog posts',
|
|
|
|
'defaultValue' => 'en',
|
|
|
|
],
|
|
|
|
]];
|
|
|
|
|
|
|
|
public function collectData()
|
|
|
|
{
|
|
|
|
$api = 'https://store-content.ak.epicgames.com/api/';
|
|
|
|
|
2020-09-14 11:14:35 +03:00
|
|
|
// Get sticky posts first
|
|
|
|
// Example: https://store-content.ak.epicgames.com/api/ru/content/blog/sticky?locale=ru
|
|
|
|
$urlSticky = $api . $this->getInput('language') . '/content/blog/sticky';
|
|
|
|
// Then get posts
|
|
|
|
// Example: https://store-content.ak.epicgames.com/api/ru/content/blog?limit=25
|
|
|
|
$urlBlog = $api . $this->getInput('language') . '/content/blog?limit=' . $this->getInput('postcount');
|
|
|
|
|
2022-01-02 12:36:09 +03:00
|
|
|
$dataSticky = getContents($urlSticky);
|
|
|
|
$dataBlog = getContents($urlBlog);
|
2020-09-14 11:14:35 +03:00
|
|
|
|
|
|
|
// Merge data
|
|
|
|
$decodedData = array_merge(json_decode($dataSticky), json_decode($dataBlog));
|
2020-08-20 08:36:11 +03:00
|
|
|
|
|
|
|
foreach ($decodedData as $key => $value) {
|
|
|
|
$item = [];
|
|
|
|
$item['uri'] = self::URI . $value->url;
|
|
|
|
$item['title'] = $value->title;
|
|
|
|
$item['timestamp'] = $value->date;
|
|
|
|
$item['author'] = 'Epic Games Store';
|
|
|
|
if (!empty($value->author)) {
|
|
|
|
$item['author'] = $value->author;
|
|
|
|
}
|
|
|
|
if (!empty($value->content)) {
|
|
|
|
$item['content'] = defaultLinkTo($value->content, self::URI);
|
|
|
|
}
|
|
|
|
if (!empty($value->image)) {
|
|
|
|
$item['enclosures'][] = $value->image;
|
|
|
|
}
|
|
|
|
$item['uid'] = $value->_id;
|
|
|
|
$item['id'] = $value->_id;
|
|
|
|
|
|
|
|
$this->items[] = $item;
|
|
|
|
}
|
2020-09-14 11:14:35 +03:00
|
|
|
|
|
|
|
// Sort data
|
|
|
|
usort($this->items, function ($item1, $item2) {
|
|
|
|
if ($item2['timestamp'] == $item1['timestamp']) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return ($item2['timestamp'] < $item1['timestamp']) ? -1 : 1;
|
|
|
|
});
|
|
|
|
|
|
|
|
// Limit data
|
|
|
|
$this->items = array_slice($this->items, 0, $this->getInput('postcount'));
|
2020-08-20 08:36:11 +03:00
|
|
|
}
|
|
|
|
}
|