1
0
Fork 0
forked from blallo/rss-bridge
This commit is contained in:
logmanoriginal 2017-02-15 19:40:46 +01:00
commit 6d1e8af982
39 changed files with 372 additions and 117 deletions

View file

@ -44,11 +44,11 @@ class AllocineFRBridge extends BridgeAbstract {
public function getName(){
if(!is_null($this->getInput('category'))){
return self::NAME . ' : '
.array_search(
$this->getInput('category'),
self::PARAMETERS[$this->queriedContext]['category']['values']
);
return self::NAME . ' : '
.array_search(
$this->getInput('category'),
self::PARAMETERS[$this->queriedContext]['category']['values']
);
}
return parent::getName();

View file

@ -51,8 +51,11 @@ class AmazonBridge extends BridgeAbstract {
));
public function getName(){
if(!is_null($this->getInput('tld')) && !is_null($this->getInput('q'))){
return 'Amazon.'.$this->getInput('tld').': '.$this->getInput('q');
}
return 'Amazon.'.$this->getInput('tld').': '.$this->getInput('q');
return parent::getName();
}
public function collectData() {

View file

@ -57,10 +57,18 @@ class AskfmBridge extends BridgeAbstract {
}
public function getName(){
return self::NAME . ' : ' . $this->getInput('u');
if(!is_null($this->getInput('u'))){
return self::NAME . ' : ' . $this->getInput('u');
}
return parent::getName();
}
public function getURI(){
return self::URI . urlencode($this->getInput('u')) . '/answers/more?page=0';
if(!is_null($this->getInput('u'))){
return self::URI . urlencode($this->getInput('u')) . '/answers/more?page=0';
}
return parent::getURI();
}
}

View file

@ -46,10 +46,18 @@ class BandcampBridge extends BridgeAbstract {
}
public function getURI(){
return self::URI . 'tag/' . urlencode($this->getInput('tag')) . '?sort_field=date';
if(!is_null($this->getInput('tag'))){
return self::URI . 'tag/' . urlencode($this->getInput('tag')) . '?sort_field=date';
}
return parent::getURI();
}
public function getName(){
return $this->getInput('tag') . ' - Bandcamp Tag';
if(!is_null($this->getInput('tag'))){
return $this->getInput('tag') . ' - Bandcamp Tag';
}
return parent::getName();
}
}

View file

@ -28,10 +28,18 @@ class BooruprojectBridge extends GelbooruBridge {
const PIDBYPAGE = 20;
public function getURI(){
return 'http://' . $this->getInput('i') . '.booru.org/';
if(!is_null($this->getInput('i'))){
return 'http://' . $this->getInput('i') . '.booru.org/';
}
return parent::getURI();
}
public function getName(){
return static::NAME . ' ' . $this->getInput('i');
if(!is_null($this->getInput('i'))){
return static::NAME . ' ' . $this->getInput('i');
}
return parent::getName();
}
}

View file

@ -83,7 +83,11 @@ topic found in some section URLs, else all topics are selected.';
}
public function getName(){
$topic = $this->getInput('topic');
return 'CNET News Bridge' . (empty($topic) ? '' : ' - ' . $topic);
if(!is_null($this->getInput('topic'))){
$topic = $this->getInput('topic');
return 'CNET News Bridge' . (empty($topic) ? '' : ' - ' . $topic);
}
return parent::getName();
}
}

View file

@ -50,7 +50,11 @@ class CpasbienBridge extends BridgeAbstract {
}
public function getName(){
return $this->getInput('q') . ' : ' . self::NAME;
if(!is_null($this->getInput('q'))){
return $this->getInput('q') . ' : ' . self::NAME;
}
return parent::getName();
}
private function getCachedDate($url){

View file

@ -116,6 +116,7 @@ class DailymotionBridge extends BridgeAbstract {
$uri .= '/' . $this->getInput('pa');
}
break;
default: return parent::getURI();
}
return $uri;
}

View file

@ -257,6 +257,11 @@ EOD;
}
public function getName(){
return isset($this->extraInfos['name']) ? $this->extraInfos['name'] : $this->authorName . ' - Facebook Bridge';
if(!empty($this->authorName)){
return isset($this->extraInfos['name']) ? $this->extraInfos['name'] : $this->authorName
. ' - Facebook Bridge';
}
return parent::getName();
}
}

View file

@ -20,7 +20,11 @@ class FourchanBridge extends BridgeAbstract {
));
public function getURI(){
return static::URI . $this->getInput('c') . '/thread/' . $this->getInput('t');
if(!is_null($this->getInput('c')) && !is_null($this->getInput('t'))){
return static::URI . $this->getInput('c') . '/thread/' . $this->getInput('t');
}
return parent::getURI();
}
public function collectData(){

View file

@ -47,18 +47,23 @@ class GithubIssueBridge extends BridgeAbstract {
case 'Issue comments':
$name = static::NAME . ' ' . $name . ' #' . $this->getInput('i');
break;
default: return parent::getName();
}
return $name;
}
public function getURI(){
$uri = static::URI . $this->getInput('u') . '/' . $this->getInput('p') . '/issues';
if($this->queriedContext === 'Issue comments'){
$uri .= '/' . $this->getInput('i');
} elseif($this->getInput('c')){
$uri .= '?q=is%3Aissue+sort%3Aupdated-desc';
if(!is_null($this->getInput('u')) && !is_null($this->getInput('p'))){
$uri = static::URI . $this->getInput('u') . '/' . $this->getInput('p') . '/issues';
if($this->queriedContext === 'Issue comments'){
$uri .= '/' . $this->getInput('i');
} elseif($this->getInput('c')){
$uri .= '?q=is%3Aissue+sort%3Aupdated-desc';
}
return $uri;
}
return $uri;
return parent::getURI();
}
protected function extractIssueComment($issueNbr, $title, $comment){

View file

@ -42,10 +42,18 @@ class GoComicsBridge extends BridgeAbstract {
}
public function getURI(){
return self::URI . urlencode($this->getInput('comicname'));
if(!is_null($this->getInput('comicname'))){
return self::URI . urlencode($this->getInput('comicname'));
}
return parent::getURI();
}
public function getName(){
return $this->getInput('comicname') . ' - GoComics';
if(!is_null($this->getInput('comicname'))){
return $this->getInput('comicname') . ' - GoComics';
}
return parent::getName();
}
}

View file

@ -97,6 +97,6 @@ class GooglePlusPostBridge extends BridgeAbstract{
}
public function getURI(){
return $this->_url ?: self::URI;
return $this->_url ?: parent::getURI();
}
}

View file

@ -55,6 +55,10 @@ class GoogleSearchBridge extends BridgeAbstract {
}
public function getName(){
return $this->getInput('q') . ' - Google search';
if(!is_null($this->getInput('q'))){
return $this->getInput('q') . ' - Google search';
}
return parent::getName();
}
}

View file

@ -70,10 +70,14 @@ class HDWallpapersBridge extends BridgeAbstract {
}
public function getName(){
return 'HDWallpapers - '
. str_replace(['__', '_'], [' & ', ' '], $this->getInput('c'))
. ' ['
. $this->getInput('r')
. ']';
if(!is_null($this->getInput('c')) && !is_null($this->getInput('r'))){
return 'HDWallpapers - '
. str_replace(['__', '_'], [' & ', ' '], $this->getInput('c'))
. ' ['
. $this->getInput('r')
. ']';
}
return parent::getName();
}
}

View file

@ -35,10 +35,18 @@ class IdenticaBridge extends BridgeAbstract {
}
public function getName(){
return $this->getInput('u') . ' - Identica Bridge';
if(!is_null($this->getInput('u'))){
return $this->getInput('u') . ' - Identica Bridge';
}
return parent::getName();
}
public function getURI(){
return self::URI . urlencode($this->getInput('u'));
if(!is_null($this->getInput('u'))){
return self::URI . urlencode($this->getInput('u'));
}
return parent::getURI();
}
}

View file

@ -53,10 +53,18 @@ class InstagramBridge extends BridgeAbstract {
}
public function getName(){
return $this->getInput('u') . ' - Instagram Bridge';
if(!is_null($this->getInput('u'))){
return $this->getInput('u') . ' - Instagram Bridge';
}
return parent::getName();
}
public function getURI(){
return self::URI . urlencode($this->getInput('u'));
if(!is_null($this->getInput('u'))){
return self::URI . urlencode($this->getInput('u'));
}
return parent::getURI();
}
}

View file

@ -70,7 +70,7 @@ class KununuBridge extends BridgeAbstract {
return ($this->companyName ?: $company) . ' - ' . self::NAME;
}
return paren::getName();
return parent::getName();
}
public function collectData(){

View file

@ -16,7 +16,11 @@ class MixCloudBridge extends BridgeAbstract {
));
public function getName(){
return 'MixCloud - ' . $this->getInput('u');
if(!is_null($this->getInput('u'))){
return 'MixCloud - ' . $this->getInput('u');
}
return parent::getName();
}
public function collectData(){

View file

@ -17,7 +17,11 @@ class NovelUpdatesBridge extends BridgeAbstract {
private $seriesTitle = '';
public function getURI(){
return static::URI . '/series/' . $this->getInput('n') . '/';
if(!is_null($this->getInput('n'))){
return static::URI . '/series/' . $this->getInput('n') . '/';
}
return parent::getURI();
}
public function collectData(){
@ -56,6 +60,10 @@ class NovelUpdatesBridge extends BridgeAbstract {
}
public function getName(){
if(!empty($this->seriesTitle)){
return $this->seriesTitle . ' - ' . static::NAME;
}
return parent::getName();
}
}

View file

@ -27,7 +27,11 @@ class OpenClassroomsBridge extends BridgeAbstract {
));
public function getURI(){
return self::URI . '/courses?categories=' . $this->getInput('u') . '&title=&sort=updatedAt+desc';
if(!is_null($this->getInput('u'))){
return self::URI . '/courses?categories=' . $this->getInput('u') . '&title=&sort=updatedAt+desc';
}
return parent::getURI();
}
public function collectData(){

View file

@ -84,15 +84,19 @@ class ParuVenduImmoBridge extends BridgeAbstract {
}
public function getName(){
$request = '';
$minarea = $this->getInput('minarea');
if(!empty($minarea)){
$request .= ' ' . $minarea . ' m2';
if(!is_null($this->getInput('minarea'))){
$request = '';
$minarea = $this->getInput('minarea');
if(!empty($minarea)){
$request .= ' ' . $minarea . ' m2';
}
$location = $this->getInput('lo');
if(!empty($location)){
$request .= ' In: ' . $location;
}
return 'Paru Vendu Immobilier' . $request;
}
$location = $this->getInput('lo');
if(!empty($location)){
$request .= ' In: ' . $location;
}
return 'Paru Vendu Immobilier' . $request;
return parent::getName();
}
}

View file

@ -70,24 +70,32 @@ class PickyWallpapersBridge extends BridgeAbstract {
}
public function getURI(){
$subcategory = $this->getInput('s');
$link = self::URI
. $this->getInput('r')
. '/'
. $this->getInput('c')
. '/'
. $subcategory;
if(!is_null($this->getInput('s')) && !is_null($this->getInput('r')) && !is_null($this->getInput('c'))){
$subcategory = $this->getInput('s');
$link = self::URI
. $this->getInput('r')
. '/'
. $this->getInput('c')
. '/'
. $subcategory;
return $link;
return $link;
}
return parent::getURI();
}
public function getName(){
$subcategory = $this->getInput('s');
return 'PickyWallpapers - '
. $this->getInput('c')
. ($subcategory ? ' > ' . $subcategory : '')
. ' ['
. $this->getInput('r')
. ']';
if(!is_null($this->getInput('s'))){
$subcategory = $this->getInput('s');
return 'PickyWallpapers - '
. $this->getInput('c')
. ($subcategory ? ' > ' . $subcategory : '')
. ' ['
. $this->getInput('r')
. ']';
}
return parent::getName();
}
}

View file

@ -49,10 +49,18 @@ class RTBFBridge extends BridgeAbstract {
}
public function getURI(){
return self::URI . 'detail?id=' . $this->getInput('c');
if(!is_null($this->getInput('c'))){
return self::URI . 'detail?id=' . $this->getInput('c');
}
return parent::getURI();
}
public function getName(){
return $this->getInput('c') .' - RTBF Bridge';
if(!is_null($this->getInput('c'))){
return $this->getInput('c') .' - RTBF Bridge';
}
return parent::getName();
}
}

View file

@ -55,6 +55,10 @@ class SoundCloudBridge extends BridgeAbstract {
}
public function getName(){
return self::NAME . ' - ' . $this->getInput('u');
if(!is_null($this->getInput('u'))){
return self::NAME . ' - ' . $this->getInput('u');
}
return parent::getName();
}
}

View file

@ -61,6 +61,10 @@ class SuperbWallpapersBridge extends BridgeAbstract {
}
public function getName(){
return self::NAME . '- ' . $this->getInput('c') . ' [' . $this->getInput('r') . ']';
if(!is_null($this->getInput('c')) && !is_null($this->getInput('r'))){
return self::NAME . '- ' . $this->getInput('c') . ' [' . $this->getInput('r') . ']';
}
return parent::getName();
}
}

View file

@ -40,6 +40,10 @@ class TagBoardBridge extends BridgeAbstract {
}
public function getName(){
return 'tagboard - ' . $this->getInput('u');
if(!is_null($this->getInput('u'))){
return 'tagboard - ' . $this->getInput('u');
}
return parent::getName();
}
}

View file

@ -81,7 +81,11 @@ class Torrent9Bridge extends BridgeAbstract {
public function getName(){
return $this->getInput('q') . ' : ' . self::NAME;
if(!is_null($this->getInput('q'))){
return $this->getInput('q') . ' : ' . self::NAME;
}
return parent::getName();
}
private function getCachedDate($url){

View file

@ -46,6 +46,7 @@ class TwitterBridge extends BridgeAbstract {
$specific = '@';
$param = 'u';
break;
default: return parent::getName();
}
return 'Twitter ' . $specific . $this->getInput($param);
}
@ -61,6 +62,7 @@ class TwitterBridge extends BridgeAbstract {
return self::URI
. urlencode($this->getInput('u'))
. ($this->getInput('norep') ? '' : '/with_replies');
default: return parent::getURI();
}
}

View file

@ -16,7 +16,11 @@ class VkBridge extends BridgeAbstract {
);
public function getURI(){
return static::URI . urlencode($this->getInput('u'));
if(!is_null($this->getInput('u'))){
return static::URI . urlencode($this->getInput('u'));
}
return parent::getURI();
}
public function collectData(){

View file

@ -92,12 +92,16 @@ class WallpaperStopBridge extends BridgeAbstract {
}
public function getName(){
$subcategory = $this->getInput('s');
return 'WallpaperStop - '
. $this->getInput('c')
. (!empty($subcategory) ? ' > ' . $subcategory : '')
. ' ['
. $this->getInput('r')
. ']';
if(!is_null($this->getInput('s')) && !is_null($this->getInput('c')) && !is_null($this->getInput('r'))){
$subcategory = $this->getInput('s');
return 'WallpaperStop - '
. $this->getInput('c')
. (!empty($subcategory) ? ' > ' . $subcategory : '')
. ' ['
. $this->getInput('r')
. ']';
}
return parent::getName();
}
}

View file

@ -34,7 +34,7 @@ class WebfailBridge extends BridgeAbstract {
public function getURI(){
if(is_null($this->getInput('language')))
return self::URI;
return parent::getURI();
// e.g.: https://en.webfail.com
return 'https://' . $this->getInput('language') . '.webfail.com';

View file

@ -43,9 +43,13 @@ class WikipediaBridge extends BridgeAbstract {
));
public function getURI(){
return 'https://'
. strtolower($this->getInput('language'))
. '.wikipedia.org';
if(!is_null($this->getInput('language'))){
return 'https://'
. strtolower($this->getInput('language'))
. '.wikipedia.org';
}
return parent::getURI();
}
public function getName(){
@ -56,9 +60,7 @@ class WikipediaBridge extends BridgeAbstract {
case 'dyk':
$subject = WIKIPEDIA_SUBJECT_DYK;
break;
default:
$subject = WIKIPEDIA_SUBJECT_TFA;
break;
default: return parent::getName();
}
switch($subject){

View file

@ -56,7 +56,7 @@ class WordPressBridge extends FeedExpander {
public function getURI(){
$url = $this->getInput('url');
if(empty($url)){
$url = static::URI;
$url = parent::getURI();
}
return $url;
}

View file

@ -28,17 +28,21 @@ class WorldOfTanksBridge extends BridgeAbstract {
private $title = '';
function getURI(){
$lang = $this->getInput('lang');
$uri = self::URI . $lang . '/news/';
if(!empty($this->getInput('category'))) {
$uri .= 'pc-browser/' . $this->getInput('category') . '/';
public function getURI(){
if(!is_null($this->getInput('lang'))){
$lang = $this->getInput('lang');
$uri = self::URI . $lang . '/news/';
if(!empty($this->getInput('category'))) {
$uri .= 'pc-browser/' . $this->getInput('category') . '/';
}
return $uri;
}
return $uri;
return parent::getURI();
}
public function getName(){
return $this->title ?: self::NAME;
return $this->title ?: parent::getName();
}
public function collectData(){

View file

@ -20,7 +20,10 @@ abstract class BridgeAbstract implements BridgeInterface {
* @return mixed
*/
public function getCachable(){
return array("items" => $this->getItems(), "extraInfos" => $this->getExtraInfos());
return array(
'items' => $this->getItems(),
'extraInfos' => $this->getExtraInfos()
);
}
/**
@ -31,7 +34,13 @@ abstract class BridgeAbstract implements BridgeInterface {
return $this->items;
}
/**
* Sets the input values for a given context. Existing values are
* overwritten.
*
* @param array $inputs Associative array of inputs
* @param string $context The context name
*/
protected function setInputs(array $inputs, $queriedContext){
// Import and assign all inputs to their context
foreach($inputs as $name => $value){
@ -89,7 +98,7 @@ abstract class BridgeAbstract implements BridgeInterface {
foreach(static::PARAMETERS['global'] as $name => $properties){
if(isset($inputs[$name])){
$value = $inputs[$name];
} elseif (isset($properties['value'])){
} elseif(isset($properties['value'])){
$value = $properties['value'];
} else {
continue;
@ -106,10 +115,20 @@ abstract class BridgeAbstract implements BridgeInterface {
}
}
/**
* Returns the name of the context matching the provided inputs
*
* @param array $inputs Associative array of inputs
* @return mixed Returns the context name or null if no match was found
*/
protected function getQueriedContext(array $inputs){
$queriedContexts = array();
// Detect matching context
foreach(static::PARAMETERS as $context => $set){
$queriedContexts[$context] = null;
// Check if all parameters of the context are satisfied
foreach($set as $id => $properties){
if(isset($inputs[$id]) && !empty($inputs[$id])){
$queriedContexts[$context] = true;
@ -119,8 +138,10 @@ abstract class BridgeAbstract implements BridgeInterface {
break;
}
}
}
// Abort if one of the globally required parameters is not satisfied
if(array_key_exists('global', static::PARAMETERS)
&& $queriedContexts['global'] === false){
return null;
@ -128,14 +149,15 @@ abstract class BridgeAbstract implements BridgeInterface {
unset($queriedContexts['global']);
switch(array_sum($queriedContexts)){
case 0:
case 0: // Found no match, is there a context without parameters?
foreach($queriedContexts as $context => $queried){
if (is_null($queried)){
if(is_null($queried)){
return $context;
}
}
return null;
case 1: return array_search(true, $queriedContexts);
case 1: // Found unique match
return array_search(true, $queriedContexts);
default: return false;
}
}
@ -193,23 +215,44 @@ abstract class BridgeAbstract implements BridgeInterface {
}
}
function getInput($input){
/**
* Returns the value for the provided input
*
* @param string $input The input name
* @return mixed Returns the input value or null if the input is not defined
*/
protected function getInput($input){
if(!isset($this->inputs[$this->queriedContext][$input]['value'])){
return null;
}
return $this->inputs[$this->queriedContext][$input]['value'];
}
public function getDescription(){
return static::DESCRIPTION;
}
public function getMaintainer(){
return static::MAINTAINER;
}
public function getName(){
return static::NAME;
}
public function getParameters(){
return static::PARAMETERS;
}
public function getURI(){
return static::URI;
}
public function getExtraInfos(){
return array("name" => $this->getName(), "uri" => $this->getURI());
return array(
'name' => $this->getName(),
'uri' => $this->getURI()
);
}
public function setCache(\CacheInterface $cache){

View file

@ -1,6 +1,71 @@
<?php
interface BridgeInterface {
/**
* Collects data from the site
*/
public function collectData();
/**
* Returns an array of cachable elements
*
* @return array Associative array of cachable elements
*/
public function getCachable();
/**
* Returns the description
*
* @return string Description
*/
public function getDescription();
/**
* Return an array of extra information
*
* @return array Associative array of extra information
*/
public function getExtraInfos();
/**
* Returns an array of collected items
*
* @return array Associative array of items
*/
public function getItems();
/**
* Returns the bridge maintainer
*
* @return string Bridge maintainer
*/
public function getMaintainer();
/**
* Returns the bridge name
*
* @return string Bridge name
*/
public function getName();
/**
* Returns the bridge parameters
*
* @return array Bridge parameters
*/
public function getParameters();
/**
* Returns the bridge URI
*
* @return string Bridge URI
*/
public function getURI();
/**
* Sets the cache instance
*
* @param object CacheInterface The cache instance
*/
public function setCache(\CacheInterface $cache);
}

View file

@ -190,10 +190,10 @@ abstract class FeedExpander extends BridgeAbstract {
}
public function getURI(){
return $this->uri;
return $this->uri ?: parent::getURI();
}
public function getName(){
return $this->name;
return $this->name ?: parent::getName();
}
}

View file

@ -15,22 +15,21 @@ function displayBridgeCard($bridgeName, $formats, $isActive = true){
return $buttons;
};
$getFormHeader = function($bridge){
$getFormHeader = function($bridgeName){
return <<<EOD
<form method="GET" action="?">
<input type="hidden" name="action" value="display" />
<input type="hidden" name="bridge" value="{$bridge}" />
<input type="hidden" name="bridge" value="{$bridgeName}" />
EOD;
};
$bridgeElement = Bridge::create($bridgeName);
$bridgeClass = $bridgeName . 'Bridge';
$bridge = Bridge::create($bridgeName);
if($bridgeElement == false)
if($bridge == false)
return "";
$name = '<a href="' . $bridgeClass::URI . '">' . $bridgeClass::NAME . '</a>';
$description = $bridgeClass::DESCRIPTION;
$name = '<a href="' . $bridge->getURI() . '">' . $bridge->getName() . '</a>';
$description = $bridge->getDescription();
$card = <<<CARD
<section id="bridge-{$bridgeName}" data-ref="{$bridgeName}">
@ -43,7 +42,7 @@ EOD;
CARD;
// If we don't have any parameter for the bridge, we print a generic form to load it.
if(count($bridgeClass::PARAMETERS) == 0){
if(count($bridge->getParameters()) == 0){
$card .= $getFormHeader($bridgeName);
@ -77,13 +76,13 @@ CARD;
$card .= '</form>' . PHP_EOL;
}
$hasGlobalParameter = array_key_exists('global', $bridgeClass::PARAMETERS);
$hasGlobalParameter = array_key_exists('global', $bridge->getParameters());
if($hasGlobalParameter){
$globalParameters = $bridgeClass::PARAMETERS['global'];
$globalParameters = $bridge->getParameters()['global'];
}
foreach($bridgeClass::PARAMETERS as $parameterName => $parameter){
foreach($bridge->getParameters() as $parameterName => $parameter){
if(!is_numeric($parameterName) && $parameterName == 'global')
continue;
@ -251,7 +250,7 @@ CARD;
}
$card .= '<label class="showless" for="showmore-' . $bridgeName . '">Show less</label>';
$card .= '<p class="maintainer">' . $bridgeClass::MAINTAINER . '</p>';
$card .= '<p class="maintainer">' . $bridge->getMaintainer() . '</p>';
$card .= '</section>';
return $card;
@ -288,5 +287,3 @@ function defaultImageSrcTo($content, $server){
}
return $content;
}
?>