Reverted to last usable version

This commit is contained in:
Pablo Ferreiro 2022-02-16 15:20:35 +01:00
parent 279a4f50c6
commit c47d6cd6d4
No known key found for this signature in database
GPG key ID: 41FBCE65B779FA24
23 changed files with 149 additions and 144 deletions

View file

@ -1,31 +1,33 @@
<?php
namespace App\Cache;
use App\Helpers\Misc;
class JSONCache {
private string $cache_path = '';
private string $cache_path = __DIR__ . '/../../cache/api';
function __construct() {
$this->cache_path = Misc::env('API_CACHE_JSON', __DIR__ . '/../../cache/api');
if (isset($_ENV['API_CACHE_JSON']) && !empty($_ENV['API_CACHE_JSON'])) {
$this->cache_path = $_ENV['API_CACHE_JSON'];
}
}
public function get(string $cache_key): ?object {
public function get(string $cache_key): object|false {
$filename = $this->cache_path . '/' . $cache_key . '.json';
if (is_file($filename)) {
$time = time();
$json_string = file_get_contents($filename);
$element = json_decode($json_string);
return $element;
if ($time < $element->expires) {
return $element->data;
}
// Remove file if expired
unlink($filename);
}
return null;
return false;
}
public function exists(string $cache_key): bool {
$filename = $this->cache_path . '/' . $cache_key . '.json';
return is_file($filename);
}
public function set(string $cache_key, string $data, $timeout = 3600) {
file_put_contents($this->cache_path . '/' . $cache_key . '.json', $data);
public function set(string $cache_key, mixed $data, $timeout = 3600) {
file_put_contents($this->cache_path . '/' . $cache_key . '.json', json_encode([
'data' => $data,
'expires' => time() + $timeout
]));
}
}

View file

@ -27,11 +27,7 @@ class RedisCache {
return null;
}
public function exists(string $cache_key): bool {
return $this->client->exists($cache_key);
}
public function set(string $cache_key, string $data, $timeout = 3600) {
$this->client->set($cache_key, $data, $timeout);
public function set(string $cache_key, array $data, $timeout = 3600) {
$this->client->set($cache_key, json_encode($data), $timeout);
}
}

View file

@ -3,7 +3,7 @@ namespace App\Controllers;
use App\Helpers\ErrorHandler;
use App\Helpers\Misc;
use App\Models\DiscoverTemplate;
use App\Models\FeedTemplate;
class DiscoverController {
static public function get() {
@ -11,7 +11,7 @@ class DiscoverController {
$feed = $api->getDiscover();
if ($feed->meta->success) {
$latte = Misc::latte();
$latte->render(Misc::getView('discover'), new DiscoverTemplate($feed));
$latte->render(Misc::getView('discover'), new FeedTemplate('Discover', $feed));
} else {
ErrorHandler::show($feed->meta);
}

View file

@ -40,24 +40,25 @@ class ProxyController {
static public function stream() {
if (isset($_GET['download'])) {
$downloader = new \TikScraper\Download();
$watermark = isset($_GET['watermark']);
if ($watermark) {
self::checkUrl();
$filename = self::getFileName();
$downloader = new \Sovit\TikTok\Download();
$downloader->url($_GET['url'], $filename, true);
} else {
if (!isset($_GET['id'])) {
die('You need to send an ID!');
}
$filename = self::getFileName();
$downloader = new \Sovit\TikTok\Download();
$downloader->url($_GET['id'], $filename, false);
}
} else {
self::checkUrl();
$url = $_GET['url'];
$streamer = new \TikScraper\Stream();
$streamer->url($url);
$streamer = new \Sovit\TikTok\Stream();
$streamer->stream($url);
}
}
}

View file

@ -10,7 +10,7 @@ class TagController {
static public function get(string $name) {
$cursor = Misc::getCursor();
$api = Misc::api();
$feed = $api->getHashtagFeed($name, $cursor);
$feed = $api->getChallengeFeed($name, $cursor);
if ($feed->meta->success) {
$latte = Misc::latte();
$latte->render(Misc::getView('tag'), new FeedTemplate('Tag', $feed));
@ -21,9 +21,9 @@ class TagController {
static public function rss(string $name) {
$api = Misc::api();
$feed = $api->getHashtagFeed($name);
$feed = $api->getChallengeFeed($name);
if ($feed->meta->success) {
$feed = RSS::build("/tag/{$name}", "{$name} Tag", $feed->info->detail->desc, $feed->items);
$feed = RSS::build("/tag/{$name}", "{$name} Tag", $feed->info->detail->challenge->desc, $feed->items);
// Setup headers
RSS::setHeaders('tag.rss');
echo $feed;

View file

@ -8,10 +8,9 @@ use App\Helpers\RSS;
class TrendingController {
static public function get() {
$cursor = Misc::getTtwid();
$page = $_GET['page'] ?? 0;
$cursor = Misc::getCursor();
$api = Misc::api();
$feed = $api->getTrending($cursor, $page);
$feed = $api->getTrendingFeed($cursor);
if ($feed->meta->success) {
$latte = Misc::latte();
$latte->render(Misc::getView('trending'), new FeedTemplate('Trending', $feed));
@ -22,7 +21,7 @@ class TrendingController {
static public function rss() {
$api = Misc::api();
$feed = $api->getTrending();
$feed = $api->getTrendingFeed();
if ($feed->meta->success) {
$feed = RSS::build('/trending', 'Trending', 'Tiktok trending', $feed->items);
// Setup headers

View file

@ -12,12 +12,12 @@ class UserController {
$api = Misc::api();
$feed = $api->getUserFeed($username, $cursor);
if ($feed->meta->success) {
if ($feed->info->detail->privateAccount) {
if ($feed->info->detail->user->privateAccount) {
http_response_code(400);
echo 'Private account detected! Not supported';
}
$latte = Misc::latte();
$latte->render(Misc::getView('user'), new FeedTemplate($feed->info->detail->nickname, $feed));
$latte->render(Misc::getView('user'), new FeedTemplate($feed->info->detail->user->nickname, $feed));
} else {
ErrorHandler::show($feed->meta);
}
@ -27,7 +27,7 @@ class UserController {
$api = Misc::api();
$feed = $api->getUserFeed($username);
if ($feed->meta->success) {
$feed = RSS::build('/@'.$username, $feed->info->detail->nickname, $feed->info->detail->signature, $feed->items);
$feed = RSS::build('/@'.$username, $feed->info->detail->user->nickname, $feed->info->detail->user->signature, $feed->items);
// Setup headers
RSS::setHeaders('user.rss');
echo $feed;

View file

@ -3,7 +3,7 @@ namespace App\Controllers;
use App\Helpers\ErrorHandler;
use App\Helpers\Misc;
use App\Models\FeedTemplate;
use App\Models\ItemTemplate;
class VideoController {
static public function get(string $video_id) {
@ -11,7 +11,7 @@ class VideoController {
$item = $api->getVideoByID($video_id);
if ($item->meta->success) {
$latte = Misc::latte();
$latte->render(Misc::getView('video'), new FeedTemplate($item->info->detail->nickname, $item));
$latte->render(Misc::getView('video'), new ItemTemplate($item->info->detail->user->nickname, $item));
} else {
ErrorHandler::show($item->meta);
}

View file

@ -9,16 +9,12 @@ class Misc {
return isset($_GET['cursor']) && is_numeric($_GET['cursor']) ? (int) $_GET['cursor'] : 0;
}
static public function getTtwid(): string {
return $_GET['cursor'] ?? '';
}
static public function url(string $endpoint = '') {
return self::env('APP_URL', '') . $endpoint;
}
static public function env(string $key, string $default_value): string {
return $_ENV[$key] ?? $default_value;
return isset($_ENV[$key]) && !empty($_ENV[$key]) ? $_ENV[$key] : $default_value;
}
/**
@ -31,11 +27,8 @@ class Misc {
/**
* Setup of TikTok Api wrapper
*/
static public function api(): \TikScraper\Api {
$options = [
'remote_signer' => self::env('SIGNER_URL', 'http://localhost:8080/signature'),
'use_test_endpoints' => self::env('USE_TEST_ENDPOINTS', false)
];
static public function api(): \Sovit\TikTok\Api {
$options = [];
$cacheEngine = false;
// Proxy config
foreach(Cookies::PROXY as $proxy_element) {
@ -62,13 +55,13 @@ class Misc {
} else {
$host = $_ENV['REDIS_HOST'];
$port = (int) $_ENV['REDIS_PORT'];
$password = $_ENV['REDIS_PASSWORD'] ?? null;
$password = isset($_ENV['REDIS_PASSWORD']) ? $_ENV['REDIS_PASSWORD'] : null;
}
$cacheEngine = new RedisCache($host, $port, $password);
break;
}
}
$api = new \TikScraper\Api($options, $cacheEngine);
$api = new \Sovit\TikTok\Api($options, $cacheEngine);
return $api;
}

View file

@ -2,7 +2,7 @@
namespace App\Helpers;
use \FeedWriter\RSS2;
use TikScraper\Download;
use \Sovit\TikTok\Download;
class RSS {
static public function build(string $endpoint, string $title, string $description, array $items): string {

View file

@ -1,16 +0,0 @@
<?php
namespace App\Models;
use TikScraper\Models\Discover;
/**
* Base for templates with a feed
*/
class DiscoverTemplate extends BaseTemplate {
public Discover $feed;
function __construct(Discover $feed) {
parent::__construct('Discover');
$this->feed = $feed;
}
}

View file

@ -1,15 +1,13 @@
<?php
namespace App\Models;
use TikScraper\Models\Feed;
/**
* Base for templates with a feed
*/
class FeedTemplate extends BaseTemplate {
public Feed $feed;
public object $feed;
function __construct(string $title, Feed $feed) {
function __construct(string $title, object $feed) {
parent::__construct($title);
$this->feed = $feed;
}

View file

@ -0,0 +1,14 @@
<?php
namespace App\Models;
/**
* Base for templates with item (only /video at the time)
*/
class ItemTemplate extends BaseTemplate {
public object $item;
function __construct(string $title, object $item) {
parent::__construct($title);
$this->item = $item;
}
}