diff --git a/bridges/Arte7Bridge.php b/bridges/Arte7Bridge.php
index 42b5afcc..1162d174 100644
--- a/bridges/Arte7Bridge.php
+++ b/bridges/Arte7Bridge.php
@@ -60,7 +60,7 @@ class Arte7Bridge extends BridgeAbstract {
break;
}
- $url = 'https://api.arte.tv/api/opa/v3/videos?sort=broadcastBegin&limit=10&language='
+ $url = 'https://api.arte.tv/api/opa/v3/videos?sort=-lastModified&limit=10&language='
. $lang
. ($category != null ? '&category.code=' . $category : '');
diff --git a/bridges/PinterestBridge.php b/bridges/PinterestBridge.php
index c5282ff5..7eeafc1a 100644
--- a/bridges/PinterestBridge.php
+++ b/bridges/PinterestBridge.php
@@ -15,12 +15,6 @@ class PinterestBridge extends FeedExpander {
'b' => array(
'name' => 'board',
'required' => true
- ),
- 'r' => array(
- 'name' => 'Use custom RSS',
- 'type' => 'checkbox',
- 'required' => false,
- 'title' => 'Uncheck to return data via custom filters (more data)'
)
),
'From search' => array(
@@ -34,12 +28,8 @@ class PinterestBridge extends FeedExpander {
public function collectData(){
switch($this->queriedContext) {
case 'By username and board':
- if($this->getInput('r')) {
- $html = getSimpleHTMLDOMCached($this->getURI());
- $this->getUserResults($html);
- } else {
- $this->collectExpandableDatas($this->getURI() . '.rss');
- }
+ $this->collectExpandableDatas($this->getURI() . '.rss');
+ $this->fixLowRes();
break;
case 'From search':
default:
@@ -48,49 +38,17 @@ class PinterestBridge extends FeedExpander {
}
}
- private function getUserResults($html){
- $json = json_decode($html->find('#jsInit1', 0)->innertext, true);
- $results = $json['tree']['children'][0]['children'][0]['children'][0]['options']['props']['data']['board_feed'];
- $username = $json['resourceDataCache'][0]['data']['owner']['username'];
- $fullname = $json['resourceDataCache'][0]['data']['owner']['full_name'];
- $avatar = $json['resourceDataCache'][0]['data']['owner']['image_small_url'];
+ private function fixLowRes() {
- foreach($results as $result) {
- $item = array();
+ $newitems = [];
+ $pattern = '/https\:\/\/i\.pinimg\.com\/[a-zA-Z0-9]*x\//';
+ foreach($this->items as $item) {
- $item['uri'] = $result['link'];
-
- // Some use regular titles, others provide 'advanced' infos, a few
- // provide even less info. Thus we attempt multiple options.
- $item['title'] = trim($result['title']);
-
- if($item['title'] === "")
- $item['title'] = trim($result['rich_summary']['display_name']);
-
- if($item['title'] === "")
- $item['title'] = trim($result['description']);
-
- $item['timestamp'] = strtotime($result['created_at']);
- $item['username'] = $username;
- $item['fullname'] = $fullname;
- $item['avatar'] = $avatar;
- $item['author'] = $item['username'] . ' (' . $item['fullname'] . ')';
- $item['content'] = '
'
- . $item['username']
- . '
'
- . $item['fullname']
- . '
' - . $result['description'] - . '
'; - - $item['enclosures'] = array($result['images']['orig']['url']); - - $this->items[] = $item; + $item["content"] = preg_replace($pattern, 'https://i.pinimg.com/originals/', $item["content"]); + $newitems[] = $item; } + $this->items = $newitems; + } private function getSearchResults($html){ diff --git a/bridges/PlanetLibreBridge.php b/bridges/PlanetLibreBridge.php deleted file mode 100644 index 03a6024d..00000000 --- a/bridges/PlanetLibreBridge.php +++ /dev/null @@ -1,38 +0,0 @@ -find('div[class="post-text"]', 0)->innertext; - return $text; - } - - public function collectData(){ - $html = getSimpleHTMLDOM(self::URI) - or returnServerError('Could not request PlanetLibre.'); - $limit = 0; - foreach($html->find('div.post') as $element) { - if($limit < 5) { - $item = array(); - $item['title'] = $element->find('h1', 0)->plaintext; - $item['uri'] = $element->find('a', 0)->href; - $item['timestamp'] = strtotime( - str_replace( - '/', - '-', - $element->find('div[class="post-date"]', 0)->plaintext - ) - ); - - $item['content'] = $this->extractContent($item['uri']); - $this->items[] = $item; - $limit++; - } - } - } -} diff --git a/bridges/SteamBridge.php b/bridges/SteamBridge.php index b0f1033f..8d6e4f13 100644 --- a/bridges/SteamBridge.php +++ b/bridges/SteamBridge.php @@ -2,7 +2,7 @@ class SteamBridge extends BridgeAbstract { const NAME = 'Steam Bridge'; - const URI = 'https://steamcommunity.com/'; + const URI = 'https://store.steampowered.com/'; const CACHE_TIMEOUT = 3600; // 1h const DESCRIPTION = 'Returns games list'; const MAINTAINER = 'jacknumber'; @@ -68,62 +68,65 @@ class SteamBridge extends BridgeAbstract { $username = $this->getInput('username'); $params = array( - 'sort' => $this->getInput('sort'), - 'cc' => $this->getInput('currency') + 'cc' => $this->getInput('currency'), + 'sort' => $this->getInput('sort') ); - $url = self::URI . 'id/' . $username . '/wishlist?' . http_build_query($params); + $url = self::URI . 'wishlist/id/' . $username . '/?' . http_build_query($params); - $html = ''; - $html = getSimpleHTMLDOM($url) + $jsonDataRegex = '/var g_rg(?:WishlistData|AppInfo) = ([^;]*)/'; + $content = getContents($url) or returnServerError("Could not request Steam Wishlist. Tried:\n - $url"); - foreach($html->find('#wishlist_items .wishlistRow') as $element) { + preg_match_all($jsonDataRegex, $content, $matches, PREG_SET_ORDER, 0); - $gameTitle = $element->find('h4', 0)->plaintext; - $gameUri = $element->find('.storepage_btn_ctn a', 0)->href; - $gameImg = $element->find('.gameListRowLogo img', 0)->src; + $appList = json_decode($matches[0][1], true); + $fullAppList = json_decode($matches[1][1], true); + //var_dump($matches[1][1]); + //var_dump($fullAppList); + $sortedElementList = array_fill(0, count($appList), 0); + foreach($appList as $app) { - $discountBlock = $element->find('.discount_block', 0); + $sortedElementList[$app["priority"] - 1] = $app["appid"]; - if($element->find('.discount_block', 0)) { - $gameHasPromo = 1; - } else { + } - if($this->getInput('only_discount')) { - continue; - } + foreach($sortedElementList as $appId) { - $gameHasPromo = 0; - - } - - if($gameHasPromo) { - - $gamePromoValue = $discountBlock->find('.discount_pct', 0)->plaintext; - $gameOldPrice = $discountBlock->find('.discount_original_price', 0)->plaintext; - $gameNewPrice = $discountBlock->find('.discount_final_price', 0)->plaintext; - $gamePrice = $gameNewPrice; - - } else { - $gamePrice = $element->find('.gameListPriceData .price', 0)->plaintext; - } + $app = $fullAppList[$appId]; + $gameTitle = $app["name"]; + $gameUri = "http://store.steampowered.com/app/" . $appId . "/"; + $gameImg = $app["capsule"]; $item = array(); $item['uri'] = $gameUri; $item['title'] = $gameTitle; - $item['price'] = $gamePrice; - $item['hasPromo'] = $gameHasPromo; - if($gameHasPromo) { + if(count($app["subs"]) > 0) { + if($app["subs"][0]["discount_pct"] != 0) { - $item['promoValue'] = $gamePromoValue; - $item['oldPrice'] = $gameOldPrice; - $item['newPrice'] = $gameNewPrice; + $item['promoValue'] = $app["subs"][0]["discount_pct"]; + $item['oldPrice'] = $app["subs"][0]["price"] / 100 / ((100 - $gamePromoValue / 100)); + $item['newPrice'] = $app["subs"][0]["price"] / 100; + $item['price'] = $item['newPrice']; + + $item['hasPromo'] = true; + + } else { + + if($this->getInput('only_discount')) { + continue; + } + + $item['price'] = $app["subs"][0]["price"] / 100; + $item['hasPromo'] = false; + } } $this->items[] = $item; + } + } } diff --git a/bridges/VkBridge.php b/bridges/VkBridge.php index 85bf60c5..4eba9610 100644 --- a/bridges/VkBridge.php +++ b/bridges/VkBridge.php @@ -17,6 +17,8 @@ class VkBridge extends BridgeAbstract ) ); + protected $pageName; + public function getURI() { if (!is_null($this->getInput('u'))) { @@ -26,15 +28,24 @@ class VkBridge extends BridgeAbstract return parent::getURI(); } + public function getName() + { + if ($this->pageName) { + return $this->pageName; + } + + return parent::getName(); + } + public function collectData() { - $text_html = $this->getContents() or returnServerError('No results for group or user name "' . $this->getInput('u') . '".'); $text_html = iconv('windows-1251', 'utf-8', $text_html); $html = str_get_html($text_html); $pageName = $html->find('.page_name', 0)->plaintext; + $this->pageName = $pageName; foreach ($html->find('.post') as $post) { diff --git a/bridges/YoutubeBridge.php b/bridges/YoutubeBridge.php index 3d81daeb..321fb264 100644 --- a/bridges/YoutubeBridge.php +++ b/bridges/YoutubeBridge.php @@ -50,12 +50,28 @@ class YoutubeBridge extends BridgeAbstract { private function ytBridgeQueryVideoInfo($vid, &$author, &$desc, &$time){ $html = $this->ytGetSimpleHTMLDOM(self::URI . "watch?v=$vid"); - $author = $html->innertext; - $author = substr($author, strpos($author, '"author=') + 8); - $author = substr($author, 0, strpos($author, '\u0026')); - if(!is_null($html->find('div#watch-description-text', 0))) - $desc = $html->find('div#watch-description-text', 0)->innertext; + // Skip unavailable videos + if(!strpos($html->innertext, 'IS_UNAVAILABLE_PAGE')) { + return; + } + + foreach($html->find('script') as $script) { + $data = trim($script->innertext); + + if(strpos($data, '{') !== 0) + continue; // Wrong script + + $json = json_decode($data); + + if(!isset($json->itemListElement)) + continue; // Wrong script + + $author = $json->itemListElement[0]->item->name; + } + + if(!is_null($html->find('#watch-description-text', 0))) + $desc = $html->find('#watch-description-text', 0)->innertext; if(!is_null($html->find('meta[itemprop=datePublished]', 0))) $time = strtotime($html->find('meta[itemprop=datePublished]', 0)->getAttribute('content')); diff --git a/index.php b/index.php index 799980b5..851f0f92 100644 --- a/index.php +++ b/index.php @@ -70,6 +70,9 @@ if(!extension_loaded('openssl')) if(!extension_loaded('libxml')) die('"libxml" extension not loaded. Please check "php.ini"'); +if(!extension_loaded('mbstring')) + die('"mbstring" extension not loaded. Please check "php.ini"'); + // configuration checks if(ini_get('allow_url_fopen') !== "1") die('"allow_url_fopen" is not set to "1". Please check "php.ini');