mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2024-12-25 05:38:21 +03:00
f0e5ef0fc5
* [Various] getKey replacements and docu * more bridges and fix to the abstract * linting * revert bandcampdaily. doing more than i thought
182 lines
5.8 KiB
PHP
182 lines
5.8 KiB
PHP
<?php
|
|
|
|
class UnogsBridge extends BridgeAbstract
|
|
{
|
|
const MAINTAINER = 'csisoap';
|
|
const NAME = 'uNoGS Bridge';
|
|
const URI = 'https://unogs.com';
|
|
const DESCRIPTION = 'Return what\'s new or removal on Netflix';
|
|
|
|
const PARAMETERS = [
|
|
'global' => [
|
|
'feed' => [
|
|
'name' => 'feed',
|
|
'type' => 'list',
|
|
'title' => 'Choose whether you want latest movies or removal on Netflix',
|
|
'values' => [
|
|
'What\'s New' => 'new last 7 days',
|
|
'Expiring' => 'expiring'
|
|
]
|
|
],
|
|
'limit' => self::LIMIT,
|
|
],
|
|
'Global' => [],
|
|
'Country' => [
|
|
'country_code' => [
|
|
'name' => 'Country',
|
|
'type' => 'list',
|
|
'title' => 'Choose your preferred country',
|
|
'values' => [
|
|
'Argentina' => 21,
|
|
'Australia' => 23,
|
|
'Belgium' => 26,
|
|
'Brazil' => 29,
|
|
'Canada' => 33,
|
|
'Colombia' => 36,
|
|
'Czech Republic' => 307,
|
|
'France' => 45,
|
|
'Germany' => 39,
|
|
'Greece' => 327,
|
|
'Hong Kong' => 331,
|
|
'Hungary' => 334,
|
|
'Iceland' => 265,
|
|
'India' => 337,
|
|
'Israel' => 336,
|
|
'Italy' => 269,
|
|
'Japan' => 267,
|
|
'Lithuania' => 357,
|
|
'Malaysia' => 378,
|
|
'Mexico' => 65,
|
|
'Netherlands' => 67,
|
|
'Philippines' => 390,
|
|
'Poland' => 392,
|
|
'Portugal' => 268,
|
|
'Romania' => 400,
|
|
'Russia' => 402,
|
|
'Singapore' => 408,
|
|
'Slovakia' => 412,
|
|
'South Africa' => 447,
|
|
'South Korea' => 348,
|
|
'Spain' => 270,
|
|
'Sweden' => 73,
|
|
'Switzerland' => 34,
|
|
'Thailand' => 425,
|
|
'Turkey' => 432,
|
|
'Ukraine' => 436,
|
|
'United Kingdom' => 46,
|
|
'United States' => 78
|
|
]
|
|
]
|
|
]
|
|
];
|
|
|
|
public function getName()
|
|
{
|
|
$feedName = '';
|
|
if ($this->queriedContext == 'Global') {
|
|
$feedName .= 'Netflix Global - ';
|
|
} elseif ($this->queriedContext == 'Country') {
|
|
$feedName .= 'Netflix ' . $this->getKey('country_code') . ' - ';
|
|
}
|
|
if ($this->getInput('feed') == 'expiring') {
|
|
$feedName .= 'Expiring title';
|
|
} elseif ($this->getInput('feed') == 'new last 7 days') {
|
|
$feedName .= 'What\'s New';
|
|
} else {
|
|
$feedName = self::NAME;
|
|
}
|
|
return $feedName;
|
|
}
|
|
|
|
private function getJSON($url)
|
|
{
|
|
$header = [
|
|
'Referer: https://unogs.com/',
|
|
'referrer: http://unogs.com'
|
|
];
|
|
|
|
$raw = getContents($url, $header);
|
|
return json_decode($raw, true);
|
|
}
|
|
|
|
private function getImage($nfid)
|
|
{
|
|
$url = self::URI . '/api/title/bgimages?netflixid=' . $nfid;
|
|
$json = $this->getJSON($url);
|
|
$image_wrapper = '';
|
|
if (isset($json['bo1280x448'])) {
|
|
$image_wrapper = 'bo1280x448';
|
|
} else {
|
|
$image_wrapper = 'bo665x375';
|
|
}
|
|
end($json[$image_wrapper]);
|
|
$position = key($json[$image_wrapper]);
|
|
$image_link = $json[$image_wrapper][$position]['url'];
|
|
return $image_link;
|
|
}
|
|
|
|
private function handleData($data)
|
|
{
|
|
$item = [];
|
|
$item['title'] = $data['title'] . ' - ' . $data['year'];
|
|
$item['timestamp'] = $data['titledate'];
|
|
$netflix_id = $data['nfid'];
|
|
$item['uri'] = 'https://www.netflix.com/title/' . $netflix_id;
|
|
$image_url = $this->getImage($netflix_id);
|
|
$netflix_synopsis = $data['synopsis'];
|
|
$expired_warning = '';
|
|
if (isset($data['expires'])) {
|
|
$expired_warning .= '<p><b>Expired on: ' . $data['expires'] . '</b></p>';
|
|
$item['timestamp'] = $data['expires'];
|
|
}
|
|
$unogs_url = self::URI . '/title/' . $netflix_id;
|
|
|
|
$item['content'] = <<<EOD
|
|
<img src={$image_url}>
|
|
$expired_warning
|
|
<p>$netflix_synopsis</p>
|
|
<p>Details: <a href={$unogs_url}>$unogs_url</a></p>
|
|
EOD;
|
|
$this->items[] = $item;
|
|
}
|
|
|
|
public function collectData()
|
|
{
|
|
$feed = $this->getInput('feed');
|
|
$is_global = false;
|
|
$country_code = '';
|
|
|
|
switch ($this->queriedContext) {
|
|
case 'Country':
|
|
$country_code = $this->getInput('country_code');
|
|
break;
|
|
}
|
|
|
|
$limit = $this->getInput('limit') ?? 30;
|
|
|
|
// https://rapidapi.com/unogs/api/unogsng/details
|
|
$api_url = sprintf(
|
|
'%s/api/search?query=%s%s&limit=%s',
|
|
self::URI,
|
|
urlencode($feed),
|
|
$country_code ? '&countrylist=' . $country_code : '',
|
|
$limit
|
|
);
|
|
|
|
$json_data = $this->getJSON($api_url);
|
|
$movies = $json_data['results'];
|
|
|
|
if ($this->getInput('feed') == 'expiring') {
|
|
/* uNoGS API returns movies/series that going to remove
|
|
* today according to the day you fetch the data.
|
|
* They put items that going to remove in the future on the last
|
|
* so I reverse this to get those items, not to bothers those that already removed today.
|
|
*/
|
|
$movies = array_reverse($movies);
|
|
}
|
|
|
|
foreach ($movies as $movie) {
|
|
$this->handleData($movie);
|
|
}
|
|
}
|
|
}
|