コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }