summaryrefslogtreecommitdiff
path: root/config/services/web/rss/MubiBridge.php
blob: 992f4639268302b49bf6a5a7ca8cf7480ee1aaaf (plain)
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
<?php

function tryGetDescription($obj) {
    if (property_exists($obj, 'primary_film_group')
        && !is_null($obj->primary_film_group)) {
        return $obj->primary_film_group->description_html . '<br>';
    } else {
        return '';
    }
}

class MubiBridge extends XPathAbstract {
    const NAME = 'Mubi Bridge';
    const URI = 'https://mubi.com';
    const DESCRIPTION = 'Mubi\'s film of the day.';
    const MAINTAINER = 'Quentin Aristote';
    const CACHE_TIMEOUT = 21600; // 6h

    const PARAMETERS = [
        '' => [
            'language' => [
                'name' => 'Language',
                'type' => 'text',
                'exampleValue' => 'en / de / es / fr / it / nl / pt / tr',
                'defaultValue' => 'en'
            ]
        ]
    ];

    public function getIcon() {
        return 'https://mubi.com/favicon.ico';
    }

    public function getUri() {
        return self::URI . '/' . $this->getInput('language') . '/film-of-the-day';
    }

    public function collectData() {
        $dataJsonStr = extractFromDelimiters(
            getSimpleHTMLDOMCached($this->getUri()),
            '<script id="__NEXT_DATA__" type="application/json">',
            '</script>');
        $data = json_decode($dataJsonStr)->props->initialState;
        foreach ($data->filmProgramming->filmProgrammings as $filmProgramming) {
            $id = $filmProgramming->filmId;
            $film = $data->film->films->{$id};
            $item = [
                'title'      => $filmProgramming->email_subject,
                'uri'        => 'https://mubi.com/' . $this->getInput('language') . '/films/' . $film->slug,
                'timestamp'  => strtotime($filmProgramming->available_at), 
                'author'     => $film->directors[0]->name,
                'content'    => (
                    $filmProgramming->our_take_html . '<br>' .
                    tryGetDescription($filmProgramming) .
                    $film->short_synopsis_html . '<br>' .
                    $film->default_editorial_html
                ),
                'enclosures' => [
                    $film->stills->standard,
                    $film->trailer_url
                ],
                'categories' => $film->genres,
                'uid'        => $id . $filmProgramming->available_at
            ];
            $this->items[] = $item;
        }
    }
}