// Country.cs
//
// Copyright (C) 2008 Amr Hassan
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
//
using System;
using System.Xml;
using System.Collections.Generic;
namespace Lastfm.Services
{
///
/// A country on Last.fm.
///
public class Country : Base, IHasURL
{
///
/// The country's name.
///
public string Name {get; private set;}
///
/// A country by its name or its ISO 3166-1 alpha-2 code.
///
///
/// A
///
///
/// A
///
public Country(string name, Session session)
:base(session)
{
if(name.Length == 2)
Name = getName(name);
else
Name = name;
}
internal override RequestParameters getParams ()
{
RequestParameters p = new Lastfm.RequestParameters();
p["country"] = Name;
return p;
}
///
/// String representation of the object.
///
///
/// A
///
public override string ToString()
{
return Name;
}
private string getName(string alpha2code)
{
Dictionary codes = new Dictionary();
codes.Add("AD", "Andorra");
codes.Add("AE", "United Arab Emirates");
codes.Add("AF", "Afghanistan");
codes.Add("AG", "Antigua and Barbuda");
codes.Add("AI", "Anguilla");
codes.Add("AL", "Albania");
codes.Add("AM", "Armenia");
codes.Add("AN", "Netherlands Antilles");
codes.Add("AO", "Angola");
codes.Add("AQ", "Antarctica");
codes.Add("AR", "Argentina");
codes.Add("AS", "American Samoa");
codes.Add("AT", "Austria");
codes.Add("AU", "Australia");
codes.Add("AW", "Aruba");
codes.Add("AX", "Åland Islands");
codes.Add("AZ", "Azerbaijan");
codes.Add("BA", "Bosnia and Herzegovina");
codes.Add("BB", "Barbados");
codes.Add("BD", "Bangladesh");
codes.Add("BE", "Belgium");
codes.Add("BF", "Burkina Faso");
codes.Add("BG", "Bulgaria");
codes.Add("BH", "Bahrain");
codes.Add("BI", "Burundi");
codes.Add("BJ", "Benin");
codes.Add("BM", "Bermuda");
codes.Add("BN", "Brunei Darussalam");
codes.Add("BO", "Bolivia");
codes.Add("BR", "Brazil");
codes.Add("BS", "Bahamas");
codes.Add("BT", "Bhutan");
codes.Add("BV", "Bouvet Island");
codes.Add("BW", "Botswana");
codes.Add("BY", "Belarus");
codes.Add("BZ", "Belize");
codes.Add("CA", "Canada");
codes.Add("CC", "Cocos (Keeling) Islands");
codes.Add("CD", "Congo, Democratic Republic of the");
codes.Add("CF", "Central African Republic");
codes.Add("CG", "Congo");
codes.Add("CH", "Switzerland");
codes.Add("CI", "Côte d'Ivoire");
codes.Add("CK", "Cook Islands");
codes.Add("CL", "Chile");
codes.Add("CM", "Cameroon");
codes.Add("CN", "China");
codes.Add("CO", "Colombia");
codes.Add("CR", "Costa Rica");
codes.Add("CS", "Serbia");
codes.Add("CU", "Cuba");
codes.Add("CV", "Cape Verde");
codes.Add("CX", "Christmas Island");
codes.Add("CY", "Cyprus");
codes.Add("CZ", "Czech Republic");
codes.Add("DE", "Germany");
codes.Add("DJ", "Djibouti");
codes.Add("DK", "Denmark");
codes.Add("DM", "Dominica");
codes.Add("DO", "Dominican Republic");
codes.Add("DZ", "Algeria");
codes.Add("EC", "Ecuador");
codes.Add("EE", "Estonia");
codes.Add("EG", "Egypt");
codes.Add("EH", "Western Sahara");
codes.Add("ER", "Eritrea");
codes.Add("ES", "Spain");
codes.Add("ET", "Ethiopia");
codes.Add("FI", "Finland");
codes.Add("FJ", "Fiji");
codes.Add("FK", "Falkland Islands");
codes.Add("FM", "Micronesia, Federated States of");
codes.Add("FO", "Faroe Islands");
codes.Add("FR", "France");
codes.Add("GA", "Gabon");
codes.Add("GB", "United Kingdom");
codes.Add("GD", "Grenada");
codes.Add("GE", "Georgia");
codes.Add("GF", "French Guiana");
codes.Add("GH", "Ghana");
codes.Add("GI", "Gibraltar");
codes.Add("GL", "Greenland");
codes.Add("GM", "Gambia");
codes.Add("GN", "Guinea");
codes.Add("GP", "Guadeloupe");
codes.Add("GQ", "Equatorial Guinea");
codes.Add("GR", "Greece");
codes.Add("GS", "South Georgia and the South Sandwich Islands");
codes.Add("GT", "Guatemala");
codes.Add("GU", "Guam");
codes.Add("GW", "Guinea-Bissau");
codes.Add("GY", "Guyana");
codes.Add("HK", "Hong Kong");
codes.Add("HM", "Heard Island and McDonald Islands");
codes.Add("HN", "Honduras");
codes.Add("HR", "Croatia");
codes.Add("HT", "Haiti");
codes.Add("HU", "Hungary");
codes.Add("ID", "Indonesia");
codes.Add("IE", "Ireland");
codes.Add("IL", "Israel");
codes.Add("IN", "India");
codes.Add("IO", "British Indian Ocean Territory");
codes.Add("IQ", "Iraq");
codes.Add("IR", "Iran, Islamic Republic of");
codes.Add("IS", "Iceland");
codes.Add("IT", "Italy");
codes.Add("JM", "Jamaica");
codes.Add("JO", "Jordan");
codes.Add("JP", "Japan");
codes.Add("KE", "Kenya");
codes.Add("KG", "Kyrgyzstan");
codes.Add("KH", "Cambodia");
codes.Add("KI", "Kiribati");
codes.Add("KM", "Comoros");
codes.Add("KN", "Saint Kitts and Nevis");
codes.Add("KP", "Korea, Democratic People's Republic of");
codes.Add("KR", "Korea, Republic of");
codes.Add("KW", "Kuwait");
codes.Add("KY", "Cayman Islands");
codes.Add("KZ", "Kazakhstan");
codes.Add("LA", "Lao People's Democratic Republic");
codes.Add("LB", "Lebanon");
codes.Add("LC", "Saint Lucia");
codes.Add("LI", "Liechtenstein");
codes.Add("LK", "Sri Lanka");
codes.Add("LR", "Liberia");
codes.Add("LS", "Lesotho");
codes.Add("LT", "Lithuania");
codes.Add("LU", "Luxembourg");
codes.Add("LV", "Latvia");
codes.Add("LY", "Libyan Arab Jamahiriya (Libya)");
codes.Add("MA", "Morocco");
codes.Add("MC", "Monaco");
codes.Add("MD", "Moldova");
codes.Add("MG", "Madagascar");
codes.Add("MH", "Marshall Islands");
codes.Add("MK", "Macedonia");
codes.Add("ML", "Mali");
codes.Add("MM", "Myanmar (Burma)");
codes.Add("MN", "Mongolia");
codes.Add("MO", "Macao (Macau)");
codes.Add("MP", "Northern Mariana Islands");
codes.Add("MQ", "Martinique");
codes.Add("MR", "Mauritania");
codes.Add("MS", "Montserrat");
codes.Add("MT", "Malta");
codes.Add("MU", "Mauritius");
codes.Add("MV", "Maldives");
codes.Add("MW", "Malawi");
codes.Add("MX", "Mexico");
codes.Add("MY", "Malaysia");
codes.Add("MZ", "Mozambique");
codes.Add("NA", "Namibia");
codes.Add("NC", "New Caledonia");
codes.Add("NE", "Niger");
codes.Add("NF", "Norfolk Island");
codes.Add("NG", "Nigeria");
codes.Add("NI", "Nicaragua");
codes.Add("NL", "Netherlands");
codes.Add("NO", "Norway");
codes.Add("NP", "Nepal");
codes.Add("NR", "Nauru");
codes.Add("NU", "Niue");
codes.Add("NZ", "New Zealand");
codes.Add("OM", "Oman");
codes.Add("PA", "Panama");
codes.Add("PE", "Peru");
codes.Add("PF", "French Polynesia");
codes.Add("PG", "Papua New Guinea");
codes.Add("PH", "Philippines");
codes.Add("PK", "Pakistan");
codes.Add("PL", "Poland");
codes.Add("PM", "Saint-Pierre and Miquelon");
codes.Add("PN", "Pitcairn Islands");
codes.Add("PR", "Puerto Rico");
codes.Add("PS", "Palestinian Territory, Occupied");
codes.Add("PT", "Portugal");
codes.Add("PW", "Palau");
codes.Add("PY", "Paraguay");
codes.Add("QA", "Qatar");
codes.Add("RE", "Réunion");
codes.Add("RO", "Romania");
codes.Add("RU", "Russia");
codes.Add("RW", "Rwanda");
codes.Add("SA", "Saudi Arabia");
codes.Add("SB", "Solomon Islands");
codes.Add("SC", "Seychelles");
codes.Add("SD", "Sudan");
codes.Add("SE", "Sweden");
codes.Add("SG", "Singapore");
codes.Add("SH", "Saint Helena");
codes.Add("SI", "Slovenia");
codes.Add("SJ", "Svalbard and Jan Mayen Islands");
codes.Add("SK", "Slovakia");
codes.Add("SL", "Sierra Leone");
codes.Add("SM", "San Marino");
codes.Add("SN", "Senegal");
codes.Add("SO", "Somalia");
codes.Add("SR", "Suriname");
codes.Add("ST", "São Tomé and Príncipe");
codes.Add("SV", "El Salvador");
codes.Add("SY", "Syrian Arab Republic");
codes.Add("SZ", "Swaziland");
codes.Add("TC", "Turks and Caicos Islands");
codes.Add("TD", "Chad");
codes.Add("TF", "French Southern Territories");
codes.Add("TG", "Togo");
codes.Add("TH", "Thailand");
codes.Add("TJ", "Tajikistan");
codes.Add("TK", "Tokelau");
codes.Add("TL", "Timor-Leste");
codes.Add("TM", "Turkmenistan");
codes.Add("TN", "Tunisia");
codes.Add("TO", "Tonga");
codes.Add("TR", "Turkey");
codes.Add("TT", "Trinidad and Tobago");
codes.Add("TV", "Tuvalu");
codes.Add("TW", "Taiwan");
codes.Add("TZ", "Tanzania, United Republic of");
codes.Add("UA", "Ukraine");
codes.Add("UG", "Uganda");
codes.Add("UM", "United States Minor Outlying Islands");
codes.Add("US", "United States");
codes.Add("UY", "Uruguay");
codes.Add("UZ", "Uzbekistan");
codes.Add("VA", "Holy See");
codes.Add("VC", "Saint Vincent and the Grenadines");
codes.Add("VE", "Venezuela");
codes.Add("VG", "Virgin Islands, British");
codes.Add("VI", "Virgin Islands, U.S.");
codes.Add("VN", "Viet Nam");
codes.Add("VU", "Vanuatu");
codes.Add("WF", "Wallis and Futuna");
codes.Add("WS", "Samoa");
codes.Add("YE", "Yemen");
codes.Add("YT", "Mayotte");
codes.Add("ZA", "South Africa");
codes.Add("ZM", "Zambia");
codes.Add("ZW", "Zimbabwe");
return codes[alpha2code];
}
public TopArtist[] GetTopArtists()
{
XmlDocument doc = request("geo.getTopArtists");
List list = new List();
foreach(XmlNode node in doc.GetElementsByTagName("artist"))
{
list.Add(new TopArtist(new Artist(node, base.Session), int.Parse(base.extract(node, "playcount"))));
}
return list.ToArray();
}
public TopArtist[] GetTopArtists(int limit)
{
return sublist(GetTopArtists(), limit);
}
public TopTrack[] GetTopTracks()
{
XmlDocument doc = request("geo.getTopTracks");
List list = new List();
foreach(XmlNode node in doc.GetElementsByTagName("track"))
{
Track track = new Track(extract(node, "name", 1), extract(node, "name"), Session);
int playcount = Int32.Parse(extract(node, "playcount"));
list.Add(new TopTrack(track, playcount));
}
return list.ToArray();
}
public TopTrack[] GetTopTracks(int limit)
{
return sublist(GetTopTracks(), limit);
}
///
/// Returns the country's page url on Last.fm.
///
///
/// A
///
///
/// A
///
public string GetURL(SiteLanguage language)
{
string domain = getSiteDomain(language);
return "http://" + domain + "/place/" + urlSafe(Name);
}
///
/// The country's page url on Last.fm.
///
public string URL {
get { return this.GetURL(SiteLanguage.English); }
}
}
}