pythonjsondiscord.pylast.fm

Read JSON file to get highest resolution image (Last.FM)


So, I am working on a project that sends an Discord message every time it's a certain date, such as 'Mon 22:00:00'. The message includes my most listened album of that week. I got the code working that whenever I get the URL to get to the JSON, which included multiple links to images. Here is the JSON response I get:

{
    "album": {
        "name": "Significant Other",
        "artist": "Limp Bizkit",
        "mbid": "be3e00aa-368a-3f09-ac96-cd094e9a7151",
        "url": "https://www.last.fm/music/Limp+Bizkit/Significant+Other",
        "image": [{
            "#text": "https://lastfm.freetls.fastly.net/i/u/34s/1c00f7b9cd94c2b6fbd7f12fc00bd8d2.png",
            "size": "small"
        }, {
            "#text": "https://lastfm.freetls.fastly.net/i/u/64s/1c00f7b9cd94c2b6fbd7f12fc00bd8d2.png",
            "size": "medium"
        }, {
            "#text": "https://lastfm.freetls.fastly.net/i/u/174s/1c00f7b9cd94c2b6fbd7f12fc00bd8d2.png",
            "size": "large"
        }, {
            "#text": "https://lastfm.freetls.fastly.net/i/u/300x300/1c00f7b9cd94c2b6fbd7f12fc00bd8d2.png",
            "size": "extralarge"
        }, {
            "#text": "https://lastfm.freetls.fastly.net/i/u/300x300/1c00f7b9cd94c2b6fbd7f12fc00bd8d2.png",
            "size": "mega"
        }, {
            "#text": "https://lastfm.freetls.fastly.net/i/u/300x300/1c00f7b9cd94c2b6fbd7f12fc00bd8d2.png",
            "size": ""
        }],
        "listeners": "774409",
        "playcount": "10274552",
        "tracks": {
            "track": [{
                "name": "Intro",
                "url": "https://www.last.fm/music/Limp+Bizkit/_/Intro",
                "duration": "78",
                "@attr": {
                    "rank": "1"
                },
                "streamable": {
                    "#text": "0",
                    "fulltrack": "0"
                },
                "artist": {
                    "name": "Limp Bizkit",
                    "mbid": "8f9d6bb2-dba4-4cca-9967-cc02b9f4820c",
                    "url": "https://www.last.fm/music/Limp+Bizkit"
                }
            }, {
                "name": "Just Like This",
                "url": "https://www.last.fm/music/Limp+Bizkit/_/Just+Like+This",
                "duration": "215",
                "@attr": {
                    "rank": "2"
                },
                "streamable": {
                    "#text": "0",
                    "fulltrack": "0"
                },
                "artist": {
                    "name": "Limp Bizkit",
                    "mbid": "8f9d6bb2-dba4-4cca-9967-cc02b9f4820c",
                    "url": "https://www.last.fm/music/Limp+Bizkit"
                }
            }, {
                "name": "Nookie",
                "url": "https://www.last.fm/music/Limp+Bizkit/_/Nookie",
                "duration": "289",
                "@attr": {
                    "rank": "3"
                },
                "streamable": {
                    "#text": "0",
                    "fulltrack": "0"
                },
                "artist": {
                    "name": "Limp Bizkit",
                    "mbid": "8f9d6bb2-dba4-4cca-9967-cc02b9f4820c",
                    "url": "https://www.last.fm/music/Limp+Bizkit"
                }
            }, {
                "name": "Break Stuff",
                "url": "https://www.last.fm/music/Limp+Bizkit/_/Break+Stuff",
                "duration": "166",
                "@attr": {
                    "rank": "4"
                },
                "streamable": {
                    "#text": "0",
                    "fulltrack": "0"
                },
                "artist": {
                    "name": "Limp Bizkit",
                    "mbid": "8f9d6bb2-dba4-4cca-9967-cc02b9f4820c",
                    "url": "https://www.last.fm/music/Limp+Bizkit"
                }
            }, {
                "name": "Re-Arranged",
                "url": "https://www.last.fm/music/Limp+Bizkit/_/Re-Arranged",
                "duration": "354",
                "@attr": {
                    "rank": "5"
                },
                "streamable": {
                    "#text": "0",
                    "fulltrack": "0"
                },
                "artist": {
                    "name": "Limp Bizkit",
                    "mbid": "8f9d6bb2-dba4-4cca-9967-cc02b9f4820c",
                    "url": "https://www.last.fm/music/Limp+Bizkit"
                }
            }, {
                "name": "I'm Broke",
                "url": "https://www.last.fm/music/Limp+Bizkit/_/I%27m+Broke",
                "duration": "239",
                "@attr": {
                    "rank": "6"
                },
                "streamable": {
                    "#text": "0",
                    "fulltrack": "0"
                },
                "artist": {
                    "name": "Limp Bizkit",
                    "mbid": "8f9d6bb2-dba4-4cca-9967-cc02b9f4820c",
                    "url": "https://www.last.fm/music/Limp+Bizkit"
                }
            }, {
                "name": "Nobody Like You",
                "url": "https://www.last.fm/music/Limp+Bizkit/_/Nobody+Like+You",
                "duration": "260",
                "@attr": {
                    "rank": "7"
                },
                "streamable": {
                    "#text": "0",
                    "fulltrack": "0"
                },
                "artist": {
                    "name": "Limp Bizkit",
                    "mbid": "8f9d6bb2-dba4-4cca-9967-cc02b9f4820c",
                    "url": "https://www.last.fm/music/Limp+Bizkit"
                }
            }, {
                "name": "Don't Go Off Wandering",
                "url": "https://www.last.fm/music/Limp+Bizkit/_/Don%27t+Go+Off+Wandering",
                "duration": "239",
                "@attr": {
                    "rank": "8"
                },
                "streamable": {
                    "#text": "0",
                    "fulltrack": "0"
                },
                "artist": {
                    "name": "Limp Bizkit",
                    "mbid": "8f9d6bb2-dba4-4cca-9967-cc02b9f4820c",
                    "url": "https://www.last.fm/music/Limp+Bizkit"
                }
            }, {
                "name": "9 Teen 90 Nine",
                "url": "https://www.last.fm/music/Limp+Bizkit/_/9+Teen+90+Nine",
                "duration": "276",
                "@attr": {
                    "rank": "9"
                },
                "streamable": {
                    "#text": "0",
                    "fulltrack": "0"
                },
                "artist": {
                    "name": "Limp Bizkit",
                    "mbid": "8f9d6bb2-dba4-4cca-9967-cc02b9f4820c",
                    "url": "https://www.last.fm/music/Limp+Bizkit"
                }
            }, {
                "name": "N 2 Gether Now",
                "url": "https://www.last.fm/music/Limp+Bizkit/_/N+2+Gether+Now",
                "duration": "289",
                "@attr": {
                    "rank": "10"
                },
                "streamable": {
                    "#text": "0",
                    "fulltrack": "0"
                },
                "artist": {
                    "name": "Limp Bizkit",
                    "mbid": "8f9d6bb2-dba4-4cca-9967-cc02b9f4820c",
                    "url": "https://www.last.fm/music/Limp+Bizkit"
                }
            }, {
                "name": "Trust?",
                "url": "https://www.last.fm/music/Limp+Bizkit/_/Trust%3F",
                "duration": "299",
                "@attr": {
                    "rank": "11"
                },
                "streamable": {
                    "#text": "0",
                    "fulltrack": "0"
                },
                "artist": {
                    "name": "Limp Bizkit",
                    "mbid": "8f9d6bb2-dba4-4cca-9967-cc02b9f4820c",
                    "url": "https://www.last.fm/music/Limp+Bizkit"
                }
            }, {
                "name": "No Sex",
                "url": "https://www.last.fm/music/Limp+Bizkit/_/No+Sex",
                "duration": "234",
                "@attr": {
                    "rank": "12"
                },
                "streamable": {
                    "#text": "0",
                    "fulltrack": "0"
                },
                "artist": {
                    "name": "Limp Bizkit",
                    "mbid": "8f9d6bb2-dba4-4cca-9967-cc02b9f4820c",
                    "url": "https://www.last.fm/music/Limp+Bizkit"
                }
            }, {
                "name": "Show Me What You Got",
                "url": "https://www.last.fm/music/Limp+Bizkit/_/Show+Me+What+You+Got",
                "duration": "266",
                "@attr": {
                    "rank": "13"
                },
                "streamable": {
                    "#text": "0",
                    "fulltrack": "0"
                },
                "artist": {
                    "name": "Limp Bizkit",
                    "mbid": "8f9d6bb2-dba4-4cca-9967-cc02b9f4820c",
                    "url": "https://www.last.fm/music/Limp+Bizkit"
                }
            }, {
                "name": "A Lesson Learned",
                "url": "https://www.last.fm/music/Limp+Bizkit/_/A+Lesson+Learned",
                "duration": "160",
                "@attr": {
                    "rank": "14"
                },
                "streamable": {
                    "#text": "0",
                    "fulltrack": "0"
                },
                "artist": {
                    "name": "Limp Bizkit",
                    "mbid": "8f9d6bb2-dba4-4cca-9967-cc02b9f4820c",
                    "url": "https://www.last.fm/music/Limp+Bizkit"
                }
            }, {
                "name": "Outro / Radio Sucks / The Mind of Les",
                "url": "https://www.last.fm/music/Limp+Bizkit/_/Outro+%2F+Radio+Sucks+%2F+The+Mind+of+Les",
                "duration": "438",
                "@attr": {
                    "rank": "15"
                },
                "streamable": {
                    "#text": "0",
                    "fulltrack": "0"
                },
                "artist": {
                    "name": "Limp Bizkit",
                    "mbid": "8f9d6bb2-dba4-4cca-9967-cc02b9f4820c",
                    "url": "https://www.last.fm/music/Limp+Bizkit"
                }
            }, {
                "name": "[silence]",
                "url": "https://www.last.fm/music/Limp+Bizkit/_/%5Bsilence%5D",
                "duration": "4",
                "@attr": {
                    "rank": "16"
                },
                "streamable": {
                    "#text": "0",
                    "fulltrack": "0"
                },
                "artist": {
                    "name": "Limp Bizkit",
                    "mbid": "8f9d6bb2-dba4-4cca-9967-cc02b9f4820c",
                    "url": "https://www.last.fm/music/Limp+Bizkit"
                }
            }]
        },
        "tags": {
            "tag": [{
                "name": "albums I own",
                "url": "https://www.last.fm/tag/albums+I+own"
            }, {
                "name": "Nu Metal",
                "url": "https://www.last.fm/tag/Nu+Metal"
            }, {
                "name": "rapcore",
                "url": "https://www.last.fm/tag/rapcore"
            }, {
                "name": "rock",
                "url": "https://www.last.fm/tag/rock"
            }, {
                "name": "limp bizkit",
                "url": "https://www.last.fm/tag/limp+bizkit"
            }]
        },
        "wiki": {
            "published": "11 Jul 2016, 20:19",
            "summary": "Significant Other is the second album by American rap rock/nu metal band Limp Bizkit. Released in 1999 by Flip/Interscope Records, the album saw the band expanding its sound from that of its debut album Three Dollar Bill, Yall, to incorporate further metal and hip hop influences. Significant Other was co-produced by Terry Date and Limp Bizkit. The album has sold at least 16 million copies worldwide. <a href=\"http://www.last.fm/music/Limp+Bizkit/Significant+Other\">Read more on Last.fm</a>.",
            "content": "Significant Other is the second album by American rap rock/nu metal band Limp Bizkit. Released in 1999 by Flip/Interscope Records, the album saw the band expanding its sound from that of its debut album Three Dollar Bill, Yall, to incorporate further metal and hip hop influences. Significant Other was co-produced by Terry Date and Limp Bizkit. The album has sold at least 16 million copies worldwide. <a href=\"http://www.last.fm/music/Limp+Bizkit/Significant+Other\">Read more on Last.fm</a>. User-contributed text is available under the Creative Commons By-SA License; additional terms may apply."
        }
    }
}

I want to get the link that is above "size": "", as this image has the highest resolution. How do I get to this? I use Python to make the Discord bot, so if you could explain in Python language, that would be great! Thanks in advance!


Solution

  • To convert the JSON string into Python objects you can use:

    import json
    album_data = json.loads(album_json_string)
    

    To extract the 'mega' image URL, you can iterate through the images list with a list comprehension:

    images = album_data['album']['image']
    mega_images = [i for i in images if i['size'] == 'mega']
    try:
        mega_image_url = mega_images[0]['image']
    except IndexError:
        #do something if the mega URL isn't present