From d55994643d5a5495d185bfef43ff52a59aea9a03 Mon Sep 17 00:00:00 2001 From: George Sokianos Date: Fri, 11 Aug 2023 15:16:53 +0100 Subject: [PATCH] bridges: Added Ko-Fi.com bridge (#3609) * Added Ko-Fi.com bridge * Changed the exampleValue based on KoFiBridge-pr-context1 artifacts * Fixed "Undefined array key 0" error * fixed PHPCS issues --------- Co-authored-by: George Sokianos --- bridges/KoFiBridge.php | 79 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 bridges/KoFiBridge.php diff --git a/bridges/KoFiBridge.php b/bridges/KoFiBridge.php new file mode 100644 index 00000000..c1600590 --- /dev/null +++ b/bridges/KoFiBridge.php @@ -0,0 +1,79 @@ + [ + 'name' => 'Page ID', + 'type' => 'text', + 'required' => true, + 'exampleValue' => 'walkero', + ] + ]]; + + public function collectData() + { + $limit = 0; + $html = getSimpleHTMLDOM(self::FEED_URI . $this->getPageId()); + foreach ($html->find('div.feeditem-unit') as $element) { + if ($limit < 10) { + $titleWrapper = $element->find('div.content-link-text'); + if (isset($titleWrapper[0])) { + $item = []; + $item['title'] = $element->find('div.content-link-text div')[0]->plaintext; + // $item['timestamp'] = strtotime($element->find('div.feeditem-time', 0)->plaintext); + $item['uri'] = self::URI . $element->find('div.fi-post-item-large a')[0]->href; + if (isset($element->find('div.fi-post-item-large div.content-link-post img')[0])) { + $item['enclosures'][] = $element->find('div.fi-post-item-large div.content-link-post img')[0]->src; + } + // $item['content'] = $element->find('div.content-link-text div#content-link', 0)->plaintext; + + $html = getSimpleHTMLDOM($item['uri']); + $feedItemTime = $html->find('div.feeditem-time', 0); + $feedItemTime->find('span', 0)->remove(); + $feedItemTime->find('div', 0)->remove(); + $item['timestamp'] = strtotime(trim($feedItemTime->plaintext)); + $item['content'] = $this->getFullContent($html); + $html->clear(); + + $this->items[] = $item; + $limit++; + } + } + } + $html->clear(); + } + + private function getFullContent($html) + { + foreach ($html->find('script[type="text/javascript"]') as $script) { + if (!empty($script->innertext)) { + if (strpos($script->innertext, 'shadowDom.innerHTML += \'') !== false) { + preg_match_all('/d\N+/i', $script->innertext, $aMatches); + foreach ($aMatches[0] as $match) { + if (strpos($match, 'article-body') !== false) { + break; + } + } + $fullPostHtml = str_get_html(mb_substr($match, 21, -3)); + // Get the first paragraph + return mb_substr($fullPostHtml->innertext, 0, mb_strpos($fullPostHtml->innertext, '

') + 4); + } + } + } + } + + private function getPageId() + { + $html = getSimpleHTMLDOM(self::URI . '/' . $this->getInput('pageId')); + $reportUrl = $html->find('div.modal-dialog div.mb a.btn')[1]->href; + $html->clear(); + return substr($reportUrl, strpos($reportUrl, '=') + 1); + } +}