using System; using System.Collections.Generic; using System.Text; using System.Web; using System.Net; using System.IO; using System.Xml; namespace GetITunesCoverArt { class Program { static void Main( string[] args ) { string artist; string album; if (args.Length == 2) { artist = HttpUtility.UrlEncode(args[0]); album = HttpUtility.UrlEncode(args[1]); } else { artist = "Dire Straits"; album = "Sultans of swing"; } string url = String.Format(urlBase, artist, album); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); // wipe old headers request.Headers.Clear(); request.Headers.Add("X-Apple-Tz", "7200"); request.Headers.Add("X-Apple-Store-Front", store.ToString()); request.Headers.Add("Accept-Language", "en-us, en;q=0.50"); request.Headers.Add("Accept-Encoding", "gzip, x-aes-cbc"); request.UserAgent = userAgent; request.AutomaticDecompression = DecompressionMethods.GZip; string imageUrl = null; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { using (Stream stream = response.GetResponseStream()) { XmlDocument doc = new XmlDocument(); doc.Load(stream); XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable); xnm.AddNamespace("a", ns); XmlNodeList nodes = doc.SelectNodes("/a:Document/a:Protocol/a:plist/a:dict/a:string", xnm); imageUrl = nodes[0].InnerText; } response.Close(); } if (String.IsNullOrEmpty(imageUrl)) { Console.Write("No image found."); } else { DownLoadImage(imageUrl, String.Format("{0}.{1}.jpg", artist, album)); ; Console.WriteLine("done"); } Console.ReadLine(); } private static void DownLoadImage( string imageUrl, string fileName ) { HttpWebRequest imgRequest = (HttpWebRequest)WebRequest.Create(imageUrl); using (HttpWebResponse response = (HttpWebResponse)imgRequest.GetResponse()) using (Stream stream = response.GetResponseStream()) using (FileStream file = new FileStream(fileName, FileMode.Create)) { long total = 0; int count = 1024; byte[] buffer = new byte[count]; while (count > 0) { count = stream.Read(buffer, 0, buffer.Length); total += count; file.Write(buffer, 0, count); } file.Flush(); } } // CONSTANTS const string userAgent = "iTunes/7.0 (Macintosh; U; PPC Mac OS X 10.4.7)"; const string urlBase = "http://ax.phobos.apple.com.edgesuite.net/WebObjects/MZSearch.woa/wa/coverArtMatch?an={0}&pn={1}"; const string ns = "http://www.apple.com/itms/"; const int store = 143457; } }