diff --git a/bridges/AllSidesBridge.php b/bridges/AllSidesBridge.php new file mode 100644 index 00000000..d71195ef --- /dev/null +++ b/bridges/AllSidesBridge.php @@ -0,0 +1,85 @@ + [ + 'limit' => [ + 'name' => 'Number of posts to return', + 'type' => 'number', + 'defaultValue' => 10, + 'required' => false, + 'title' => 'Zero or negative values return all posts (ignored if not fetching full article)', + ], + 'fetch' => [ + 'name' => 'Fetch full article content', + 'type' => 'checkbox', + 'defaultValue' => 'checked', + ], + ], + 'Headline Roundups' => [], + ]; + + private const ROUNDUPS_URI = self::URI . '/headline-roundups'; + + public function collectData() + { + switch ($this->queriedContext) { + case 'Headline Roundups': + $index = getSimpleHTMLDOM(self::ROUNDUPS_URI); + defaultLinkTo($index, self::ROUNDUPS_URI); + $entries = $index->find('table.views-table > tbody > tr'); + + $limit = (int) $this->getInput('limit'); + $fetch = (bool) $this->getInput('fetch'); + + if ($limit > 0 && $fetch) { + $entries = array_slice($entries, 0, $limit); + } + + foreach ($entries as $entry) { + $item = [ + 'title' => $entry->find('.views-field-name', 0)->text(), + 'uri' => $entry->find('a', 0)->href, + 'timestamp' => $entry->find('.date-display-single', 0)->content, + 'author' => 'AllSides Staff', + ]; + + if ($fetch) { + $article = getSimpleHTMLDOMCached($item['uri']); + defaultLinkTo($article, $item['uri']); + + $item['content'] = $article->find('.story-id-page-description', 0); + + foreach ($article->find('.page-tags a') as $tag) { + $item['categories'][] = $tag->text(); + } + } + + $this->items[] = $item; + } + break; + } + } + + public function getName() + { + if ($this->queriedContext) { + return self::NAME . " - {$this->queriedContext}"; + } + return self::NAME; + } + + public function getURI() + { + switch ($this->queriedContext) { + case 'Headline Roundups': + return self::ROUNDUPS_URI; + } + return self::URI; + } +}