public PartInfo GetPartInfo(string partNumber) { var url = string.Format( "https://rebrickable.com/api/v3/lego/parts/?lego_id={0}", HttpUtility.UrlEncode(partNumber)); string json; using (var client = new WebClient()) { client.Headers.Add("Authorization", "key " + RebrickableConstants.ApiKey); json = client.DownloadString(url); } var reader = new JsonTextReader(new StringReader(json)); var serializer = new JsonSerializer(); var searchResult = serializer.Deserialize <PartSearchResult>(reader); if (searchResult.Count == 0) { return(null); } var part = searchResult.Results[0]; var result = new PartInfo() { PartId = partNumber, ImageUrl = part.ImageUrl }; result.BricklinkItemIds = new List <string>(); result.RebrickablePartIds = new List <string>(); if (part.PartNumber != partNumber) { result.BricklinkItemIds.Add(part.PartNumber); result.RebrickablePartIds.Add(part.PartNumber); } var key = part.ExternalIds?.Keys.SingleOrDefault(x => x.Equals("bricklink", StringComparison.InvariantCultureIgnoreCase)); if (!string.IsNullOrEmpty(key)) { var values = part.ExternalIds[key]; result.BricklinkItemIds.AddRange(values.Where(x => x != part.PartNumber && x != partNumber)); } return(result); }
public PartInfo GetPartInfo(string partNumber) { var url = string.Format( "http://rebrickable.com/api/get_part?key={0}&part_id={1}&inc_ext=1", HttpUtility.UrlEncode(RebrickableConstants.ApiKey), HttpUtility.UrlEncode(partNumber)); string xml; using (var client = new WebClient()) { xml = client.DownloadString(url); } if (xml.Trim() == "NOPART") { return(null); } var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml); var doc = xmlDoc.DocumentElement; var result = new PartInfo(); result.PartId = doc.SelectSingleNode("/root/part_id")?.InnerText; result.ImageUrl = doc.SelectSingleNode("/root/part_imge_url")?.InnerText; result.BricklinkItemIds = doc .SelectNodes("/root/external_part_ids/bricklink") ?.OfType <XmlNode>() .Select(x => x.InnerText) .Where(x => !string.IsNullOrWhiteSpace(x)) .ToList(); result.RebrickablePartIds = doc .SelectNodes("/root/rebrickable_part_ids/part_id") ?.OfType <XmlNode>() .Select(x => x.InnerText) .Where(x => !string.IsNullOrWhiteSpace(x)) .ToList(); return(result); }