aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joseph <joseph@verifiedjoseph.com> 2022-06-19 01:59:39 +0000
committerGravatar GitHub <noreply@github.com> 2022-06-18 21:59:39 -0400
commit192dc4dae2b023acb17218e4ad330d082194489d (patch)
tree051957227c1657cdee18ca49b21f0a034639fcd7
parentc78c1254a85c14ec44c77ac1da983d4b07efcaf4 (diff)
downloadrss-bridge-192dc4dae2b023acb17218e4ad330d082194489d.tar.gz
rss-bridge-192dc4dae2b023acb17218e4ad330d082194489d.tar.zst
rss-bridge-192dc4dae2b023acb17218e4ad330d082194489d.zip
[TikTokBridge] Add bridge (#2828)
-rw-r--r--bridges/TikTokBridge.php87
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');
+ }
+}