aboutsummaryrefslogtreecommitdiff
path: root/bridges/SteamBridge.php
blob: c4a720fcc936569de27c35ad4ca697b565e87d1d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php

class SteamBridge extends BridgeAbstract
{
    const NAME = 'Steam Bridge';
    const URI = 'https://store.steampowered.com/';
    const CACHE_TIMEOUT = 3600; // 1h
    const DESCRIPTION = 'Returns apps list';
    const MAINTAINER = 'jacknumber';
    const PARAMETERS = [
        'Wishlist' => [
            'userid' => [
                'name' => 'Steamid64 (find it on steamid.io)',
                'title' => 'User ID (17 digits). Find your user ID with steamid.io or steamidfinder.com',
                'required' => true,
                'exampleValue' => '76561198821231205',
                'pattern' => '[0-9]{17}',
            ],
            'only_discount' => [
                'name' => 'Only discount',
                'type' => 'checkbox',
            ]
        ]
    ];

    public function collectData()
    {
        $userid = $this->getInput('userid');

        $sourceUrl = self::URI . 'wishlist/profiles/' . $userid . '/wishlistdata?p=0';
        $sort = [];

        $json = getContents($sourceUrl);

        $appsData = json_decode($json);

        foreach ($appsData as $id => $element) {
            $appType = $element->type;
            $appIsBuyable = 0;
            $appHasDiscount = 0;
            $appIsFree = 0;

            if ($element->subs) {
                $appIsBuyable = 1;
                $priceBlock = str_get_html($element->subs[0]->discount_block);
                $appPrice = str_replace('--', '00', $priceBlock->find('.discount_final_price', 0)->plaintext);

                if ($element->subs[0]->discount_pct) {
                    $appHasDiscount = 1;
                    $discountBlock = str_get_html($element->subs[0]->discount_block);
                    $appDiscountValue = $discountBlock->find('.discount_pct', 0)->plaintext;
                    $appOldPrice = $discountBlock->find('.discount_original_price', 0)->plaintext;
                } else {
                    if ($this->getInput('only_discount')) {
                        continue;
                    }
                }
            } else {
                if ($this->getInput('only_discount')) {
                    continue;
                }

                if (isset($element->free) && $element->free = 1) {
                    $appIsFree = 1;
                }
            }

            $coverUrl = str_replace('_292x136', '', strtok($element->capsule, '?'));
            $picturesPath = pathinfo($coverUrl)['dirname'] . '/';

            $item = [];
            $item['uri'] = "http://store.steampowered.com/app/$id/";
            $item['title'] = $element->name;
            $item['type'] = $appType;
            $item['cover'] = $coverUrl;
            $item['timestamp'] = $element->added;
            $item['isBuyable'] = $appIsBuyable;
            $item['hasDiscount'] = $appHasDiscount;
            $item['isFree'] = $appIsFree;
            $item['priority'] = $element->priority;

            if ($appIsBuyable) {
                $item['price'] = floatval(str_replace(',', '.', $appPrice));
                $item['content'] = $appPrice;
            }

            if ($appIsFree) {
                $item['content'] = 'Free';
            }

            if ($appHasDiscount) {
                $item['discount']['value'] = $appDiscountValue;
                $item['discount']['oldPrice'] = $appOldPrice;
                $item['content'] = '<s>' . $appOldPrice . '</s> <b>' . $appPrice . '</b> (' . $appDiscountValue . ')';
            }

            $item['enclosures'] = [];
            $item['enclosures'][] = $coverUrl;

            foreach ($element->screenshots as $screenshotFileName) {
                $item['enclosures'][] = $picturesPath . $screenshotFileName;
            }

            $sort[$id] = $element->priority;

            $this->items[] = $item;
        }

        array_multisort($sort, SORT_ASC, $this->items);
    }
}