mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2024-11-25 19:06:23 +03:00
[GoogleGroupsBridge] Add new bridge for Google Groups (#2451)
This commit is contained in:
parent
4d4ce3f380
commit
012ecf8e52
1 changed files with 68 additions and 0 deletions
68
bridges/GoogleGroupsBridge.php
Normal file
68
bridges/GoogleGroupsBridge.php
Normal file
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
|
||||
class GoogleGroupsBridge extends XPathAbstract {
|
||||
const NAME = 'Google Groups Bridge';
|
||||
const DESCRIPTION = 'Returns the latest posts on a Google Group';
|
||||
const URI = 'https://groups.google.com';
|
||||
const MAINTAINER = 'Yaman Qalieh';
|
||||
const PARAMETERS = array( array(
|
||||
'group' => array(
|
||||
'name' => 'Group id',
|
||||
'title' => 'The string that follows /g/ in the URL',
|
||||
'exampleValue' => 'governance',
|
||||
'required' => true
|
||||
),
|
||||
'account' => array(
|
||||
'name' => 'Account id',
|
||||
'title' => 'Some Google groups have an additional id following /a/ in the URL',
|
||||
'exampleValue' => 'mozilla.org',
|
||||
'required' => false
|
||||
)
|
||||
));
|
||||
const CACHE_TIMEOUT = 3600;
|
||||
|
||||
const TEST_DETECT_PARAMETERS = array(
|
||||
'https://groups.google.com/a/mozilla.org/g/announce' => array(
|
||||
'account' => 'mozilla.org', 'group' => 'announce'
|
||||
),
|
||||
'https://groups.google.com/g/ansible-project' => array(
|
||||
'account' => null, 'group' => 'ansible-project'
|
||||
),
|
||||
);
|
||||
|
||||
const XPATH_EXPRESSION_ITEM = '//div[@class="yhgbKd"]';
|
||||
const XPATH_EXPRESSION_ITEM_TITLE = './/span[@class="o1DPKc"]';
|
||||
const XPATH_EXPRESSION_ITEM_CONTENT = './/span[@class="WzoK"]';
|
||||
const XPATH_EXPRESSION_ITEM_URI = './/a[@class="ZLl54"]/@href';
|
||||
const XPATH_EXPRESSION_ITEM_AUTHOR = './/span[@class="z0zUgf"][last()]';
|
||||
const XPATH_EXPRESSION_ITEM_TIMESTAMP = './/div[@class="tRlaM"]';
|
||||
const XPATH_EXPRESSION_ITEM_ENCLOSURES = '';
|
||||
const XPATH_EXPRESSION_ITEM_CATEGORIES = '';
|
||||
const SETTING_FIX_ENCODING = true;
|
||||
|
||||
protected function getSourceUrl() {
|
||||
$source = self::URI;
|
||||
|
||||
$account = $this->getInput('account');
|
||||
if($account) {
|
||||
$source = $source . '/a/' . $account;
|
||||
}
|
||||
return $source . '/g/' . $this->getInput('group');
|
||||
}
|
||||
|
||||
protected function provideWebsiteContent() {
|
||||
return defaultLinkTo(getContents($this->getSourceUrl()), self::URI);
|
||||
}
|
||||
|
||||
const URL_REGEX = '#^https://groups.google.com(?:/a/(?<account>\S+))?(?:/g/(?<group>\S+))#';
|
||||
|
||||
public function detectParameters($url) {
|
||||
$params = array();
|
||||
if(preg_match(self::URL_REGEX, $url, $matches)) {
|
||||
$params['group'] = $matches['group'];
|
||||
$params['account'] = $matches['account'];
|
||||
return $params;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue