diff options
author | 2022-06-19 01:59:39 +0000 | |
---|---|---|
committer | 2022-06-18 21:59:39 -0400 | |
commit | 192dc4dae2b023acb17218e4ad330d082194489d (patch) | |
tree | 051957227c1657cdee18ca49b21f0a034639fcd7 | |
parent | c78c1254a85c14ec44c77ac1da983d4b07efcaf4 (diff) | |
download | rss-bridge-192dc4dae2b023acb17218e4ad330d082194489d.tar.gz rss-bridge-192dc4dae2b023acb17218e4ad330d082194489d.tar.zst rss-bridge-192dc4dae2b023acb17218e4ad330d082194489d.zip |
[TikTokBridge] Add bridge (#2828)
-rw-r--r-- | bridges/TikTokBridge.php | 87 |
1 files changed, 87 insertions, 0 deletions
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 @@ +<?php +class TikTokBridge extends BridgeAbstract { + const NAME = 'TikTok Bridge'; + const URI = 'https://www.tiktok.com'; + const DESCRIPTION = 'Returns posts'; + const MAINTAINER = 'VerifiedJoseph'; + const PARAMETERS = array( + 'By user' => 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'] = <<<EOD +<a href="{$link}"><img src="{$image}"/></a> +<p>{$views} views<p> +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'); + } +} |