diff --git a/bridges/PicnobBridge.php b/bridges/PicnobBridge.php new file mode 100644 index 00000000..831992c8 --- /dev/null +++ b/bridges/PicnobBridge.php @@ -0,0 +1,104 @@ + [ + 'u' => [ + 'name' => 'username', + 'type' => 'text', + 'title' => 'Instagram username you want to follow', + 'exampleValue' => 'aesoprockwins', + 'required' => true, + ], + ], + 'Hashtag' => [ + 'h' => [ + 'name' => 'hashtag', + 'type' => 'text', + 'title' => 'Instagram hastag you want to follow, without the \'#\'', + 'exampleValue' => 'beautifulday', + 'required' => true, + ], + ] + ]; + + public function getURI() + { + if (!is_null($this->getInput('u'))) { + return urljoin(self::URI, '/profile/' . $this->getInput('u') . '/'); + } + + if (!is_null($this->getInput('h'))) { + return urljoin(self::URI, '/tag/' . trim($this->getInput('h') . '/')); + } + + return parent::getURI(); + } + + public function collectData() + { + $html = getSimpleHTMLDOM($this->getURI()); + foreach ($html->find('.items') as $part) { + foreach ($part->find('.item') as $element) { + $url = urljoin(self::URI, $element->find('a', 0)->href); + + + $date = date_create(); + $relativeDate = str_replace(' ago', '', $element->find('.time', 0)->plaintext); + date_sub($date, date_interval_create_from_date_string($relativeDate)); + + $description = trim($element->find('.sum', 0)->plaintext); + + $isVideo = (bool) $element->find('.icon_video', 0); + $videoNote = $isVideo ? '

(video)

' : ''; + + $isTV = (bool) $element->find('.icon_tv', 0); + $tvNote = $isTV ? '

(TV)

' : ''; + + $isMoreContent = (bool) $element->find('.icon_multi', 0); + $moreContentNote = $isMoreContent ? '

(multiple images and/or videos)

' : ''; + + $imageUrl = $element->find('.img', 0)->getAttribute('data-src'); + parse_str(parse_url($imageUrl, PHP_URL_QUERY), $imageVars); + $imageUrl = $imageVars['u']; + + $this->items[] = [ + 'uri' => $url, + 'timestamp' => date_format($date, 'r'), + 'title' => strlen($description) > 60 ? mb_substr($description, 0, 57) . '...' : $description, + 'thumbnail' => $imageUrl, + 'enclosures' => [$imageUrl], + 'content' => << + + +{$videoNote} +{$tvNote} +{$moreContentNote} +

{$description}

+HTML + ]; + } + } + } + + public function getName() + { + if (!is_null($this->getInput('u'))) { + return 'Username ' . $this->getInput('u') . ' - Picnob Bridge'; + } + + if (!is_null($this->getInput('h'))) { + return 'Hashtag ' . $this->getInput('h') . ' - Picnob Bridge'; + } + + return parent::getName(); + } +}