aboutsummaryrefslogtreecommitdiff
path: root/bridges/WiredBridge.php
diff options
context:
space:
mode:
Diffstat (limited to 'bridges/WiredBridge.php')
-rw-r--r--bridges/WiredBridge.php209
1 files changed, 108 insertions, 101 deletions
diff --git a/bridges/WiredBridge.php b/bridges/WiredBridge.php
index b15f781f..d4c7cbbb 100644
--- a/bridges/WiredBridge.php
+++ b/bridges/WiredBridge.php
@@ -1,103 +1,110 @@
<?php
-class WiredBridge extends FeedExpander {
- const MAINTAINER = 'ORelio';
- const NAME = 'WIRED Bridge';
- const URI = 'https://www.wired.com/';
- const DESCRIPTION = 'Returns the newest articles from WIRED';
-
- const PARAMETERS = array( array(
- 'feed' => array(
- 'name' => 'Feed',
- 'type' => 'list',
- 'values' => array(
- 'WIRED Top Stories' => 'rss', // /feed/rss
- 'Business' => 'business', // /feed/category/business/latest/rss
- 'Culture' => 'culture', // /feed/category/culture/latest/rss
- 'Gear' => 'gear', // /feed/category/gear/latest/rss
- 'Ideas' => 'ideas', // /feed/category/ideas/latest/rss
- 'Science' => 'science', // /feed/category/science/latest/rss
- 'Security' => 'security', // /feed/category/security/latest/rss
- 'Transportation' => 'transportation', // /feed/category/transportation/latest/rss
- 'Backchannel' => 'backchannel', // /feed/category/backchannel/latest/rss
- 'WIRED Guides' => 'wired-guide', // /feed/tag/wired-guide/latest/rss
- 'Photo' => 'photo' // /feed/category/photo/latest/rss
- )
- ),
- 'limit' => self::LIMIT,
- ));
-
- public function collectData(){
- $feed = $this->getInput('feed');
- if(empty($feed) || !ctype_alpha(str_replace('-', '', $feed))) {
- returnClientError('Invalid feed, please check the "feed" parameter.');
- }
-
- $feed_url = $this->getURI() . 'feed/';
- if ($feed != 'rss') {
- if ($feed != 'wired-guide') {
- $feed_url .= 'category/';
- } else {
- $feed_url .= 'tag/';
- }
- $feed_url .= "$feed/latest/";
- }
- $feed_url .= 'rss';
-
- $limit = $this->getInput('limit') ?? -1;
- $this->collectExpandableDatas($feed_url, $limit);
- }
-
- protected function parseItem($newsItem){
- $item = parent::parseItem($newsItem);
- $article = getSimpleHTMLDOMCached($item['uri']);
- $item['content'] = $this->extractArticleContent($article);
-
- $headline = strval($newsItem->description);
- if(!empty($headline)) {
- $item['content'] = '<p><b>' . $headline . '</b></p>' . $item['content'];
- }
-
- $item_image = $article->find('meta[property="og:image"]', 0);
- if(!empty($item_image)) {
- $item['enclosures'] = array($item_image->content);
- $item['content'] = '<p><img src="' . $item_image->content . '" /></p>' . $item['content'];
- }
-
- return $item;
- }
-
- private function extractArticleContent($article){
- $content = $article->find('article', 0);
- $truncate = true;
-
- if (empty($content)) {
- $content = $article->find('div.listicle-main-component__container', 0);
- $truncate = false;
- }
-
- if (!empty($content)) {
- $content = $content->innertext;
- }
-
- foreach (array(
- '<div class="content-header',
- '<div class="mid-banner-wrap',
- '<div class="related',
- '<div class="social-icons',
- '<div class="recirc-most-popular',
- '<div class="grid--item article-related-video',
- '<div class="row full-bleed-ad',
- ) as $div_start) {
- $content = stripRecursiveHTMLSection($content, 'div', $div_start);
- }
-
- if ($truncate) {
- //Clutter after standard article is too hard to clean properly
- $content = trim(explode('<hr', $content)[0]);
- }
-
- $content = str_replace('href="/', 'href="' . $this->getURI() . '/', $content);
-
- return $content;
- }
+
+class WiredBridge extends FeedExpander
+{
+ const MAINTAINER = 'ORelio';
+ const NAME = 'WIRED Bridge';
+ const URI = 'https://www.wired.com/';
+ const DESCRIPTION = 'Returns the newest articles from WIRED';
+
+ const PARAMETERS = [ [
+ 'feed' => [
+ 'name' => 'Feed',
+ 'type' => 'list',
+ 'values' => [
+ 'WIRED Top Stories' => 'rss', // /feed/rss
+ 'Business' => 'business', // /feed/category/business/latest/rss
+ 'Culture' => 'culture', // /feed/category/culture/latest/rss
+ 'Gear' => 'gear', // /feed/category/gear/latest/rss
+ 'Ideas' => 'ideas', // /feed/category/ideas/latest/rss
+ 'Science' => 'science', // /feed/category/science/latest/rss
+ 'Security' => 'security', // /feed/category/security/latest/rss
+ 'Transportation' => 'transportation', // /feed/category/transportation/latest/rss
+ 'Backchannel' => 'backchannel', // /feed/category/backchannel/latest/rss
+ 'WIRED Guides' => 'wired-guide', // /feed/tag/wired-guide/latest/rss
+ 'Photo' => 'photo' // /feed/category/photo/latest/rss
+ ]
+ ],
+ 'limit' => self::LIMIT,
+ ]];
+
+ public function collectData()
+ {
+ $feed = $this->getInput('feed');
+ if (empty($feed) || !ctype_alpha(str_replace('-', '', $feed))) {
+ returnClientError('Invalid feed, please check the "feed" parameter.');
+ }
+
+ $feed_url = $this->getURI() . 'feed/';
+ if ($feed != 'rss') {
+ if ($feed != 'wired-guide') {
+ $feed_url .= 'category/';
+ } else {
+ $feed_url .= 'tag/';
+ }
+ $feed_url .= "$feed/latest/";
+ }
+ $feed_url .= 'rss';
+
+ $limit = $this->getInput('limit') ?? -1;
+ $this->collectExpandableDatas($feed_url, $limit);
+ }
+
+ protected function parseItem($newsItem)
+ {
+ $item = parent::parseItem($newsItem);
+ $article = getSimpleHTMLDOMCached($item['uri']);
+ $item['content'] = $this->extractArticleContent($article);
+
+ $headline = strval($newsItem->description);
+ if (!empty($headline)) {
+ $item['content'] = '<p><b>' . $headline . '</b></p>' . $item['content'];
+ }
+
+ $item_image = $article->find('meta[property="og:image"]', 0);
+ if (!empty($item_image)) {
+ $item['enclosures'] = [$item_image->content];
+ $item['content'] = '<p><img src="' . $item_image->content . '" /></p>' . $item['content'];
+ }
+
+ return $item;
+ }
+
+ private function extractArticleContent($article)
+ {
+ $content = $article->find('article', 0);
+ $truncate = true;
+
+ if (empty($content)) {
+ $content = $article->find('div.listicle-main-component__container', 0);
+ $truncate = false;
+ }
+
+ if (!empty($content)) {
+ $content = $content->innertext;
+ }
+
+ foreach (
+ [
+ '<div class="content-header',
+ '<div class="mid-banner-wrap',
+ '<div class="related',
+ '<div class="social-icons',
+ '<div class="recirc-most-popular',
+ '<div class="grid--item article-related-video',
+ '<div class="row full-bleed-ad',
+ ] as $div_start
+ ) {
+ $content = stripRecursiveHTMLSection($content, 'div', $div_start);
+ }
+
+ if ($truncate) {
+ //Clutter after standard article is too hard to clean properly
+ $content = trim(explode('<hr', $content)[0]);
+ }
+
+ $content = str_replace('href="/', 'href="' . $this->getURI() . '/', $content);
+
+ return $content;
+ }
}