diff --git a/CompanionAppService/CompanionAppService.cs b/CompanionAppService/CompanionAppService.cs index 645bbda69d..0f6d459efd 100644 --- a/CompanionAppService/CompanionAppService.cs +++ b/CompanionAppService/CompanionAppService.cs @@ -680,38 +680,17 @@ public static List ProhibitedCommoditiesFromProfile(dynamic json) } // Obtain the list of commodities from the profile - private static List CommodityQuotesFromProfile(dynamic json) + private static List CommodityQuotesFromProfile(JObject json) { List quotes = new List(); - if (json["lastStarport"] != null && json["lastStarport"]["commodities"] != null) { - foreach (dynamic commodity in json["lastStarport"]["commodities"]) + foreach (JObject commodityJSON in json["lastStarport"]["commodities"]) { - CommodityDefinition commodityDef = CommodityDefinition.CommodityDefinitionFromEliteID((long)commodity["id"]); - CommodityMarketQuote quote = new CommodityMarketQuote(commodityDef); - quote.buyprice = (int)commodity["buyPrice"]; - quote.stock = (int)commodity["stock"]; - quote.stockbracket = (int)commodity["stockBracket"]; - quote.sellprice = commodity["sellPrice"] as int? ?? 0; - quote.demand = (int)commodity["demand"]; - quote.demandbracket = commodity["demandBracket"] as int? ?? 0; - - List StatusFlags = new List(); - foreach (dynamic statusFlag in commodity["statusFlags"]) + CommodityMarketQuote quote = CommodityMarketQuote.FromCapiJson(commodityJSON); + if (quote != null) { - StatusFlags.Add((string)statusFlag); - } - quote.StatusFlags = StatusFlags; - quotes.Add(quote); - - if (commodityDef == null || (string)commodity["name"] != commodityDef.edname) - { - if (commodityDef.edname != "Drones") - { - // Unknown commodity; report the full object so that we can update the definitions - Logging.Info("Commodity definition error: " + (string)commodity["name"], JsonConvert.SerializeObject(commodity)); - } + quotes.Add(quote); } } } diff --git a/DataDefinitions/CommodityDefinition.cs b/DataDefinitions/CommodityDefinition.cs index f9abf3eaba..78ac4878d9 100644 --- a/DataDefinitions/CommodityDefinition.cs +++ b/DataDefinitions/CommodityDefinition.cs @@ -415,6 +415,7 @@ public CommodityDefinition() : this(0, null, "", Unknown) private CommodityDefinition(long EliteID, long? EDDBID, string edname, CommodityCategory Category, int AveragePrice = 0, bool Rare = false) : base(edname, edname) { + this.EliteID = EliteID; this.EDDBID = EDDBID; this.category = Category; this.avgprice = AveragePrice; diff --git a/DataDefinitions/CommodityMarketQuote.cs b/DataDefinitions/CommodityMarketQuote.cs index ddac170e93..f9f311677c 100644 --- a/DataDefinitions/CommodityMarketQuote.cs +++ b/DataDefinitions/CommodityMarketQuote.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Runtime.Serialization; +using Utilities; namespace EddiDataDefinitions { @@ -61,15 +62,15 @@ public string name } // Per-station information - public int? buyprice { get; set; } - public int? stock { get; set; } + public int buyprice { get; set; } + public int stock { get; set; } // StockBracket can contain the values 0, 1, 2, 3 or "" (yes, really) so needs to be dynamic // VB: it can be an optional enum no prob public dynamic stockbracket { get; set; } - public int? sellprice { get; set; } - public int? demand { get; set; } + public int sellprice { get; set; } + public int demand { get; set; } // DemandBracket can contain the values 0, 1, 2, 3 or "" (yes, really) so needs to be dynamic // VB: same type as stockbracket above @@ -82,18 +83,43 @@ public string name [Obsolete("Please use localizedName or InvariantName")] public string category => definition?.category.localizedName; public int? avgprice => definition?.avgprice; - public bool? rare => definition?.rare; + public bool rare => definition?.rare ?? false; public CommodityMarketQuote(CommodityDefinition definition) { this.definition = definition; - buyprice = null; - stock = null; stockbracket = ""; - sellprice = null; - demand = null; demandbracket = ""; StatusFlags = new List(); } + + public static CommodityMarketQuote FromCapiJson(JObject capiJSON) + { + CommodityDefinition commodityDef = CommodityDefinition.CommodityDefinitionFromEliteID((long)capiJSON["id"]); + if (commodityDef == null || (string)capiJSON["name"] != commodityDef.edname) + { + if (commodityDef.edname != "Drones") + { + // Unknown commodity; report the full object so that we can update the definitions + Logging.Info("Commodity definition error: " + (string)capiJSON["name"], JsonConvert.SerializeObject(capiJSON)); + } + return null; + } + CommodityMarketQuote quote = new CommodityMarketQuote(commodityDef); + quote.buyprice = (int)capiJSON["buyPrice"]; + quote.stock = (int)capiJSON["stock"]; + quote.stockbracket = (int)capiJSON["stockBracket"]; + quote.sellprice = (int)capiJSON["sellPrice"]; + quote.demand = (int)capiJSON["demand"]; + quote.demandbracket = (int)capiJSON["demandBracket"]; + + List StatusFlags = new List(); + foreach (dynamic statusFlag in capiJSON["statusFlags"]) + { + StatusFlags.Add((string)statusFlag); + } + quote.StatusFlags = StatusFlags; + return quote; + } } } diff --git a/DataProviderService/DataProviderService.cs b/DataProviderService/DataProviderService.cs index b33c55e5c2..55c733ade8 100644 --- a/DataProviderService/DataProviderService.cs +++ b/DataProviderService/DataProviderService.cs @@ -105,13 +105,13 @@ public static StarSystem StarSystemFromEDDP(dynamic json, decimal? x, decimal? y return StarSystem; } - public static List StationsFromEDDP(string systemName, dynamic json) + public static List StationsFromEDDP(string systemName, JObject json) { List Stations = new List(); if (json["stations"] != null) { - foreach (dynamic station in json["stations"]) + foreach (JObject station in json["stations"]) { Station Station = new Station(); Station.EDDBID = (long)station["id"]; @@ -160,19 +160,20 @@ public static List StationsFromEDDP(string systemName, dynamic json) return Stations; } - public static List CommodityQuotesFromEDDP(dynamic json) + public static List CommodityQuotesFromEDDP(JObject json) { var quotes = new List(); if (json["commodities"] != null) { - foreach (dynamic commodity in json["commodities"]) + foreach (JObject commodity in json["commodities"]) { CommodityDefinition commodityDefinition = CommodityDefinition.FromName((string)commodity["name"]); CommodityMarketQuote quote = new CommodityMarketQuote(commodityDefinition); - quote.buyprice = (int?)(long?)commodity["buy_price"]; - quote.sellprice = (int?)(long?)commodity["sell_price"]; - quote.demand = (int?)(long?)commodity["demand"]; - quote.stock = (int?)(long?)commodity["supply"]; + // Annoyingly, these double-casts seem to be necessary because the boxed type is `long`. A direct cast to `int?` always returns null. + quote.buyprice = (int?)(long?)commodity["buy_price"] ?? quote.buyprice; + quote.sellprice = (int?)(long?)commodity["sell_price"] ?? quote.sellprice; + quote.demand = (int?)(long?)commodity["demand"] ?? quote.demand; + quote.stock = (int?)(long?)commodity["supply"] ?? quote.stock; quotes.Add(quote); } } diff --git a/EDDI/ChangeLog.md b/EDDI/ChangeLog.md index 862f983eb2..89660faca4 100644 --- a/EDDI/ChangeLog.md +++ b/EDDI/ChangeLog.md @@ -15,6 +15,8 @@ Full details of the variables available for each noted event, and VoiceAttack in * "rebuy" The rebuy value of the ship * Revised `Insurance check` script to take advantage of the new ship "rebuy" property. * Added variety to the `Ship targeted` script and made it less verbose, as it fires a lot in the heat of combat. + * EDDN responder + * Fixed an issue whereby incomplete commodity data could be sent to EDDN. * VoiceAttack responder * Dramatically reduced CPU load. diff --git a/EDDNResponder/EDDNCommodity.cs b/EDDNResponder/EDDNCommodity.cs index d1c87fc40b..6975737181 100644 --- a/EDDNResponder/EDDNCommodity.cs +++ b/EDDNResponder/EDDNCommodity.cs @@ -1,11 +1,14 @@ -using System.Collections.Generic; +using EddiDataDefinitions; +using Newtonsoft.Json; +using System.Collections.Generic; namespace EDDNResponder { - class EDDNCommodity + public class EDDNCommodity { // Schema reference: https://github.com/EDSM-NET/EDDN/blob/master/schemas/commodity-v3.0.json public string name; + [JsonIgnore] // do not send until #731 is fixed https://github.com/EDCD/EDDI/issues/731 public int meanPrice; public int buyPrice; public int stock; @@ -13,12 +16,28 @@ class EDDNCommodity public int sellPrice; public int demand; public dynamic demandBracket; // Possible values are 0, 1, 2, 3, or "" - public List statusFlags; + public List statusFlags = new List(); public bool ShouldSerializestatusFlags() { // Don't serialize status flags if they are empty as the schema requires that if present they contain at least 1 element return (statusFlags != null && statusFlags.Count > 0); } + + public EDDNCommodity(CommodityMarketQuote quote) + { + name = quote.definition.edname; + meanPrice = quote.definition.avgprice; + buyPrice = quote.buyprice; + stock = quote.stock; + stockBracket = quote.stockbracket; + sellPrice = quote.sellprice; + demand = quote.demand; + demandBracket = quote.demandbracket; + if (quote.StatusFlags.Count > 0) + { + statusFlags = quote.StatusFlags; + } + } } } diff --git a/EDDNResponder/EDDNEconomy.cs b/EDDNResponder/EDDNEconomy.cs index 0acdb9134b..55295dd570 100644 --- a/EDDNResponder/EDDNEconomy.cs +++ b/EDDNResponder/EDDNEconomy.cs @@ -1,8 +1,16 @@ -namespace EDDNResponder +using EddiDataDefinitions; + +namespace EDDNResponder { class EDDNEconomy { public string name; - public decimal proportion; + public decimal proportion = 0M; + + public EDDNEconomy(CompanionAppEconomy companionAppEconomy) + { + name = companionAppEconomy.name; + proportion = companionAppEconomy.proportion; + } } } diff --git a/EDDNResponder/EDDNResponder.cs b/EDDNResponder/EDDNResponder.cs index cb4a1570cf..73f93e3028 100644 --- a/EDDNResponder/EDDNResponder.cs +++ b/EDDNResponder/EDDNResponder.cs @@ -206,37 +206,23 @@ private void sendCommodityInformation() { foreach (CompanionAppEconomy economy in EDDI.Instance.CurrentStation.economies) { - EDDNEconomy eddnEconomy = new EDDNEconomy(); - eddnEconomy.name = economy.name; - eddnEconomy.proportion = economy.proportion; + EDDNEconomy eddnEconomy = new EDDNEconomy(economy); eddnEconomies.Add(eddnEconomy); } } List eddnCommodities = new List(); - foreach (CommodityMarketQuote commodity in EDDI.Instance.CurrentStation.commodities) + foreach (CommodityMarketQuote quote in EDDI.Instance.CurrentStation.commodities) { - if (commodity.definition == null) + if (quote.definition == null) { continue; } - if (commodity.definition.category == CommodityCategory.NonMarketable) + if (quote.definition.category == CommodityCategory.NonMarketable) { continue; } - EDDNCommodity eddnCommodity = new EDDNCommodity(); - eddnCommodity.name = commodity.definition.edname; - eddnCommodity.meanPrice = commodity.definition.avgprice; - eddnCommodity.buyPrice = commodity.buyprice ?? 0; - eddnCommodity.stock = commodity.stock ?? 0; - eddnCommodity.stockBracket = commodity.stockbracket; - eddnCommodity.sellPrice = commodity.sellprice ?? 0; - eddnCommodity.demand = commodity.demand ?? 0; - eddnCommodity.demandBracket = commodity.demandbracket; - if (commodity.StatusFlags.Count > 0) - { - eddnCommodity.statusFlags = commodity.StatusFlags; - } + EDDNCommodity eddnCommodity = new EDDNCommodity(quote); eddnCommodities.Add(eddnCommodity); }; diff --git a/Tests/CommodityTests.cs b/Tests/CommodityTests.cs index 1800712496..0180608a1b 100644 --- a/Tests/CommodityTests.cs +++ b/Tests/CommodityTests.cs @@ -1,7 +1,8 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System; -using EddiDataDefinitions; +using EddiDataDefinitions; +using EDDNResponder; +using Microsoft.VisualStudio.TestTools.UnitTesting; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using Rollbar; namespace UnitTests @@ -35,14 +36,14 @@ public void TestCommodityDefinitionCommodity() ""invariantName"": ""Progenitor Cells"", ""localizedName"": ""Progenitor Cells"", ""name"": ""Progenitor Cells"", - ""buyprice"": null, - ""stock"": null, + ""buyprice"": 7000, + ""stock"": 5, ""stockbracket"": """", ""sellprice"": 7279, ""demand"": 56, - ""demandbracket"": """", + ""demandbracket"": 1, ""StatusFlags"": [], - ""EliteID"": 0, + ""EliteID"": 128049669, ""EDDBID"": 36, ""category"": ""Medicines"", ""avgprice"": 6779, @@ -53,6 +54,68 @@ public void TestCommodityDefinitionCommodity() Assert.IsNotNull(commodity); Assert.AreEqual("ProgenitorCells", commodity.definition.edname); ; Assert.AreEqual("Progenitor Cells", commodity.invariantName); + Assert.AreEqual(7000, commodity.buyprice); + Assert.AreEqual(5, commodity.stock); + Assert.AreEqual("", commodity.stockbracket); + Assert.AreEqual(7279, commodity.sellprice); + Assert.AreEqual(56, commodity.demand); + Assert.AreEqual(1, commodity.demandbracket); + Assert.AreEqual(128049669, commodity.EliteID); + Assert.AreEqual(36, commodity.EDDBID); + Assert.AreEqual("Medicines", commodity.definition.category.invariantName); + Assert.AreEqual(6779, commodity.avgprice); + Assert.IsFalse(commodity.rare); + } + + private static CommodityMarketQuote CannedCAPIQuote() + { + string json = @"{ + ""id"": 128049204, + ""name"": ""Explosives"", + ""legality"": """", + ""buyPrice"": 313, + ""sellPrice"": 281, + ""meanPrice"": 294, + ""demandBracket"": 0, + ""stockBracket"": 2, + ""stock"": 31881, + ""demand"": 1, + ""statusFlags"": [], + ""categoryname"": ""Chemicals"", + ""locName"": ""Explosives"" + }"; + JObject jObject = JObject.Parse(json); + CommodityMarketQuote quote = CommodityMarketQuote.FromCapiJson(jObject); + return quote; + } + + [TestMethod] + public void TestParseCAPICommodityQuote() + { + CommodityMarketQuote quote = CannedCAPIQuote(); + Assert.AreEqual(313, quote.buyprice); + Assert.AreEqual(281, quote.sellprice); + // Assert.AreEqual(294, quote.avgprice); // TODO: re-enable when #731 is fixed + Assert.AreEqual(0, quote.demandbracket); + Assert.AreEqual(2, quote.stockbracket); + Assert.AreEqual(31881, quote.stock); + Assert.AreEqual(1, quote.demand); + Assert.AreEqual(0, quote.StatusFlags.Count); + } + + [TestMethod] + public void TestEddnCommodityQuote() + { + CommodityMarketQuote quote = CannedCAPIQuote(); + EDDNCommodity eddnCommodity = new EDDNCommodity(quote); + Assert.AreEqual(quote.buyprice, eddnCommodity.buyPrice); + Assert.AreEqual(quote.sellprice, eddnCommodity.sellPrice); + Assert.AreEqual(quote.avgprice, eddnCommodity.meanPrice); + Assert.AreEqual(quote.demandbracket, eddnCommodity.demandBracket); + Assert.AreEqual(quote.stockbracket, eddnCommodity.stockBracket); + Assert.AreEqual(quote.stock, eddnCommodity.stock); + Assert.AreEqual(quote.demand, eddnCommodity.demand); + Assert.AreEqual(quote.StatusFlags.Count, eddnCommodity.statusFlags.Count); } [TestMethod] @@ -78,10 +141,17 @@ public void TestLegacyCommodity() ""EDName"": null }"; - CommodityMarketQuote commodity = JsonConvert.DeserializeObject(legacyCommodity); - Assert.IsNotNull(commodity); - Assert.AreEqual("ProgenitorCells", commodity.definition.edname); ; - Assert.AreEqual("Progenitor Cells", commodity.invariantName); + // Assert that parsing this now throws. + // `Assert.ThrowsException<>(...)` doesn't seem to be available? + try + { + CommodityMarketQuote commodity = JsonConvert.DeserializeObject(legacyCommodity); + Assert.Fail("Expected invalid commodity JSON to throw"); + } + catch + { + // passed + } } } } diff --git a/Tests/DataProviderTests.cs b/Tests/DataProviderTests.cs index 0eac99a77f..216d36db6a 100644 --- a/Tests/DataProviderTests.cs +++ b/Tests/DataProviderTests.cs @@ -179,7 +179,7 @@ public void TestLegacySystem4() Assert.AreEqual("Zhu Baba", system.name); Assert.AreEqual(159918, system.population); - Assert.AreEqual(3, system.stations.Count); + Assert.AreEqual(0, system.stations.Count); Assert.AreEqual(30, system.bodies.Count); } } diff --git a/Tests/sqlStarSystem4.json b/Tests/sqlStarSystem4.json index ae45bc4d6c..b746700b2b 100644 --- a/Tests/sqlStarSystem4.json +++ b/Tests/sqlStarSystem4.json @@ -19,3342 +19,6 @@ "x": 57.375, "y": -124.9375, "z": 51.53125, - "stations": [{ - "updatedat": 1513421888, - "commoditiesupdatedat": 1517095260, - "outfittingupdatedat": null, - "EDDBID": 2494, - "name": "Goldschmidt Station", - "government": "Corporate", - "faction": "Zhu Baba Vision Co", - "allegiance": "Empire", - "state": "Boom", - "primaryeconomy": "Extraction", - "distancefromstar": 28773, - "systemname": "Zhu Baba", - "hasrefuel": true, - "hasrearm": false, - "hasrepair": true, - "hasoutfitting": false, - "hasshipyard": false, - "hasmarket": true, - "hasblackmarket": false, - "model": "Mining Outpost", - "largestpad": "Medium", - "economies": null, - "commodities": [{ - "name": "Explosives", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 338, - "demand": 1902, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 1, - "EDName": null - }, - { - "name": "HydrogenFuel", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 112, - "stock": 1342, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "HydrogenPeroxide", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 847, - "demand": 785, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "LiquidOxygen", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "MineralOil", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 242, - "demand": 3165, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "SurfaceStabilisers", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 445, - "stock": 169, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Water", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 189, - "demand": 1003, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 271, - "EDName": null - }, - { - "name": "Clothing", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 439, - "demand": 2016, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 5, - "EDName": null - }, - { - "name": "ConsumerTechnology", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 7174, - "demand": 139, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "DomesticAppliances", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 689, - "demand": 354, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Animal Meat", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1728, - "demand": 497, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 14, - "EDName": null - }, - { - "name": "Coffee", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1606, - "demand": 157, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 15, - "EDName": null - }, - { - "name": "Fish", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 583, - "demand": 1440, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 16, - "EDName": null - }, - { - "name": "FoodCartridges", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 284, - "demand": 163, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Fruit and Vegetables", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 439, - "demand": 525, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 18, - "EDName": null - }, - { - "name": "Grain", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 253, - "demand": 356, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 19, - "EDName": null - }, - { - "name": "SyntheticMeat", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 273, - "demand": 382, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Tea", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1806, - "demand": 463, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 21, - "EDName": null - }, - { - "name": "InsulatingMembrane", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 10594, - "stock": 1, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Polymers", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 83, - "stock": 681, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 22, - "EDName": null - }, - { - "name": "Semiconductors", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 726, - "stock": 108, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 23, - "EDName": null - }, - { - "name": "Superconductors", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 6723, - "stock": 213, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 24, - "EDName": null - }, - { - "name": "Microbial Furnaces", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 342, - "demand": 605, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 28, - "EDName": null - }, - { - "name": "MineralExtractors", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 948, - "demand": 1794, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "PowerGenerators", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 825, - "demand": 787, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "WaterPurifiers", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 413, - "demand": 765, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "AdvancedMedicines", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1977, - "demand": 2794, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "BasicMedicines", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1219, - "demand": 1212, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "PerformanceEnhancers", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 7717, - "demand": 2346, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "ProgenitorCells", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 7293, - "demand": 24, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Aluminium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 234, - "stock": 171, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 37, - "EDName": null - }, - { - "name": "Beryllium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 7980, - "stock": 19, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 38, - "EDName": null - }, - { - "name": "Cobalt", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 626, - "stock": 2492, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 39, - "EDName": null - }, - { - "name": "Copper", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 387, - "stock": 780, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 40, - "EDName": null - }, - { - "name": "Gallium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 5088, - "stock": 260, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 41, - "EDName": null - }, - { - "name": "Gold", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 9158, - "stock": 124, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 42, - "EDName": null - }, - { - "name": "Indium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 5849, - "stock": 236, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 43, - "EDName": null - }, - { - "name": "Lithium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 1381, - "stock": 60, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 44, - "EDName": null - }, - { - "name": "Palladium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 13059, - "stock": 17, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 45, - "EDName": null - }, - { - "name": "Silver", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 4773, - "stock": 166, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 47, - "EDName": null - }, - { - "name": "Tantalum", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 3706, - "stock": 32, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 48, - "EDName": null - }, - { - "name": "Titanium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 934, - "stock": 396, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 49, - "EDName": null - }, - { - "name": "Uranium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 2432, - "stock": 42, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 50, - "EDName": null - }, - { - "name": "Bauxite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 90, - "stock": 5088, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 51, - "EDName": null - }, - { - "name": "Bertrandite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 3090, - "demand": 2822, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 52, - "EDName": null - }, - { - "name": "Coltan", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1830, - "demand": 2808, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 53, - "EDName": null - }, - { - "name": "Cryolite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 2746, - "demand": 1224, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 108, - "EDName": null - }, - { - "name": "Gallite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 2026, - "stock": 288, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 54, - "EDName": null - }, - { - "name": "Goslarite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1170, - "demand": 2752, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 107, - "EDName": null - }, - { - "name": "Indite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 2746, - "demand": 3078, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 55, - "EDName": null - }, - { - "name": "Lepidolite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 847, - "demand": 3636, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 56, - "EDName": null - }, - { - "name": "LithiumHydroxide", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 5393, - "demand": 216, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "LowTemperatureDiamond", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 57072, - "demand": 25, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "MethaneClathrate", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 523, - "demand": 1247, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Painite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 19993, - "demand": 2, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 83, - "EDName": null - }, - { - "name": "Pyrophyllite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1937, - "demand": 715, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 105, - "EDName": null - }, - { - "name": "Rutile", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 285, - "stock": 1037, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 57, - "EDName": null - }, - { - "name": "Uraninite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 939, - "stock": 2542, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 58, - "EDName": null - }, - { - "name": "Beer", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 442, - "demand": 16388, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 8, - "EDName": null - }, - { - "name": "Legal Drugs", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 612, - "demand": 110, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Liquor", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1049, - "demand": 558, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 9, - "EDName": null - }, - { - "name": "Wine", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 309, - "demand": 1578, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 12, - "EDName": null - }, - { - "name": "ImperialSlaves", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 17033, - "demand": 1470, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "AdvancedCatalysers", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 3480, - "demand": 2082, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Bioreducing Lichen", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1307, - "demand": 12317, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 65, - "EDName": null - }, - { - "name": "H.E. Suits", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 512, - "demand": 11672, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 67, - "EDName": null - }, - { - "name": "ResonatingSeparators", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 6724, - "demand": 591, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "ConductiveFabrics", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 425, - "stock": 186, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "MilitaryGradeFabrics", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 675, - "stock": 117, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "SyntheticFabrics", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 108, - "stock": 503, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Biowaste", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 6, - "stock": 356, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 75, - "EDName": null - }, - { - "name": "ChemicalWaste", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 57, - "demand": 561, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Scrap", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 102, - "demand": 938, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 77, - "EDName": null - }, - { - "name": "Non-lethal Weapons", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 2245, - "demand": 259, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 78, - "EDName": null - }, - { - "name": "ReactiveArmour", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 2744, - "demand": 1227, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }], - "prohibited": null, - "outfitting": null, - "shipyard": null - }, - { - "updatedat": 1505728844, - "commoditiesupdatedat": 1513425316, - "outfittingupdatedat": null, - "EDDBID": 2495, - "name": "Nahavandi Port", - "government": "Patronage", - "faction": "Zhu Baba Empire Assembly", - "allegiance": "Empire", - "state": null, - "primaryeconomy": "Extraction", - "distancefromstar": 28767, - "systemname": "Zhu Baba", - "hasrefuel": true, - "hasrearm": false, - "hasrepair": true, - "hasoutfitting": false, - "hasshipyard": false, - "hasmarket": true, - "hasblackmarket": false, - "model": "Industrial Outpost", - "largestpad": "Medium", - "economies": null, - "commodities": [{ - "name": "Explosives", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 338, - "demand": 942, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 1, - "EDName": null - }, - { - "name": "HydrogenFuel", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 112, - "stock": 601, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "HydrogenPeroxide", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 838, - "demand": 1532, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "LiquidOxygen", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "MineralOil", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 238, - "demand": 3565, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "SurfaceStabilisers", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 445, - "stock": 220, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Water", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 187, - "demand": 947, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 271, - "EDName": null - }, - { - "name": "Clothing", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 434, - "demand": 1307, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 5, - "EDName": null - }, - { - "name": "ConsumerTechnology", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 7166, - "demand": 92, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "DomesticAppliances", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 683, - "demand": 204, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Animal Meat", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1596, - "demand": 357, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 14, - "EDName": null - }, - { - "name": "Coffee", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1596, - "demand": 92, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 15, - "EDName": null - }, - { - "name": "Fish", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 576, - "demand": 991, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 16, - "EDName": null - }, - { - "name": "FoodCartridges", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 222, - "demand": 71, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Fruit and Vegetables", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 387, - "demand": 307, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 18, - "EDName": null - }, - { - "name": "Grain", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 250, - "demand": 233, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 19, - "EDName": null - }, - { - "name": "SyntheticMeat", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 269, - "demand": 220, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Tea", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1795, - "demand": 327, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 21, - "EDName": null - }, - { - "name": "Micro-Weave Cooling Hoses", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 284, - "EDName": null - }, - { - "name": "InsulatingMembrane", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 10602, - "stock": 1, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Polymers", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 68, - "stock": 50, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 22, - "EDName": null - }, - { - "name": "Semiconductors", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 820, - "stock": 78, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 23, - "EDName": null - }, - { - "name": "Superconductors", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 6723, - "stock": 78, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 24, - "EDName": null - }, - { - "name": "Microbial Furnaces", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 337, - "demand": 670, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 28, - "EDName": null - }, - { - "name": "MineralExtractors", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 932, - "demand": 4972, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "PowerGenerators", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 813, - "demand": 1094, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "WaterPurifiers", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 408, - "demand": 496, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "AdvancedMedicines", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1958, - "demand": 2132, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "BasicMedicines", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1202, - "demand": 604, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "PerformanceEnhancers", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 7690, - "demand": 1658, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "ProgenitorCells", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 7277, - "demand": 29, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Aluminium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 235, - "stock": 125, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 37, - "EDName": null - }, - { - "name": "Beryllium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 7988, - "stock": 14, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 38, - "EDName": null - }, - { - "name": "Cobalt", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 626, - "stock": 247, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 39, - "EDName": null - }, - { - "name": "Copper", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 387, - "stock": 114, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 40, - "EDName": null - }, - { - "name": "Gallium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 4867, - "stock": 19, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 41, - "EDName": null - }, - { - "name": "Gold", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 9163, - "stock": 28, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 42, - "EDName": null - }, - { - "name": "Indium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 5850, - "stock": 172, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 43, - "EDName": null - }, - { - "name": "Lithium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 1385, - "stock": 44, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 44, - "EDName": null - }, - { - "name": "Palladium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 13064, - "stock": 16, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 45, - "EDName": null - }, - { - "name": "Silver", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 4773, - "stock": 71, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 47, - "EDName": null - }, - { - "name": "Tantalum", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 3902, - "stock": 231, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 48, - "EDName": null - }, - { - "name": "Titanium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 934, - "stock": 145, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 49, - "EDName": null - }, - { - "name": "Uranium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 2437, - "stock": 31, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 50, - "EDName": null - }, - { - "name": "Bauxite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 88, - "stock": 2664, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 51, - "EDName": null - }, - { - "name": "Bertrandite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 3071, - "demand": 3668, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 52, - "EDName": null - }, - { - "name": "Coltan", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 1453, - "stock": 676, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 53, - "EDName": null - }, - { - "name": "Cryolite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 2728, - "demand": 3183, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 108, - "EDName": null - }, - { - "name": "Gallite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 2423, - "demand": 3487, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 54, - "EDName": null - }, - { - "name": "Goslarite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1159, - "demand": 1075, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 107, - "EDName": null - }, - { - "name": "Indite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 2292, - "stock": 117, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 55, - "EDName": null - }, - { - "name": "Lepidolite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 838, - "demand": 1271, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 56, - "EDName": null - }, - { - "name": "LithiumHydroxide", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 5611, - "demand": 942, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "LowTemperatureDiamond", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 57026, - "demand": 19, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "MethaneClathrate", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 517, - "demand": 2436, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Painite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 19956, - "demand": 2, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 83, - "EDName": null - }, - { - "name": "Pyrophyllite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1922, - "demand": 930, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 105, - "EDName": null - }, - { - "name": "Rutile", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 282, - "stock": 1103, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 57, - "EDName": null - }, - { - "name": "Uraninite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1224, - "demand": 6342, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 58, - "EDName": null - }, - { - "name": "Beer", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 436, - "demand": 12162, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 8, - "EDName": null - }, - { - "name": "Legal Drugs", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 608, - "demand": 72, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Liquor", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 947, - "demand": 368, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 9, - "EDName": null - }, - { - "name": "Tobacco", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 5463, - "demand": 798, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 11, - "EDName": null - }, - { - "name": "Wine", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 304, - "demand": 1155, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 12, - "EDName": null - }, - { - "name": "ImperialSlaves", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 17011, - "demand": 967, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "AdvancedCatalysers", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 3459, - "demand": 2303, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Bioreducing Lichen", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1295, - "demand": 6838, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 65, - "EDName": null - }, - { - "name": "H.E. Suits", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 505, - "demand": 14827, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 67, - "EDName": null - }, - { - "name": "ResonatingSeparators", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 6700, - "demand": 654, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "ConductiveFabrics", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 425, - "stock": 135, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "MilitaryGradeFabrics", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 746, - "stock": 152, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "SyntheticFabrics", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 109, - "stock": 367, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Biowaste", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 7, - "stock": 135, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 75, - "EDName": null - }, - { - "name": "ChemicalWaste", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 56, - "demand": 731, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Scrap", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 49, - "demand": 43, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 77, - "EDName": null - }, - { - "name": "Non-lethal Weapons", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 2233, - "demand": 109, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 78, - "EDName": null - }, - { - "name": "ReactiveArmour", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 2725, - "demand": 813, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }], - "prohibited": null, - "outfitting": null, - "shipyard": null - }, - { - "updatedat": 1518192934, - "commoditiesupdatedat": 1518192940, - "outfittingupdatedat": 1518192940, - "EDDBID": 45038, - "name": "Weaver Installation", - "government": "Patronage", - "faction": "Zhu Baba Empire Assembly", - "allegiance": "Empire", - "state": null, - "primaryeconomy": "Military", - "distancefromstar": 28712, - "systemname": "Zhu Baba", - "hasrefuel": true, - "hasrearm": true, - "hasrepair": true, - "hasoutfitting": true, - "hasshipyard": false, - "hasmarket": true, - "hasblackmarket": false, - "model": "Planetary Outpost", - "largestpad": "Large", - "economies": null, - "commodities": [{ - "name": "HydrogenFuel", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 112, - "stock": 416, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "NerveAgents", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 14602, - "demand": 3528, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "SurfaceStabilisers", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 760, - "demand": 2216, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "SyntheticReagents", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 7377, - "demand": 39, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Water", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 161, - "demand": 179, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 271, - "EDName": null - }, - { - "name": "Clothing", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 439, - "demand": 905, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 5, - "EDName": null - }, - { - "name": "ConsumerTechnology", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 7174, - "demand": 55, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "DomesticAppliances", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 689, - "demand": 159, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "EvacuationShelter", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 293, - "demand": 18, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "SurvivalEquipment", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 548, - "demand": 2, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Algae", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 268, - "demand": 30, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 13, - "EDName": null - }, - { - "name": "Animal Meat", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1606, - "demand": 22, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 14, - "EDName": null - }, - { - "name": "Coffee", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1606, - "demand": 9, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 15, - "EDName": null - }, - { - "name": "Fish", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 524, - "demand": 64, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 16, - "EDName": null - }, - { - "name": "FoodCartridges", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 284, - "demand": 108, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Fruit and Vegetables", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 391, - "demand": 27, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 18, - "EDName": null - }, - { - "name": "Grain", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 253, - "demand": 16, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 19, - "EDName": null - }, - { - "name": "SyntheticMeat", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 273, - "demand": 192, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Tea", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1806, - "demand": 21, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 21, - "EDName": null - }, - { - "name": "CMM Composite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 6511, - "demand": 194, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 283, - "EDName": null - }, - { - "name": "Micro-Weave Cooling Hoses", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1667, - "demand": 659, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 284, - "EDName": null - }, - { - "name": "InsulatingMembrane", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 11454, - "demand": 50, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Meta-Alloys", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 86176, - "demand": 249, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 114, - "EDName": null - }, - { - "name": "NeofabricInsulation", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 5742, - "demand": 220, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Polymers", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 309, - "demand": 8966, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 22, - "EDName": null - }, - { - "name": "BuildingFabricators", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1349, - "demand": 283, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "EmergencyPowerCells", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 2584, - "demand": 307, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "GeologicalEquipment", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 2159, - "demand": 20, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "HN Shock Mount", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 2159, - "demand": 310, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 287, - "EDName": null - }, - { - "name": "PowerGenerators", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 738, - "demand": 211, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "PowerGridAssembly", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 2916, - "demand": 278, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "RadiationBaffle", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1916, - "demand": 402, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Skimmer Components", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1962, - "demand": 1326, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 102, - "EDName": null - }, - { - "name": "ThermalCoolingUnits", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 367, - "demand": 344, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "WaterPurifiers", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 367, - "demand": 344, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "AdvancedMedicines", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1977, - "demand": 1476, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "BasicMedicines", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1219, - "demand": 718, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "PerformanceEnhancers", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 7717, - "demand": 1434, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "ProgenitorCells", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 7293, - "demand": 57, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Aluminium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 467, - "demand": 2227, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 37, - "EDName": null - }, - { - "name": "Osmium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 8905, - "demand": 297, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 97, - "EDName": null - }, - { - "name": "Thorium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 12092, - "demand": 226, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 109, - "EDName": null - }, - { - "name": "Titanium", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1380, - "demand": 1049, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 49, - "EDName": null - }, - { - "name": "LowTemperatureDiamond", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 57072, - "demand": 13, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Beer", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 442, - "demand": 8658, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 8, - "EDName": null - }, - { - "name": "Liquor", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 956, - "demand": 330, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 9, - "EDName": null - }, - { - "name": "Tobacco", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 5470, - "demand": 632, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 11, - "EDName": null - }, - { - "name": "Wine", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 309, - "demand": 678, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 12, - "EDName": null - }, - { - "name": "ImperialSlaves", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 17033, - "demand": 910, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Auto-Fabricators", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 4211, - "demand": 21, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 64, - "EDName": null - }, - { - "name": "ComputerComponents", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 760, - "demand": 546, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "DiagnosticSensor", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 7377, - "demand": 84, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "H.E. Suits", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 512, - "demand": 13440, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 67, - "EDName": null - }, - { - "name": "IonDistributor", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 2584, - "demand": 204, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "MedicalDiagnosticEquipment", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 3540, - "demand": 1735, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "MicroControllers", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 6114, - "demand": 87, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Muon Imager", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 6881, - "demand": 136, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 124, - "EDName": null - }, - { - "name": "Nanobreakers", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 2173, - "demand": 504, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 298, - "EDName": null - }, - { - "name": "Robotics", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 2159, - "demand": 31, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 70, - "EDName": null - }, - { - "name": "StructuralRegulators", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 2159, - "demand": 12, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "TelemetrySuite", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 2916, - "demand": 187, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "MilitaryGradeFabrics", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": 1163, - "demand": 1547, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }, - { - "name": "Scrap", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": 17, - "stock": 4011, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 77, - "EDName": null - }, - { - "name": "Non-lethal Weapons", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": 78, - "EDName": null - }, - { - "name": "ReactiveArmour", - "category": null, - "avgprice": null, - "rare": null, - "buyprice": null, - "stock": null, - "stockbracket": null, - "sellprice": null, - "demand": null, - "demandbracket": null, - "StatusFlags": null, - "EDDBID": -1, - "EDName": null - }], - "prohibited": null, - "outfitting": null, - "shipyard": null - }], "bodies": [{ "temperature": 2757, "rings": null,