]>
jfr.im git - plex-to-listenbrainz.git/blob - plex-to-listenbrainz.php
5 if (empty($_GET['token'])) {
6 err("Must specify ?token with your ListenBrainz token.");
9 if (empty($_GET['user'])) {
10 err("Must specify ?user with your Plex username.");
14 $plex = json_decode($_POST['payload'], TRUE);
15 if (!in_array($plex['event'], explode(' ', 'media.scrobble media.play media.resume'))) {
18 if (mb_strtolower($plex['Account']['title']) != mb_strtolower($_GET['user'])) {
23 $listenbrainz = array(
24 'listen_type' => (($plex['event'] == 'media.scrobble') ? 'single' : 'playing_now'),
25 'payload' => array(array(
26 'track_metadata' => array(
27 'artist_name' => $plex['Metadata']['originalTitle'] ?? $plex['Metadata']['grandparentTitle'],
28 'track_name' => $plex['Metadata']['title'],
29 'release_name' => $plex['Metadata']['parentTitle'],
30 'additional_info' => array(
31 'media_player' => 'Plex',
32 'submission_client' => 'https://jfr.im/git/plex-to-listenbrainz.git/',
33 'submission_client_version' => trim(`git
-C
$DIR show
--summary
--pretty
=format
:%h
| head
-1`
),
34 'tracknumber' => $plex['Metadata']['index'],
39 if ($plex['event'] == 'media.scrobble') {
40 $listenbrainz['payload'][0]['listened_at'] = time();
41 $listenbrainz['listen_type'] = 'single';
43 $listenbrainz['listen_type'] = 'playing_now';
46 if (!empty($plex['Metadata']['attribution'])) {
47 $listenbrainz['payload'][0]['track_metadata']['additional_info']['music_service'] = implode('.', array_reverse(explode('.', $plex['Metadata']['attribution'])));
50 $lb_payload = json_encode($listenbrainz);
52 $ch = curl_init('https://api.listenbrainz.org/1/submit-listens');
53 curl_setopt_array($ch, array(
54 CURLOPT_HTTPHEADER
=> array(
55 'Content-Type: application/json',
56 'Authorization: Token ' . $_GET['token'],
58 CURLOPT_RETURNTRANSFER
=> TRUE,
59 CURLOPT_POSTFIELDS
=> json_encode($listenbrainz),
61 $resp = curl_exec($ch);
62 if ($resp === FALSE) {
63 err("Failed to reach ListenBrainz: curl " . curl_errno($ch) . ": " . curl_error($ch));
66 $status = curl_getinfo($ch, CURLINFO_HTTP_CODE
);
68 err("Error response from ListenBrainz: HTTP $status: $resp");
72 file_put_contents('/home/jrunyon/plexlog', var_export($status, true) . ';' . var_export($resp, true), FILE_APPEND);