From 192dc4dae2b023acb17218e4ad330d082194489d Mon Sep 17 00:00:00 2001 From: Joseph Date: Sun, 19 Jun 2022 01:59:39 +0000 Subject: [PATCH] [TikTokBridge] Add bridge (#2828) --- bridges/TikTokBridge.php | 87 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 bridges/TikTokBridge.php diff --git a/bridges/TikTokBridge.php b/bridges/TikTokBridge.php new file mode 100644 index 00000000..c58363e3 --- /dev/null +++ b/bridges/TikTokBridge.php @@ -0,0 +1,87 @@ + array( + 'username' => array( + 'name' => 'Username', + 'type' => 'text', + 'required' => true, + 'exampleValue' => '@tiktok', + ) + )); + + const TEST_DETECT_PARAMETERS = array( + 'https://www.tiktok.com/@tiktok' => array( + 'context' => 'By user', 'username' => '@tiktok' + ) + ); + + const CACHE_TIMEOUT = 900; // 15 minutes + + private $feedName = ''; + + public function detectParameters($url) { + + if(preg_match('/tiktok\.com\/(@[\w]+)/', $url, $matches) > 0) { + return array( + 'context' => 'By user', + 'username' => $matches[1] + ); + } + + return null; + } + + public function collectData() { + $html = getSimpleHTMLDOM($this->getURI()); + + $this->feedName = htmlspecialchars_decode($html->find('h1', 0)->plaintext); + + foreach ($html->find('div.tiktok-x6y88p-DivItemContainerV2') as $div) { + $item = []; + + $link = $div->find('a', 0)->href; + $image = $div->find('img', 0)->src; + $views = $div->find('strong.video-count', 0)->plaintext; + + $item['uri'] = $link; + $item['title'] = $div->find('a', 1)->plaintext; + $item['enclosures'][] = $image; + + $item['content'] = << +

{$views} views

+EOD; + + $this->items[] = $item; + } + } + + public function getURI() { + switch($this->queriedContext) { + case 'By user': + return self::URI . '/' . $this->processUsername(); + default: return parent::getURI(); + } + } + + public function getName() { + switch($this->queriedContext) { + case 'By user': + return $this->feedName . ' (' . $this->processUsername() . ') - TikTok'; + default: return parent::getName(); + } + } + + private function processUsername() { + if (substr($this->getInput('username'), 0, 1) !== '@') { + return '@' . $this->getInput('username'); + } + + return $this->getInput('username'); + } +}