Merge pull request #371 from owncloud/comic-enhancers

Add article enhancer for various comic sites
This commit is contained in:
Bernhard Posselt 2013-09-25 15:09:45 -07:00
Родитель 5ea27804ab 9498b293c0
Коммит 6d5e8373a9
6 изменённых файлов: 297 добавлений и 0 удалений

Просмотреть файл

@ -63,6 +63,11 @@ use \OCA\News\Utility\SimplePieFileFactory;
use \OCA\News\Utility\ArticleEnhancer\Enhancer;
use \OCA\News\Utility\ArticleEnhancer\CyanideAndHappinessEnhancer;
use \OCA\News\Utility\ArticleEnhancer\ThemeRepublicEnhancer;
use OCA\News\Utility\ArticleEnhancer\CADEnhancer;
use OCA\News\Utility\ArticleEnhancer\PennyArcadeEnhancer;
use OCA\News\Utility\ArticleEnhancer\TwoGAGEnhancer;
use OCA\News\Utility\ArticleEnhancer\LeastICouldDoEnhancer;
use OCA\News\Utility\ArticleEnhancer\EscapistComicEnhancer;
use \OCA\News\Middleware\CORSMiddleware;
@ -261,6 +266,18 @@ class DIContainer extends BaseContainer {
// the most generic enhancer should be the last one
$enhancer->registerEnhancer('explosm.net', $c['CyanideAndHappinessEnhancer']);
$enhancer->registerEnhancer('themerepublic.net', $c['ThemeRepublicEnhancer']);
$enhancer->registerEnhancer('cad-comic.com', $c['CADEnhancer']);
$enhancer->registerEnhancer('penny-arcade.com', $c['PennyArcadeEnhancer']);
$enhancer->registerEnhancer('twogag.com', $c['TwoGAGEnhancer']);
$enhancer->registerEnhancer('leasticoulddo.com', $c['LeastICouldDoEnhancer']);
$enhancer->registerEnhancer('escapistmagazine.com/articles/view/comics/critical-miss', $c['EscapistComicEnhancer']);
$enhancer->registerEnhancer('escapistmagazine.com/articles/view/comics/critical-miss', $c['EscapistComicEnhancer']);
$enhancer->registerEnhancer('escapistmagazine.com/articles/view/comics/namegame', $c['EscapistComicEnhancer']);
$enhancer->registerEnhancer('escapistmagazine.com/articles/view/comics/stolen-pixels', $c['EscapistComicEnhancer']);
$enhancer->registerEnhancer('escapistmagazine.com/articles/view/comics/bumhugparade', $c['EscapistComicEnhancer']);
$enhancer->registerEnhancer('escapistmagazine.com/articles/view/comics/escapistradiotheater', $c['EscapistComicEnhancer']);
$enhancer->registerEnhancer('escapistmagazine.com/articles/view/comics/paused', $c['EscapistComicEnhancer']);
$enhancer->registerEnhancer('escapistmagazine.com/articles/view/comics/fraughtwithperil', $c['EscapistComicEnhancer']);
return $enhancer;
});
@ -285,6 +302,46 @@ class DIContainer extends BaseContainer {
);
});
$this['CADEnhancer'] = $this->share(function($c){
return new CADEnhancer(
$c['SimplePieFileFactory'],
$c['HTMLPurifier'],
$c['feedFetcherTimeout']
);
});
$this['PennyArcadeEnhancer'] = $this->share(function($c){
return new PennyArcadeEnhancer(
$c['SimplePieFileFactory'],
$c['HTMLPurifier'],
$c['feedFetcherTimeout']
);
});
$this['TwoGAGEnhancer'] = $this->share(function($c){
return new TwoGAGEnhancer(
$c['SimplePieFileFactory'],
$c['HTMLPurifier'],
$c['feedFetcherTimeout']
);
});
$this['LeastICouldDoEnhancer'] = $this->share(function($c){
return new LeastICouldDoEnhancer(
$c['SimplePieFileFactory'],
$c['HTMLPurifier'],
$c['feedFetcherTimeout']
);
});
$this['EscapistComicEnhancer'] = $this->share(function($c){
return new EscapistComicEnhancer(
$c['SimplePieFileFactory'],
$c['HTMLPurifier'],
$c['feedFetcherTimeout']
);
});
$this['Fetcher'] = $this->share(function($c){
$fetcher = new Fetcher();

Просмотреть файл

@ -0,0 +1,47 @@
<?php
/**
* ownCloud - News
*
* @author Alessandro Cosentino
* @author Bernhard Posselt
* @copyright 2012 Alessandro Cosentino cosenal@gmail.com
* @copyright 2012 Bernhard Posselt dev@bernhard-posselt.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\News\Utility\ArticleEnhancer;
use \OCA\News\Utility\SimplePieFileFactory;
class CADEnhancer extends ArticleEnhancer {
public function __construct(SimplePieFileFactory $fileFactory, $purifier,
$timeout){
parent::__construct(
$purifier,
$fileFactory,
array(
'/cad-comic.com\/cad\/\d+\/$/' => '//*[@id=\'content\']/img'
),
$timeout
);
}
}

Просмотреть файл

@ -0,0 +1,49 @@
<?php
/**
* ownCloud - News
*
* @author Alessandro Cosentino
* @author Bernhard Posselt
* @copyright 2012 Alessandro Cosentino cosenal@gmail.com
* @copyright 2012 Bernhard Posselt dev@bernhard-posselt.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\News\Utility\ArticleEnhancer;
use \OCA\News\Utility\SimplePieFileFactory;
class EscapistComicEnhancer extends ArticleEnhancer {
public function __construct(SimplePieFileFactory $fileFactory, $purifier,
$timeout) {
parent::__construct(
$purifier,
$fileFactory,
array(
'/escapistmagazine.com\/articles\/view\/comics\/critical-miss/' => '//*[@class=\'body\']/span/img',
'/escapistmagazine.com\/articles\/view\/comics\/namegame/' => '//*[@class=\'body\']/span/p/img[@height != "120"]',
'/escapistmagazine.com\/articles\/view\/comics\/(stolen-pixels|bumhugparade|escapistradiotheater)/' => '//*[@class=\'body\']/span/p[2]/img',
'/escapistmagazine.com\/articles\/view\/comics\/paused/' => '//*[@class=\'body\']/span/p[2]/img | //*[@class=\'body\']/span/div/img',
'/escapistmagazine.com\/articles\/view\/comics\/fraughtwithperil/' => '//*[@class=\'body\']',
),
$timeout
);
}
}

Просмотреть файл

@ -0,0 +1,45 @@
<?php
/**
* ownCloud - News
*
* @author Alessandro Cosentino
* @author Bernhard Posselt
* @copyright 2012 Alessandro Cosentino cosenal@gmail.com
* @copyright 2012 Bernhard Posselt dev@bernhard-posselt.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\News\Utility\ArticleEnhancer;
use \OCA\News\Utility\SimplePieFileFactory;
class LeastICouldDoEnhancer extends ArticleEnhancer {
public function __construct(SimplePieFileFactory $fileFactory, $purifier,
$timeout) {
parent::__construct(
$purifier,
$fileFactory,
array(
'/feedproxy.google.com\/\~r\/LICD/' => '//*[@id=\'comic-img\']/a/img | //*[@id=\'comic-img\']/img'
),
$timeout
);
}
}

Просмотреть файл

@ -0,0 +1,47 @@
<?php
/**
* ownCloud - News
*
* @author Alessandro Cosentino
* @author Bernhard Posselt
* @copyright 2012 Alessandro Cosentino cosenal@gmail.com
* @copyright 2012 Bernhard Posselt dev@bernhard-posselt.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\News\Utility\ArticleEnhancer;
use \OCA\News\Utility\SimplePieFileFactory;
class PennyArcadeEnhancer extends ArticleEnhancer {
public function __construct(SimplePieFileFactory $fileFactory, $purifier,
$timeout){
parent::__construct(
$purifier,
$fileFactory,
array(
'/feeds.penny-arcade.com\/\~r\/pa-mainsite/' => '//*[starts-with(@class, "post")]'
),
$timeout
);
}
}

Просмотреть файл

@ -0,0 +1,52 @@
<?php
/**
* ownCloud - News
*
* @author Alessandro Cosentino
* @author Bernhard Posselt
* @copyright 2012 Alessandro Cosentino cosenal@gmail.com
* @copyright 2012 Bernhard Posselt dev@bernhard-posselt.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\News\Utility\ArticleEnhancer;
use \OCA\News\Utility\SimplePieFileFactory;
class TwoGAGEnhancer extends ArticleEnhancer {
public function __construct(SimplePieFileFactory $fileFactory, $purifier,
$timeout) {
parent::__construct(
$purifier,
$fileFactory,
array(),
$timeout
);
}
public function enhance($item) {
if (preg_match('/www.twogag.com\/archives/', $item->getUrl()) || preg_match('/feedproxy.google.com\/\~r\/TwoGuysAndGuy/', $item->getUrl())) {
$body = $item->getBody();
$body = preg_replace('/http\:\/\/www.twogag.com\/comics-rss\/([^.]+)\.jpg/', 'http://www.twogag.com/comics/$1.jpg', $body);
$item->setBody($body);
}
return $item;
}
}