123 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
class HumbleBundlesBridge extends BridgeAbstract {
 | 
						|
    const MAINTAINER = 'Akamaru';
 | 
						|
    const NAME = 'Humble Bundle';
 | 
						|
    const URI = 'https://www.humblebundle.com/';
 | 
						|
    const CACHE_TIMEOUT = 3600; // 1h
 | 
						|
    const DESCRIPTION = 'Get the latest bundles from Humble Bundle.';
 | 
						|
 | 
						|
    public function getIcon() {
 | 
						|
        return 'https://www.humblebundle.com/favicon.ico';
 | 
						|
    }
 | 
						|
 | 
						|
    const PARAMETERS = [
 | 
						|
        [
 | 
						|
            'category' => [
 | 
						|
                'name' => 'Category',
 | 
						|
                'type' => 'list',
 | 
						|
                'values' => [
 | 
						|
                    'All' => 'all',
 | 
						|
                    'Games' => 'games',
 | 
						|
                    'Books' => 'books',
 | 
						|
                    'Software' => 'software',
 | 
						|
                ],
 | 
						|
                'defaultValue' => 'all',
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
    ];
 | 
						|
 | 
						|
    public function collectData() {
 | 
						|
        $html = getSimpleHTMLDOM(self::URI . 'bundles');
 | 
						|
        if (!$html) return;
 | 
						|
 | 
						|
        // Find the script tag with id "landingPage-json-data"
 | 
						|
        $scriptTag = $html->find('script#landingPage-json-data', 0);
 | 
						|
        if (!$scriptTag) return;
 | 
						|
 | 
						|
        $jsonData = $scriptTag->innertext;
 | 
						|
        $data = json_decode($jsonData, true);
 | 
						|
        if (!$data) return;
 | 
						|
 | 
						|
        $category = $this->getInput('category');
 | 
						|
        $bundles = [];
 | 
						|
 | 
						|
        // Get bundles based on category
 | 
						|
        if ($category === 'all') {
 | 
						|
            // Collect all bundles from all categories
 | 
						|
            if (isset($data['data']['games']['mosaic'][0]['products'])) {
 | 
						|
                $bundles = array_merge($bundles, $data['data']['games']['mosaic'][0]['products']);
 | 
						|
            }
 | 
						|
            if (isset($data['data']['books']['mosaic'][0]['products'])) {
 | 
						|
                $bundles = array_merge($bundles, $data['data']['books']['mosaic'][0]['products']);
 | 
						|
            }
 | 
						|
            if (isset($data['data']['software']['mosaic'][0]['products'])) {
 | 
						|
                $bundles = array_merge($bundles, $data['data']['software']['mosaic'][0]['products']);
 | 
						|
            }
 | 
						|
 | 
						|
            // Sort by start date (newest first)
 | 
						|
            usort($bundles, function($a, $b) {
 | 
						|
                $timeA = isset($a['start_date|datetime']) ? strtotime($a['start_date|datetime']) : 0;
 | 
						|
                $timeB = isset($b['start_date|datetime']) ? strtotime($b['start_date|datetime']) : 0;
 | 
						|
                return $timeB - $timeA;
 | 
						|
            });
 | 
						|
        } else {
 | 
						|
            // Get bundles for specific category
 | 
						|
            if (isset($data['data'][$category]['mosaic'][0]['products'])) {
 | 
						|
                $bundles = $data['data'][$category]['mosaic'][0]['products'];
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        foreach ($bundles as $bundle) {
 | 
						|
            $item = [];
 | 
						|
 | 
						|
            $item['title'] = $bundle['tile_name'] ?? $bundle['tile_short_name'] ?? 'Unknown Bundle';
 | 
						|
            $item['uri'] = self::URI . ltrim($bundle['product_url'], '/');
 | 
						|
            $item['uid'] = $bundle['machine_name'];
 | 
						|
 | 
						|
            // Author
 | 
						|
            if (isset($bundle['author'])) {
 | 
						|
                $item['author'] = $bundle['author'];
 | 
						|
            }
 | 
						|
 | 
						|
            // Timestamp
 | 
						|
            if (isset($bundle['start_date|datetime'])) {
 | 
						|
                $item['timestamp'] = strtotime($bundle['start_date|datetime']);
 | 
						|
            }
 | 
						|
 | 
						|
            // Build content
 | 
						|
            $content = '';
 | 
						|
 | 
						|
            // Add image
 | 
						|
            if (isset($bundle['tile_image'])) {
 | 
						|
                $content .= '<div style="text-align: center;"><img src="' . $bundle['tile_image'] . '" alt="' . htmlspecialchars($item['title']) . '"></div><br>';
 | 
						|
                $item['enclosures'][] = $bundle['tile_image'];
 | 
						|
            }
 | 
						|
 | 
						|
            // Add marketing blurb
 | 
						|
            if (isset($bundle['detailed_marketing_blurb'])) {
 | 
						|
                $content .= '<p>' . $bundle['marketing_blurb'] . '</p><br>';
 | 
						|
                $content .= '<p>' . $bundle['detailed_marketing_blurb'] . '</p>';
 | 
						|
            } elseif (isset($bundle['marketing_blurb'])) {
 | 
						|
                $content .= '<p>' . $bundle['marketing_blurb'] . '</p>';
 | 
						|
            }
 | 
						|
 | 
						|
            // Add highlights
 | 
						|
            if (isset($bundle['highlights']) && is_array($bundle['highlights'])) {
 | 
						|
                $content .= '<p><strong>Details:</strong></p><ul>';
 | 
						|
                foreach ($bundle['highlights'] as $highlight) {
 | 
						|
                    $content .= '<li>' . htmlspecialchars($highlight) . '</li>';
 | 
						|
                }
 | 
						|
            if (isset($bundle['end_date|datetime'])) {
 | 
						|
                $endDate = date('Y-m-d H:i:s', strtotime($bundle['end_date|datetime']));
 | 
						|
                $content .= '<li>Ends: ' . $endDate . '</li>';
 | 
						|
            }
 | 
						|
                $content .= '</ul>';
 | 
						|
            }
 | 
						|
 | 
						|
            $item['content'] = $content;
 | 
						|
 | 
						|
            $this->items[] = $item;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |