diff options
Diffstat (limited to 'bridges/FirefoxAddonsBridge.php')
-rw-r--r-- | bridges/FirefoxAddonsBridge.php | 188 |
1 files changed, 97 insertions, 91 deletions
diff --git a/bridges/FirefoxAddonsBridge.php b/bridges/FirefoxAddonsBridge.php index ca237f77..f85c3ea4 100644 --- a/bridges/FirefoxAddonsBridge.php +++ b/bridges/FirefoxAddonsBridge.php @@ -1,75 +1,78 @@ <?php -class FirefoxAddonsBridge extends BridgeAbstract { - const NAME = 'Firefox Add-ons Bridge'; - const URI = 'https://addons.mozilla.org/'; - const DESCRIPTION = 'Returns version history for a Firefox Add-on.'; - const MAINTAINER = 'VerifiedJoseph'; - const PARAMETERS = array(array( - 'id' => array( - 'name' => 'Add-on ID', - 'type' => 'text', - 'required' => true, - 'exampleValue' => 'save-to-the-wayback-machine', - ) - ) - ); - const CACHE_TIMEOUT = 3600; - - private $feedName = ''; - private $releaseDateRegex = '/Released ([\w, ]+) - ([\w. ]+)/'; - private $xpiFileRegex = '/([A-Za-z0-9_.-]+)\.xpi$/'; - private $outgoingRegex = '/https:\/\/outgoing.prod.mozaws.net\/v1\/(?:[A-z0-9]+)\//'; - - private $urlRegex = '/addons\.mozilla\.org\/(?:[\w-]+\/)?firefox\/addon\/([\w-]+)/'; - - public function detectParameters($url) { - $params = array(); - - if(preg_match($this->urlRegex, $url, $matches)) { - $params['id'] = $matches[1]; - return $params; - } - - return null; - } - - public function collectData() { - $html = getSimpleHTMLDOM($this->getURI()); - - $this->feedName = $html->find('h1[class="AddonTitle"] > a', 0)->innertext; - $author = $html->find('span.AddonTitle-author > a', 0)->plaintext; - - foreach ($html->find('li.AddonVersionCard') as $li) { - $item = array(); - - $item['title'] = $li->find('h2.AddonVersionCard-version', 0)->plaintext; - $item['uid'] = $item['title']; - $item['uri'] = $this->getURI(); - $item['author'] = $author; - - if (preg_match($this->releaseDateRegex, $li->find('div.AddonVersionCard-fileInfo', 0)->plaintext, $match)) { - $item['timestamp'] = $match[1]; - $size = $match[2]; - } - - $compatibility = $li->find('div.AddonVersionCard-compatibility', 0)->plaintext; - $license = $li->find('p.AddonVersionCard-license', 0)->innertext; - - if ($li->find('a.InstallButtonWrapper-download-link', 0)) { - $downloadlink = $li->find('a.InstallButtonWrapper-download-link', 0)->href; - - } elseif ($li->find('a.Button.Button--action.AMInstallButton-button.Button--puffy', 0)) { - $downloadlink = $li->find('a.Button.Button--action.AMInstallButton-button.Button--puffy', 0)->href; - } - - $releaseNotes = $this->removeOutgoinglink($li->find('div.AddonVersionCard-releaseNotes', 0)); - - if (preg_match($this->xpiFileRegex, $downloadlink, $match)) { - $xpiFilename = $match[0]; - } - - $item['content'] = <<<EOD +class FirefoxAddonsBridge extends BridgeAbstract +{ + const NAME = 'Firefox Add-ons Bridge'; + const URI = 'https://addons.mozilla.org/'; + const DESCRIPTION = 'Returns version history for a Firefox Add-on.'; + const MAINTAINER = 'VerifiedJoseph'; + const PARAMETERS = [[ + 'id' => [ + 'name' => 'Add-on ID', + 'type' => 'text', + 'required' => true, + 'exampleValue' => 'save-to-the-wayback-machine', + ] + ] + ]; + + const CACHE_TIMEOUT = 3600; + + private $feedName = ''; + private $releaseDateRegex = '/Released ([\w, ]+) - ([\w. ]+)/'; + private $xpiFileRegex = '/([A-Za-z0-9_.-]+)\.xpi$/'; + private $outgoingRegex = '/https:\/\/outgoing.prod.mozaws.net\/v1\/(?:[A-z0-9]+)\//'; + + private $urlRegex = '/addons\.mozilla\.org\/(?:[\w-]+\/)?firefox\/addon\/([\w-]+)/'; + + public function detectParameters($url) + { + $params = []; + + if (preg_match($this->urlRegex, $url, $matches)) { + $params['id'] = $matches[1]; + return $params; + } + + return null; + } + + public function collectData() + { + $html = getSimpleHTMLDOM($this->getURI()); + + $this->feedName = $html->find('h1[class="AddonTitle"] > a', 0)->innertext; + $author = $html->find('span.AddonTitle-author > a', 0)->plaintext; + + foreach ($html->find('li.AddonVersionCard') as $li) { + $item = []; + + $item['title'] = $li->find('h2.AddonVersionCard-version', 0)->plaintext; + $item['uid'] = $item['title']; + $item['uri'] = $this->getURI(); + $item['author'] = $author; + + if (preg_match($this->releaseDateRegex, $li->find('div.AddonVersionCard-fileInfo', 0)->plaintext, $match)) { + $item['timestamp'] = $match[1]; + $size = $match[2]; + } + + $compatibility = $li->find('div.AddonVersionCard-compatibility', 0)->plaintext; + $license = $li->find('p.AddonVersionCard-license', 0)->innertext; + + if ($li->find('a.InstallButtonWrapper-download-link', 0)) { + $downloadlink = $li->find('a.InstallButtonWrapper-download-link', 0)->href; + } elseif ($li->find('a.Button.Button--action.AMInstallButton-button.Button--puffy', 0)) { + $downloadlink = $li->find('a.Button.Button--action.AMInstallButton-button.Button--puffy', 0)->href; + } + + $releaseNotes = $this->removeOutgoinglink($li->find('div.AddonVersionCard-releaseNotes', 0)); + + if (preg_match($this->xpiFileRegex, $downloadlink, $match)) { + $xpiFilename = $match[0]; + } + + $item['content'] = <<<EOD <strong>Release Notes</strong> <p>{$releaseNotes}</p> <strong>Compatibility</strong> @@ -80,31 +83,34 @@ class FirefoxAddonsBridge extends BridgeAbstract { <p><a href="{$downloadlink}">{$xpiFilename}</a> ($size)</p> EOD; - $this->items[] = $item; - } - } + $this->items[] = $item; + } + } - public function getURI() { - if (!is_null($this->getInput('id'))) { - return self::URI . 'en-US/firefox/addon/' . $this->getInput('id') . '/versions/'; - } + public function getURI() + { + if (!is_null($this->getInput('id'))) { + return self::URI . 'en-US/firefox/addon/' . $this->getInput('id') . '/versions/'; + } - return parent::getURI(); - } + return parent::getURI(); + } - public function getName() { - if (!empty($this->feedName)) { - return $this->feedName . ' - Firefox Add-on'; - } + public function getName() + { + if (!empty($this->feedName)) { + return $this->feedName . ' - Firefox Add-on'; + } - return parent::getName(); - } + return parent::getName(); + } - private function removeOutgoinglink($html) { - foreach ($html->find('a') as $a) { - $a->href = urldecode(preg_replace($this->outgoingRegex, '', $a->href)); - } + private function removeOutgoinglink($html) + { + foreach ($html->find('a') as $a) { + $a->href = urldecode(preg_replace($this->outgoingRegex, '', $a->href)); + } - return $html->innertext; - } + return $html->innertext; + } } |