RSS initial support
This commit is contained in:
parent
ecdc8241e7
commit
bd1642957c
21 changed files with 329 additions and 161 deletions
|
|
@ -1,11 +1,9 @@
|
|||
<?php
|
||||
namespace Helpers;
|
||||
|
||||
class Error {
|
||||
class ErrorHandler {
|
||||
static public function show(object $meta) {
|
||||
$http_code = $meta->http_code;
|
||||
http_response_code($http_code);
|
||||
|
||||
http_response_code($meta->http_code);
|
||||
$latte = Misc::latte();
|
||||
$latte->render(Misc::getView('error'), ['error' => $meta]);
|
||||
}
|
||||
|
|
@ -2,11 +2,36 @@
|
|||
namespace Helpers;
|
||||
|
||||
class Following {
|
||||
static public function get (): array {
|
||||
static public function getUsers (): array {
|
||||
$following_string = Settings::get('following');
|
||||
if ($following_string) {
|
||||
return explode(',', $following_string);
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
static public function getAll (array $users): object {
|
||||
$allowed_items_total = isset($_GET['max']) && is_numeric($_GET['max']) && $_GET['max'] <= 100 ? $_GET['max'] : 20;
|
||||
$items = [];
|
||||
if (count($users) !== 0) {
|
||||
$api = Misc::api();
|
||||
$max_items_per_user = $allowed_items_total / count($users);
|
||||
foreach ($users as $user) {
|
||||
$user_feed = $api->getUserFeed($user);
|
||||
if ($user_feed) {
|
||||
$max = count($user_feed->items) > $max_items_per_user ? $max_items_per_user : count($user_feed->items);
|
||||
for ($i = 0; $i < $max; $i++) {
|
||||
$item = $user_feed->items[$i];
|
||||
array_push($items, $item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$feed = (object) [
|
||||
'items' => $items,
|
||||
'hasMore' => false
|
||||
];
|
||||
return $feed;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -7,14 +7,20 @@ use Helpers\CacheEngines\RedisCache;
|
|||
use Helpers\Settings;
|
||||
|
||||
class Misc {
|
||||
static public function getSubDir(): string {
|
||||
return isset($_ENV['APP_SUBDIR']) && !empty($_ENV['APP_SUBDIR']) ? $_ENV['APP_SUBDIR'] : '/';
|
||||
static public function env(string $key, mixed $default_value): string {
|
||||
return isset($_ENV[$key]) && !empty($_ENV[$key]) ? $_ENV[$key] : $default_value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns absolute path for view
|
||||
*/
|
||||
static public function getView(string $template): string {
|
||||
return __DIR__ . "/../views/{$template}.latte";
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup of TikTok Api wrapper
|
||||
*/
|
||||
static public function api(): \Sovit\TikTok\Api {
|
||||
$options = [];
|
||||
$cacheEngine = false;
|
||||
|
|
@ -47,26 +53,25 @@ class Misc {
|
|||
return $api;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup of Latte template engine
|
||||
*/
|
||||
static public function latte(): \Latte\Engine {
|
||||
// Workaround to avoid weird path issues
|
||||
$subdir = Misc::getSubDir();
|
||||
if ($subdir === '/') {
|
||||
$subdir = '';
|
||||
}
|
||||
$url = self::env('APP_URL', '');
|
||||
$latte = new \Latte\Engine;
|
||||
$cache_path = isset($_ENV['LATTE_CACHE']) && !empty($_ENV['LATTE_CACHE']) ? $_ENV['LATTE_CACHE'] : __DIR__ . '/../cache/latte';
|
||||
$cache_path = self::env('LATTE_CACHE', __DIR__ . '/../cache/latte');
|
||||
$latte->setTempDirectory($cache_path);
|
||||
|
||||
// -- CUSTOM FUNCTIONS -- //
|
||||
// Import assets
|
||||
$latte->addFunction('assets', function (string $name, string $type) use ($subdir) {
|
||||
$path = "{$subdir}/{$type}/{$name}";
|
||||
$latte->addFunction('assets', function (string $name, string $type) use ($url) {
|
||||
$path = "{$url}/{$type}/{$name}";
|
||||
return $path;
|
||||
});
|
||||
// Relative path
|
||||
$latte->addFunction('path', function (string $name) use ($subdir) {
|
||||
$path = "{$subdir}/{$name}";
|
||||
return $path;
|
||||
// Get base URL
|
||||
$latte->addFunction('path', function (string $path = '') use ($url) {
|
||||
return "{$url}/{$path}";
|
||||
});
|
||||
// Version being used
|
||||
$latte->addFunction('version', function () {
|
||||
|
|
@ -86,6 +91,10 @@ class Misc {
|
|||
}
|
||||
return $x;
|
||||
});
|
||||
$latte->addFunction('size', function (string $url) {
|
||||
$download = new \Sovit\TikTok\Download();
|
||||
return $download->file_size($url);
|
||||
});
|
||||
return $latte;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
40
helpers/RSS.php
Normal file
40
helpers/RSS.php
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
namespace Helpers;
|
||||
|
||||
use \Bhaktaraz\RSSGenerator\Feed;
|
||||
use \Bhaktaraz\RSSGenerator\Channel;
|
||||
use \Bhaktaraz\RSSGenerator\Item;
|
||||
use \Sovit\TikTok\Download;
|
||||
|
||||
class RSS {
|
||||
static public function build (string $endpoint, string $title, string $description, array $items, string $image = ''): Feed {
|
||||
$url = Misc::env('APP_URL', '');
|
||||
$download = new Download();
|
||||
$rss_feed = new Feed();
|
||||
$rss_channel = new Channel();
|
||||
$rss_channel
|
||||
->title($title)
|
||||
->description($description)
|
||||
->url($url . $endpoint)
|
||||
->atomLinkSelf($url . $endpoint . '/rss')
|
||||
->appendTo($rss_feed);
|
||||
foreach ($items as $item) {
|
||||
$rss_item = new Item();
|
||||
$video = $item->video->playAddr;
|
||||
$rss_item
|
||||
->title($item->desc)
|
||||
->description($item->desc)
|
||||
->url($url . '/video/' . $item->id)
|
||||
->pubDate((int)$item->createTime)
|
||||
->guid($item->id, false)
|
||||
->enclosure($url . '/stream?url=' . urlencode($video), $download->file_size($video), 'video/mp4')
|
||||
->appendTo($rss_channel);
|
||||
}
|
||||
return $rss_feed;
|
||||
}
|
||||
|
||||
static public function setHeaders (string $filename) {
|
||||
header('Content-Type: application/rss+xml');
|
||||
header('Content-Disposition: attachment; filename="' . $filename . '"');
|
||||
}
|
||||
}
|
||||
|
|
@ -16,6 +16,6 @@ class Settings {
|
|||
}
|
||||
|
||||
static public function set(string $name, string $value) {
|
||||
setcookie($name, $value, time()+60*60*24*30, Misc::getSubDir(), '', isset($_SERVER['HTTPS']), true);
|
||||
setcookie($name, $value, time()+60*60*24*30, '/', '', isset($_SERVER['HTTPS']), true);
|
||||
}
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue