aboutsummaryrefslogtreecommitdiff
path: root/bridges/FirefoxAddonsBridge.php
diff options
context:
space:
mode:
Diffstat (limited to 'bridges/FirefoxAddonsBridge.php')
-rw-r--r--bridges/FirefoxAddonsBridge.php188
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;
+ }
}