mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2025-08-12 03:24:01 +02:00
core: Automatically select a bridge based on a URL (#928)
* core: Add bridge parameter auto detection This adds a new 'detect' action which accepts a URL from which an appropriate bridge is selected and relevant parameters are extracted. The user is then automatically redirected to the selected bridge. For example to get a feed from: https://twitter.com/search?q=%23rss-bridge we could send a request to: '/?action=detect&format=Atom&url=twitter.com/search%3Fq%3D%2523rss-bridge' which would redirect to: '/?action=display&q=%23rss-bridge&bridge=Twitter&format=Atom'. This auto detection happens on a per-bridge basis, so a new function 'detectParameters' is added to BridgeInterface which bridges may implement. It takes a URL for an argument and returns a list of parameters that were extracted, or null if the URL isn't relevant for the bridge. * [TwitterBridge] Add parameter auto detection * [BridgeAbstract] Add generic parameter detection This adds generic "paramater detection" for bridges that don't have any parameters defined. If the queried URL matches the URI defined in the bridge (ignoring https://, www. and trailing /) an emtpy list of parameters is returned.
This commit is contained in:
@@ -66,6 +66,41 @@ class TwitterBridge extends BridgeAbstract {
|
||||
)
|
||||
);
|
||||
|
||||
public function detectParameters($url){
|
||||
$params = array();
|
||||
|
||||
// By keyword or hashtag (search)
|
||||
$regex = '/^(https?:\/\/)?(www\.)?twitter\.com\/search.*(\?|&)q=([^\/&?\n]+)/';
|
||||
if(preg_match($regex, $url, $matches) > 0) {
|
||||
$params['q'] = urldecode($matches[4]);
|
||||
return $params;
|
||||
}
|
||||
|
||||
// By hashtag
|
||||
$regex = '/^(https?:\/\/)?(www\.)?twitter\.com\/hashtag\/([^\/?\n]+)/';
|
||||
if(preg_match($regex, $url, $matches) > 0) {
|
||||
$params['q'] = urldecode($matches[3]);
|
||||
return $params;
|
||||
}
|
||||
|
||||
// By list
|
||||
$regex = '/^(https?:\/\/)?(www\.)?twitter\.com\/([^\/?\n]+)\/lists\/([^\/?\n]+)/';
|
||||
if(preg_match($regex, $url, $matches) > 0) {
|
||||
$params['user'] = urldecode($matches[3]);
|
||||
$params['list'] = urldecode($matches[4]);
|
||||
return $params;
|
||||
}
|
||||
|
||||
// By username
|
||||
$regex = '/^(https?:\/\/)?(www\.)?twitter\.com\/([^\/?\n]+)/';
|
||||
if(preg_match($regex, $url, $matches) > 0) {
|
||||
$params['u'] = urldecode($matches[3]);
|
||||
return $params;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function getName(){
|
||||
switch($this->queriedContext) {
|
||||
case 'By keyword or hashtag':
|
||||
|
Reference in New Issue
Block a user