diff options
Diffstat (limited to 'pages/api/plex.php')
-rw-r--r-- | pages/api/plex.php | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/pages/api/plex.php b/pages/api/plex.php new file mode 100644 index 0000000..6d7ad8f --- /dev/null +++ b/pages/api/plex.php @@ -0,0 +1,90 @@ +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/random.inc"; +$app = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true); + +function formatTitle($metadata) { + if ($metadata['grandparentTitle']) { + return $metadata['grandparentTitle']; + } else { + $ret = $metadata['title']; + if ($metadata['year']) { + $ret .= " (" . $metadata['year'] . ")"; + } + return $ret; + } +} + +function formatSubtitle($metadata) { + $ret = ''; + + if ($metadata['grandparentTitle']) { + if ($metadata['type'] === 'track') { + $ret = $metadata['parentTitle']; + } else if ($metadata['index'] && $metadata['parentIndex']) { + $ret = "S" . $metadata['parentIndex'] . " E" . $metadata['index']; + } else if ($metadata['originallyAvailableAt']) { + $ret = $metadata['originallyAvailableAt']; + } + + if ($metadata['title']) { + $ret .= ' - ' . $metadata['title']; + } + } else if ($metadata['type'] === 'movie') { + $ret = $metadata['tagline']; + } + + return $ret; +} + +$payload = json_decode($_POST["payload"], true); + +if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/cache")) mkdir($_SERVER['DOCUMENT_ROOT'] . "/assets/cache"); +$id = random(32); + +if ($payload["Metadata"]["type"] === "track") { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/assets/cache/" . $id . ".jpg", file_get_contents("https://plex.equestria.dev" . $payload["Metadata"]["thumb"] . "?X-Plex-Token=" . $app["plex"])); +} else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/assets/cache/" . $id . ".jpg", file_get_contents("https://plex.equestria.dev" . $payload["Metadata"]["grandparentThumb"] . "?X-Plex-Token=" . $app["plex"])); +} + +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/.files.json", json_encode($_FILES)); + +if ($payload["event"] === "playback.started" || $payload["event"] === "media.play") { + $hookObject = json_encode([ + "username" => "Plex", + "avatar_url" => "https://support.plex.tv/wp-content/themes/plex/assets/img/favicons/plex-192.png", + "embeds" => [ + [ + "title" => formatTitle($payload["Metadata"]), + "type" => "rich", + "description" => formatSubtitle($payload["Metadata"]), + "color" => hexdec( "2b2d31" ), + "thumbnail" => [ + "url" => "https://ponies.equestria.horse/assets/cache/" . $id . ".jpg" + ], + "footer" => [ + "text" => $payload["Account"]["title"] . " ยท Playing from " . $payload["Player"]["title"], + "icon_url" => $payload["Account"]["thumb"] + ] + ] + ] + + ], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ); +} + +if (isset($hookObject)) { + $ch = curl_init(); + + curl_setopt_array( $ch, [ + CURLOPT_URL => $app["webhook"]["plex"], + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => $hookObject, + CURLOPT_HTTPHEADER => [ + "Content-Type: application/json" + ] + ]); + + $response = curl_exec( $ch ); + curl_close( $ch ); +}
\ No newline at end of file |