Migrate to Netlify Today

Netlify announces the next evolution of Gatsby Cloud. Learn more

ContactSign Up
Community Plugin
View plugin on GitHub

gatsby-source-lastfm

npm package npm package

This is a source plugin for GatsbyJS to pull information from Last.FM. It will pull in playbacks and associated information for a user into GraphQL, preserving all links as expected. The plugin will grab up until the limit set in its configuration; if no limit is set, it will grab all a user’s scrobbles. Note that this could take a LONG time — for 100,000 scrobbles, this equates to about 9 hours to build my site. In short, including everything could make your build take all day.

Notes on Testing/TravisCI

This plugin originally had its own .travis.yml file. Originally, this did the babel traspilation step and verified that no errors took place; it never was capable of testing the actually funcationality of the plugin without a GatsbyJS build process to test in.

To improve this, I’ve moved testing for all my GatsbyJS source plugins to test suites in the repository for www-jamesdanylik-com. Here, TravisCI handles building my Gatsby site, running all my source plugins; after a build is created successfully, I run test suites in Jest with Pupeteer on each of my plugins and the entire created site — testing in this manner enables access to the complete plugin run, and allows me to ensure each of the plugins are running as expected.

TravisCI is configured to rebuild my site daily, regardless of activity, so I should detect outages fairly quickly.

Install

npm install --save gatsby-source-lastfm

Configuration

// In your gatsby-config.js
plugins: [
  {
        resolve: "gatsby-source-lastfm",
        options: {
          api_key: '<<YOUR API KEY HERE>>',
          username: '<<USERNAME TO TRACK>>',
          limit: 200, // the maximum number of playbacks to pull in
        },
  },
  ...
]

Provided Queries

Playbacks

  allLastfmPlayback {
    edges {
      node {
        id
      date {
        uts
        text
      }
        track {
          id
          # linked track node here
          # (See track query for all fields)
        }
      }
    }
  }

Tracks

  allLastfmTrack {
    edges {
      node {
        id
        name
        loved
        mbid
        streamable
        url
        image {
          text
          size
        }
        artist {
          id
          # linked artist node here!
          # (See artist query for all fields)
        }
        album {
          id
          # linked album node here!
          # (See album query for all fields)
        }
        playbacks {
          id
          # linked playback nodes here!
          # (See playbacks query for all fields)
        }
      }
    }
  }

Albums

  allLastfmAlbum {
    edges {
      node {
        id
        name
        mbid
        playbacks {
          id
          # linked playback nodes here!
          # (See playbacks query for all fields)
        }
        artist {
          id
          # linked artist node here!
          # (See artist query for all fields)
        }
        tracks {
          id
          # linked track nodes here
          # (See track query for all fields)
        }
      }
    }
  }

Artists

  allLastfmArtist {
    edges {
      node {
        id
        name
        mbid
        image {
          text
          size
        }
        playbacks {
          id
          # linked playback nodes here!
          # (See playbacks query for all fields)
        }
        albums {
          id
          # linked album nodes here!
          # (See album query for all fields)
        }
        tracks {
          id
          # linked track nodes here
          # (See track query for all fields)
        }
      }
    }
  }

Meta

  allLastfmMeta {
    edges {
      node {
        id
        total_playbacks
      }
    }
  }
© 2023 Gatsby, Inc.