summaryrefslogtreecommitdiff
path: root/config/services/web
diff options
context:
space:
mode:
Diffstat (limited to 'config/services/web')
-rw-r--r--config/services/web/rss/MubiBridge.php68
-rw-r--r--config/services/web/rss/default.nix11
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";
};