aboutsummaryrefslogtreecommitdiff
path: root/bridges/SteamCommunityBridge.php
diff options
context:
space:
mode:
Diffstat (limited to 'bridges/SteamCommunityBridge.php')
-rw-r--r--bridges/SteamCommunityBridge.php394
1 files changed, 206 insertions, 188 deletions
diff --git a/bridges/SteamCommunityBridge.php b/bridges/SteamCommunityBridge.php
index b0f08cf0..37ed555d 100644
--- a/bridges/SteamCommunityBridge.php
+++ b/bridges/SteamCommunityBridge.php
@@ -1,191 +1,209 @@
<?php
-class SteamCommunityBridge extends BridgeAbstract {
- const NAME = 'Steam Community';
- const URI = 'https://www.steamcommunity.com';
- const DESCRIPTION = 'Get the latest community updates for a game on Steam.';
- const MAINTAINER = 'thefranke';
- const CACHE_TIMEOUT = 3600; // 1h
-
- const PARAMETERS = array(
- array(
- 'i' => array(
- 'name' => 'App ID',
- 'exampleValue' => '730',
- 'required' => true
- ),
- 'category' => array(
- 'name' => 'category',
- 'type' => 'list',
- 'exampleValue' => 'Artwork',
- 'title' => 'Select a category',
- 'values' => array(
- 'Artwork' => 'images',
- 'Screenshots' => 'screenshots',
- 'Videos' => 'videos',
- 'Workshop' => 'workshop'
- )
- )
- )
- );
-
- public function getIcon() {
- return self::URI . '/favicon.ico';
- }
-
- protected function getMainPage() {
- $category = $this->getInput('category');
- $html = getSimpleHTMLDOM($this->getURI());
-
- return $html;
- }
-
- public function getName() {
- $category = $this->getInput('category');
-
- if (is_null('i') || is_null($category)) {
- return self::NAME;
- }
-
- $html = $this->getMainPage();
-
- $titleItem = $html->find('div.apphub_AppName', 0);
-
- if (!$titleItem)
- return self::NAME;
-
- return $titleItem->innertext . ' (' . ucwords($category) . ')';
- }
-
- public function getURI() {
- if ($this->getInput('category') === 'workshop')
- return self::URI . '/workshop/browse/?appid='
- . $this->getInput('i') . '&browsesort=mostrecent';
-
- return self::URI . '/app/'
- . $this->getInput('i') . '/'
- . $this->getInput('category')
- . '/?p=1&browsefilter=mostrecent';
- }
-
- private function collectMedia() {
- $category = $this->getInput('category');
- $html = $this->getMainPage();
- $cards = $html->find('div.apphub_Card');
-
- foreach($cards as $card) {
- $uri = $card->getAttribute('data-modal-content-url');
-
- $htmlCard = getSimpleHTMLDOMCached($uri);
-
- $author = $card->find('div.apphub_CardContentAuthorName', 0)->innertext;
- $author = strip_tags($author);
-
- $title = $author . '\'s screenshot';
-
- if ($category != 'screenshots')
- $title = $htmlCard->find('div.workshopItemTitle', 0)->innertext;
-
- $date = $htmlCard->find('div.detailsStatRight', 0)->innertext;
-
- // create item
- $item = array();
- $item['title'] = $title;
- $item['uri'] = $uri;
- $item['timestamp'] = strtotime($date);
- $item['author'] = $author;
- $item['categories'] = $category;
-
- $media = $htmlCard->getElementById('ActualMedia');
- $mediaURI = $media->getAttribute('src');
- $downloadURI = $mediaURI;
-
- if ($category == 'videos') {
- preg_match('/.*\/embed\/(.*)\?/', $mediaURI, $result);
- $youtubeID = $result[1];
- $mediaURI = 'https://img.youtube.com/vi/' . $youtubeID . '/hqdefault.jpg';
- $downloadURI = 'https://www.youtube.com/watch?v=' . $youtubeID;
- }
-
- $desc = '';
-
- if ($category == 'screenshots') {
- $descItem = $htmlCard->find('div.screenshotDescription', 0);
- if ($descItem)
- $desc = $descItem->innertext;
- }
- if ($category == 'images') {
- $descItem = $htmlCard->find('div.nonScreenshotDescription', 0);
- if ($descItem)
- $desc = $descItem->innertext;
- $downloadURI = $htmlCard->find('a.downloadImage', 0)->href;
- }
-
- $item['content'] = '<p><a href="' . $downloadURI . '"><img src="' . $mediaURI . '"/></a></p>';
- $item['content'] .= '<p>' . $desc . '</p>';
-
- $this->items[] = $item;
-
- if (count($this->items) >= 10)
- break;
- }
- }
-
- private function collectWorkshop() {
- $category = $this->getInput('category');
- $html = $this->getMainPage();
- $workShopItems = $html->find('div.workshopItem');
-
- foreach($workShopItems as $workShopItem) {
- $author = $workShopItem->find('div.workshopItemAuthorName', 0)->find('a', 0);
- $author = $author->innertext;
-
- $fileRating = $workShopItem->find('img.fileRating', 0);
-
- $uri = $workShopItem->find('a.ugc', 0)->getAttribute('href');
-
- $htmlItem = getSimpleHTMLDOMCached($uri);
-
- $title = $htmlItem->find('div.workshopItemTitle', 0)->innertext;
- $date = $htmlItem->find('div.detailsStatRight', 0)->innertext;
- $description = $htmlItem->find('div.workshopItemDescription', 0)->innertext;
-
- $previewImage = $htmlItem->find('#previewImage', 0);
-
- $htmlTags = $htmlItem->find('div.workshopTags');
-
- $tags = '';
-
- foreach($htmlTags as $htmlTag) {
- if ($tags !== '')
- $tags .= ',';
-
- $tags .= $htmlTag->find('a', 0)->innertext;
- }
-
- // create item
- $item = array();
- $item['title'] = $title;
- $item['uri'] = $uri;
- $item['timestamp'] = strtotime($date);
- $item['author'] = $author;
- $item['categories'] = $category;
-
- $item['content'] = '<p><a href="' . $uri . '">'
- . $previewImage . '</a></p><p>' . $fileRating
- . '</p><p>' . $description . '</p>';
-
- $this->items[] = $item;
-
- if (count($this->items) >= 10)
- break;
- }
- }
-
- public function collectData() {
- if ($this->getInput('category') === 'workshop')
- $this->collectWorkshop();
- else
- $this->collectMedia();
- }
+class SteamCommunityBridge extends BridgeAbstract
+{
+ const NAME = 'Steam Community';
+ const URI = 'https://www.steamcommunity.com';
+ const DESCRIPTION = 'Get the latest community updates for a game on Steam.';
+ const MAINTAINER = 'thefranke';
+ const CACHE_TIMEOUT = 3600; // 1h
+
+ const PARAMETERS = [
+ [
+ 'i' => [
+ 'name' => 'App ID',
+ 'exampleValue' => '730',
+ 'required' => true
+ ],
+ 'category' => [
+ 'name' => 'category',
+ 'type' => 'list',
+ 'exampleValue' => 'Artwork',
+ 'title' => 'Select a category',
+ 'values' => [
+ 'Artwork' => 'images',
+ 'Screenshots' => 'screenshots',
+ 'Videos' => 'videos',
+ 'Workshop' => 'workshop'
+ ]
+ ]
+ ]
+ ];
+
+ public function getIcon()
+ {
+ return self::URI . '/favicon.ico';
+ }
+
+ protected function getMainPage()
+ {
+ $category = $this->getInput('category');
+ $html = getSimpleHTMLDOM($this->getURI());
+
+ return $html;
+ }
+
+ public function getName()
+ {
+ $category = $this->getInput('category');
+
+ if (is_null('i') || is_null($category)) {
+ return self::NAME;
+ }
+
+ $html = $this->getMainPage();
+
+ $titleItem = $html->find('div.apphub_AppName', 0);
+
+ if (!$titleItem) {
+ return self::NAME;
+ }
+
+ return $titleItem->innertext . ' (' . ucwords($category) . ')';
+ }
+
+ public function getURI()
+ {
+ if ($this->getInput('category') === 'workshop') {
+ return self::URI . '/workshop/browse/?appid='
+ . $this->getInput('i') . '&browsesort=mostrecent';
+ }
+
+ return self::URI . '/app/'
+ . $this->getInput('i') . '/'
+ . $this->getInput('category')
+ . '/?p=1&browsefilter=mostrecent';
+ }
+
+ private function collectMedia()
+ {
+ $category = $this->getInput('category');
+ $html = $this->getMainPage();
+ $cards = $html->find('div.apphub_Card');
+
+ foreach ($cards as $card) {
+ $uri = $card->getAttribute('data-modal-content-url');
+
+ $htmlCard = getSimpleHTMLDOMCached($uri);
+
+ $author = $card->find('div.apphub_CardContentAuthorName', 0)->innertext;
+ $author = strip_tags($author);
+
+ $title = $author . '\'s screenshot';
+
+ if ($category != 'screenshots') {
+ $title = $htmlCard->find('div.workshopItemTitle', 0)->innertext;
+ }
+
+ $date = $htmlCard->find('div.detailsStatRight', 0)->innertext;
+
+ // create item
+ $item = [];
+ $item['title'] = $title;
+ $item['uri'] = $uri;
+ $item['timestamp'] = strtotime($date);
+ $item['author'] = $author;
+ $item['categories'] = $category;
+
+ $media = $htmlCard->getElementById('ActualMedia');
+ $mediaURI = $media->getAttribute('src');
+ $downloadURI = $mediaURI;
+
+ if ($category == 'videos') {
+ preg_match('/.*\/embed\/(.*)\?/', $mediaURI, $result);
+ $youtubeID = $result[1];
+ $mediaURI = 'https://img.youtube.com/vi/' . $youtubeID . '/hqdefault.jpg';
+ $downloadURI = 'https://www.youtube.com/watch?v=' . $youtubeID;
+ }
+
+ $desc = '';
+
+ if ($category == 'screenshots') {
+ $descItem = $htmlCard->find('div.screenshotDescription', 0);
+ if ($descItem) {
+ $desc = $descItem->innertext;
+ }
+ }
+
+ if ($category == 'images') {
+ $descItem = $htmlCard->find('div.nonScreenshotDescription', 0);
+ if ($descItem) {
+ $desc = $descItem->innertext;
+ }
+ $downloadURI = $htmlCard->find('a.downloadImage', 0)->href;
+ }
+
+ $item['content'] = '<p><a href="' . $downloadURI . '"><img src="' . $mediaURI . '"/></a></p>';
+ $item['content'] .= '<p>' . $desc . '</p>';
+
+ $this->items[] = $item;
+
+ if (count($this->items) >= 10) {
+ break;
+ }
+ }
+ }
+
+ private function collectWorkshop()
+ {
+ $category = $this->getInput('category');
+ $html = $this->getMainPage();
+ $workShopItems = $html->find('div.workshopItem');
+
+ foreach ($workShopItems as $workShopItem) {
+ $author = $workShopItem->find('div.workshopItemAuthorName', 0)->find('a', 0);
+ $author = $author->innertext;
+
+ $fileRating = $workShopItem->find('img.fileRating', 0);
+
+ $uri = $workShopItem->find('a.ugc', 0)->getAttribute('href');
+
+ $htmlItem = getSimpleHTMLDOMCached($uri);
+
+ $title = $htmlItem->find('div.workshopItemTitle', 0)->innertext;
+ $date = $htmlItem->find('div.detailsStatRight', 0)->innertext;
+ $description = $htmlItem->find('div.workshopItemDescription', 0)->innertext;
+
+ $previewImage = $htmlItem->find('#previewImage', 0);
+
+ $htmlTags = $htmlItem->find('div.workshopTags');
+
+ $tags = '';
+
+ foreach ($htmlTags as $htmlTag) {
+ if ($tags !== '') {
+ $tags .= ',';
+ }
+
+ $tags .= $htmlTag->find('a', 0)->innertext;
+ }
+
+ // create item
+ $item = [];
+ $item['title'] = $title;
+ $item['uri'] = $uri;
+ $item['timestamp'] = strtotime($date);
+ $item['author'] = $author;
+ $item['categories'] = $category;
+
+ $item['content'] = '<p><a href="' . $uri . '">'
+ . $previewImage . '</a></p><p>' . $fileRating
+ . '</p><p>' . $description . '</p>';
+
+ $this->items[] = $item;
+
+ if (count($this->items) >= 10) {
+ break;
+ }
+ }
+ }
+
+ public function collectData()
+ {
+ if ($this->getInput('category') === 'workshop') {
+ $this->collectWorkshop();
+ } else {
+ $this->collectMedia();
+ }
+ }
}