Download album art for free through a web service

Oct 12, 2006

I recently played with building a C# media player with built-in music library and wanted it to show album covers like Windows Media Player 11 does. It proved quite difficult because there is no free service for downloads of album covers as far as I know. Then I stumbled upon a Coding4Fun article that used the Amazon web service for retrieval of book covers and thought it might also work for album covers. Sure enough, it did.

You can start to download album covers in three simple steps that only take 5 minutes.

  • Register for free at Amazon to get your devtag (or use mine, see the code below)
  • Add a web reference to your Visual Studio project
  • Use a simple method to download the album art

After you’ve registered to get your devtag, you can add the web service to your Visual Studio project. The address of the Amazon web service is http://soap.amazon.com/schemas3/AmazonWebServices.wsdl. Be sure to rename the Web reference name to "Amazon" in the dialog below.

 

That’s all the groundwork; now just use this simple method to start downloading album covers.

using System;

using System.Web;

using System.Web.Services.Protocols;

using System.Net;

using System.IO;

using Amazon;

 

public bool DownloadAlbumArt(string albumArtist, string albumTitle, string dirName)

{

  using (WebClient webClient = new WebClient())

  {

    KeywordRequest req = new KeywordRequest();

    req.keyword = albumArtist + " " + albumTitle;

    // Remember to register to get your own devtag.

    req.devtag = "D1QFTS4VAA6C72";

    req.mode = "music";

    req.type = "lite";

    req.page = "1";

 

    using (AmazonSearchService search = new AmazonSearchService())

    {

      try

      {

        ProductInfo productInfo = search.KeywordSearchRequest(req);

 

        if (productInfo.Details.Length > 0)

        {

          string url = productInfo.Details[0].ImageUrlLarge;

          webClient.DownloadFile(url, dirName + "/" + albumTitle + ".jpg");

        }

 

        return productInfo.Details.Length > 0;

      }

      catch (SoapException)

      {

        return false;

      }

    }

  }
}

Then call the method with this line of code:

DownloadAlbumArt("metallica", "load", @"c:\");

That will download this album cover to C:\load.jpg.

This is another example of something that seems difficult at first, but actually is pretty easy.

* $4.95/month ASP.NET Hosting with FREE SQL 2012 DB! – Click Here!

Comments (4) -

 Rhonda Tipton
Rhonda Tipton
10/13/2006 11:47:36 AM #

This is really cool.  I plan on trying it when I get home tonight.  You have one of the most informatative blogs.  I am a beginner and I get a lot of great information from this blog.  Keep up the good work.

 DamageINC
DamageINC
10/16/2006 5:05:42 PM #

I downloaded the Yamo demo and used their SharpFactory.Yamo.Core.AmazonMediaInformationProvider class.
Here's the code:

Engine engine = new Engine(); // Also in SharpFactory.Yamo.Core
AmazonMediaInformationProvider amip = new AmazonMediaInformationProvider(engine);
amip.DownloadAlbumArt(currentArtist, currentAlbum, destDir);

The only problem I found with it is the image file name is always "Folder.jpg.

Mads Kristensen
Mads Kristensen
10/16/2006 8:40:07 PM #

I've been looking at the Yamo as well, but didn't care for at whole assembly for such a simple task as downloading album art. I'm very much against the whole nine yards if it is not needed. Simplicity is key. Besides that, the yamo is a great piece of code.

 Troy Morvant
Troy Morvant
10/23/2006 3:19:00 PM #

Take this to the next level and imbed the album art inside the ID3 tag.  I built a multi-threaded media library tool as well (used SQL express for very large collections) and needed to be able to work through 20K+ albums quickly and imbed the album art and found the ID3Lib library extremely helpful (http://id3lib.sourceforge.net/ ).  

Comments are closed

About the author

Mads Kristensen

Mads Kristensen
Program Manager at the Microsoft Web Platform team and founder of BlogEngine.NET.

More...

Month List

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer’s view in any way.