diff options
| author | Quentin Aristote <quentin@aristote.fr> | 2022-11-27 01:14:01 +0100 |
|---|---|---|
| committer | Quentin Aristote <quentin@aristote.fr> | 2022-11-27 01:14:01 +0100 |
| commit | 5260c8daee219adab6188b794d643c63b1617379 (patch) | |
| tree | 0f96a8337c2ae7f665d399989fb1310eead8ea84 | |
| parent | 0652fc1fcc72047db640453e09aa36e134567c07 (diff) | |
services: web: rss: add Mubi bridge
| -rw-r--r-- | config/services/web/rss/MubiBridge.php | 68 | ||||
| -rw-r--r-- | config/services/web/rss/default.nix | 11 |
2 files changed, 75 insertions, 4 deletions
diff --git a/config/services/web/rss/MubiBridge.php b/config/services/web/rss/MubiBridge.php new file mode 100644 index 0000000..f1c24dc --- /dev/null +++ b/config/services/web/rss/MubiBridge.php @@ -0,0 +1,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' => 'string', + 'required' => 'true', + 'exampleValue' => 'en / de / es / fr / it / nl / pt / tr' + ] + ] + ]; + + 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; + } + } +} diff --git a/config/services/web/rss/default.nix b/config/services/web/rss/default.nix index 4d7dd18..776402a 100644 --- a/config/services/web/rss/default.nix +++ b/config/services/web/rss/default.nix @@ -2,12 +2,15 @@ let cfg = config.services.rss-bridge; - debug = false; + debug = true; rss-bridge = pkgs.rss-bridge.overrideAttrs (oldAttrs: oldAttrs // { installPhase = oldAttrs.installPhase + '' - ln -sf ${./ParisJazzClubBridge.php} $out/bridges/ParisJazzClubBridge.php - ln -sf ${./MaisonDeLaRadioBridge.php} $out/bridges/MaisonDeLaRadioBridge.php + pushd $out/bridges + ln -sf ${./ParisJazzClubBridge.php} ParisJazzClubBridge.php + ln -sf ${./MaisonDeLaRadioBridge.php} MaisonDeLaRadioBridge.php + ln -sf ${./MubiBridge.php} MubiBridge.php + popd '' + lib.optionalString debug '' touch $out/DEBUG ''; @@ -15,7 +18,7 @@ let in { services.rss-bridge = { enable = true; - whitelist = [ "ParisJazzClub" "MaisonDeLaRadio" ]; + whitelist = [ "ParisJazzClub" "MaisonDeLaRadio" "Mubi" ]; virtualHost = "rss"; }; |
