(($plex['event'] == 'media.scrobble') ? 'single' : 'playing_now'), 'payload' => array(array( 'track_metadata' => array( 'artist_name' => $plex['Metadata']['originalTitle'] ?? $plex['Metadata']['grandparentTitle'], 'track_name' => $plex['Metadata']['title'], 'release_name' => $plex['Metadata']['parentTitle'], 'additional_info' => array( 'media_player' => 'Plex', 'submission_client' => 'https://jfr.im/git/plex-to-listenbrainz.git/', 'submission_client_version' => `git --git-dir $DIR describe --long --tags HEAD`, 'tracknumber' => $plex['Metadata']['index'], ), ), )), ); if ($plex['event'] == 'media.scrobble') { $listenbrainz['payload'][0]['listened_at'] = time(); $listenbrainz['listen_type'] = 'single'; } else { $listenbrainz['listen_type'] = 'playing_now'; } if (!empty($plex['Metadata']['attribution'])) { $listenbrainz['payload'][0]['track_metadata']['additional_info']['music_service'] = implode('.', array_reverse(explode('.', $plex['Metadata']['attribution']))); } $lb_payload = json_encode($listenbrainz); $ch = curl_init('https://api.listenbrainz.org/1/submit-listens'); curl_setopt_array($ch, array( CURLOPT_HTTPHEADER => array( 'Content-Type: application/json', 'Authorization: Token ' . $_GET['token'], ), CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_POSTFIELDS => json_encode($listenbrainz), )); $resp = curl_exec($ch); if ($resp === FALSE) { err("Failed to reach ListenBrainz: curl " . curl_errno($ch) . ": " . curl_error($ch)); exit; } $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($status != 200) { err("Error response from ListenBrainz: HTTP $status: $resp"); exit; } file_put_contents('/home/jrunyon/plexlog', var_export($status, true) . ';' . var_export($resp, true), FILE_APPEND);