Under Settings > Import List > Advanced List, there’s an option to provide a List URL for a Custom List. What format would that need to be in?

  • shrugal@lemm.ee
    link
    fedilink
    English
    arrow-up
    3
    ·
    edit-2
    9 months ago

    A JSON array that looks like this:

    [
        {"MusicBrainzId": <id>},
        {"MusicBrainzId": <id>},
        {"MusicBrainzId": <id>}
        ...
    ]
    

    I use it to fetch my Last.fm and ListenBrainz recommendations for example.

      • shrugal@lemm.ee
        link
        fedilink
        English
        arrow-up
        2
        ·
        8 months ago

        I have a custom import list that points to the following PHP script on a local webserver:

        $API_PLAYLISTS = "https://api.listenbrainz.org/1/user/%s/playlists/createdfor";
        $API_PLAYLIST = "https://api.listenbrainz.org/1/playlist/%s";
        
        $EXT_PLAYLIST = "https://musicbrainz.org/doc/jspf#playlist";
        $EXT_TRACK = "https://musicbrainz.org/doc/jspf#track";
        
        $TMPL_PLAYLIST = "https://listenbrainz.org/playlist/%s";
        
        $USERS = [
            '<musicbrainz-username>'
        ];
        
        $LISTS = [
            "weekly-exploration",
            "weekly-jam"
        ];
        
        try {
            $ids = [];
        
            foreach ($USERS as $user) {
                $lists = fetch(sprintf($API_PLAYLISTS, $user))?->playlists ?? [];
        
                foreach($lists as $list) {
                    $meta = $list->playlist->extension->{$EXT_PLAYLIST};
                    $type = $meta->additional_metadata->algorithm_metadata->source_patch;
        
                    if (!in_array($type, $LISTS)) continue;
        
                    list($mbid) = sscanf($list->playlist->identifier, $TMPL_PLAYLIST);
                    $songs = fetch(sprintf($API_PLAYLIST, $mbid))->playlist->track;
        
                    foreach ($songs as $song) {
                        $meta = $song->extension->{$EXT_TRACK};
        
                        foreach ($meta->additional_metadata->artists as $artist) {
                            $ids[$artist->artist_mbid] = true;
                        }
                    }
                }
            }
        
            json(array_map(fn ($id) => ['MusicBrainzId' => $id], array_keys($ids)));
        } catch (Throwable $e) {
            http_response_code(500);
            json(['error' => $e->getMessage()]);
        }
        
        // -- Util --
        
        function json($data)
        {
            header("Content-Type: application/json");
            echo json_encode($data);
        }
        
        function fetch($url)
        {
            return json_decode(file_get_contents($url));
        }
        

        It fetches my “weekly exploration” and “weekly jam” playlists, extracts the artists and returns a list of artist IDs for Lidarr to import.

        • tiburon@lemmy.blahaj.zone
          link
          fedilink
          English
          arrow-up
          1
          ·
          8 months ago

          Thank you. Is there any chance you could share what the final output looks like?

          Trying to get our own script working and it would be nice to compare to a known good output

          • shrugal@lemm.ee
            link
            fedilink
            English
            arrow-up
            1
            ·
            8 months ago

            It’s a JSON array like the one I posted in the beginning, so: [{"MusicBrainzId":<artist1-id>},{"MusicBrainzId":<artist2-id>},...].

    • NarrativeBear@lemmy.world
      link
      fedilink
      English
      arrow-up
      1
      ·
      9 months ago

      Finamp for all your local music, you will need a jellyfin server. Plexamp is pretty good as well, but you will need a Plex server.

      • Count042@lemmy.ml
        link
        fedilink
        English
        arrow-up
        2
        ·
        9 months ago

        Jellyseer is like a request server for radar and sonarr, allowing people who use emby or jellyfin to make radar download a requested movie.