/warframe-drop-data

:moneybag: Warframe Drop Data in an easier to parse format.

Primary LanguageJavaScriptMIT LicenseMIT

warframe-drop-data

Supported by the Warframe Community Developers Discord

Warframe drop data in an easier to parse format.

NOTE: This data is parsed from Digital Extremes official drop data website, no data mining was involved.

Web UI & URL

screenshot

There is an experimental searchable web ui available at http://drops.warframestat.us

"API Endpoints"

You can access the data via normal HTTP requests, which makes it usable like an API without really being one.

/data/all.json

All data from the website in one single file.

Data structure:

{
  "blueprintLocations": [ { ... } ],
  "cetusBountyRewards": [ { ... } ],
  "enemyBlueprintTables": [ { ... } ],
  "enemyModTables": [ { ... } ],
  "keyRewards": [ { ... } ],
  "missionRewards": { "Earth": { ... } },
  "modLocations": [ { ... } ],
  "relics": [ { ... } ],
  "sortieRewards": [ { ... } ],
  "transientRewards": [ { ... } ],
  "solarisBountyRewards" : [ { ... } ],
  "zarimanRewards": [ { ... } ],
  "syndicates": [ { ... }],
}

/data/info.json

The metadata of the current build. Updates when Digital Extremes' website is updated.

Legend:

  • Hash: An MD5 hash generated from the drop data page.
  • Timestamp: The timestamp at which the build was generated by us.
  • Modified: The timestamp at which the drop data page was last modified by DE.

Data structure:

{
  "hash": "d47a826e5c3a8dc7a37fe6f468f41a57",
  "timestamp": 1524933993968,
  "modified": 1524690737000
}

/data/missionRewards.json

All mission rewards, like what drops where and in which rotation. (Source)

Data structure:

"missionRewards": {
  "Sedna": {
    "Hydron": {
      "gameMode": "Defense",
      "isEvent": false,
      "rewards": {
        "A": [
          {
            "_id": "c0400ac7082c2f3d811e47ca9b7a8ae8",
            "itemName": "Vitality",
            "chance": 11.11,
            "rarity": "Uncommon"
          },
          { ... }
        ],
        "B": [ ... ]
      }
    },
    "Bere": { ... }
  },
  "Earth": { ... }
}

/data/missionRewards/$PLANET_NAME/$PLACE.json

Drop data for a specific location. Example: /data/missionRewards/Eris/Xini.json.

Data structure:

"Hydron": {
  "gameMode": "Defense",
  "isEvent": false,
  "rewards": {
    "A": [
      {
        "_id": "c0400ac7082c2f3d811e47ca9b7a8ae8",
        "itemName": "Vitality",
        "chance": 11.11,
        "rarity": "Uncommon"
      },
      { ... }
    ],
    "B": [ ... ]
  }
}

/data/relics.json

All relics, what they contain, rarity etc. (Source)

Data structure:

"relics": [
  {
    "_id": "4e4d817f8c2d887316c6d8add253403e",
    "tier": "Axi",
    "relicName": "A1",
    "state": "Intact",
    "rewards": [
      {
        "_id": "6733cc5298452209aa29dd72027c7df1",
        "itemName": "Akstiletto Prime Barrel",
        "chance": 11,
        "rarity": "Uncommon"
      },
      { ... }
    ]
  },
  { ... }
]

/data/relics/$TIER/$RELIC_NAME.json

Data for a specific relic. Example: /data/relics/Axi/R1.json.

Data structure:

{
  "_id": "4e4d817f8c2d887316c6d8add253403e",
  "tier": "Axi",
  "relicName": "A1",
  "state": "Intact",
  "rewards": {
    "Intact": [
      {
        "_id": "6733cc5298452209aa29dd72027c7df1",
        "itemName": "Akstiletto Prime Barrel",
        "chance": 11,
        "rarity": "Uncommon"
      },
      { ... }
    ],
    "Exceptional": [ ... ]
  }
}

/data/transientRewards.json

Rewards not tied to a specific location, like mods dropped by Nightmare Mode missions. (Source)

Data structure:

"transientRewards": [
  {
    "_id": "b3c734177040ffb494609a27d87d4841",
    "objectiveName": "Derelict Vault",
    "rewards": [
      {
        "_id": "24a4a903a7846a300d6b04e914e52e1b",
        "itemName": "Anemic Agility",
        "chance": 4.17,
        "rarity": "Rare"
      },
      { ... }
    ]
  },
  { ... }
]

/data/sortieRewards.json

Sortie rewards. (Source)

Data structure:

"sortieRewards": [
  {
    "_id": "b3c734177040ffb494609a27d87d4841",
    "itemName": "4000 Endo",
    "chance": 12.1,
    "rarity": "Uncommon"
  },
  { ... }
]

/data/modLocations.json

Mod drops sorted by mod. (Source)

Data structure:

"modLocations": [
  {
    "_id": "b3c734177040ffb494609a27d87d4841",
    "modName": "Accelerated Deflection",
    "enemies": [
      {
        "_id": "68cfde6d20b38ba62b412b48c440a7a0",
        "enemyName": "Arcane Boiler",
        "enemyModDropChance": 3,
        "chance": 7.37,
        "rarity": "Rare"
      },
      { ... }
    ]
  },
  { ... }
]

/data/enemyModTables.json

Mod drops sorted by enemy. (Source)

Data structure:

"modLocations": [
  {
    "_id": "2757006e018c952e40a6e3cf74048420",
    "enemyName": "002-Er",
    "enemyModDropChance": "10.00",
    "mods": [
      {
        "_id": "74ab77f66f97e146b6cef713a370e105",
        "modName": "Flux Overdrive",
        "chance": 12.5,
        "rarity": "Uncommon"
      },
      { ... }
    ]
  },
  { ... }
]

/data/enemyBlueprintTables.json

Blueprints and part drops sorted by enemy. (Source)

Data structure:

"enemyBlueprintTables": [
  {
    "_id": "6ba71181fe67be210250c59fdf06ecb8",
    "enemyName": "Arid Heavy Gunner",
    "enemyItemDropChance": "1.00",
    "items": [
      {
        "_id": "9568cc883b465bc94c14e0d206506b2d",
        "itemName": "Gorgon Blueprint",
        "chance": 100,
        "rarity": "Common"
      },
      { ... }
    ]
  },
  { ... }
]

/data/blueprintLocations.json

Blueprints and part drops sorted by item. (Source)

Data structure:

"blueprintLocations": [
  {
    "_id": "2d200b684ad2bac2184a5edc3a9655cb",
    "itemName": "Ash Chassis Blueprint",
    "enemies": [
      {
        "_id": "02ca12683663224f017f209954cb876a",
        "enemyName": "Grineer Manic",
        "enemyItemDropChance": 33,
        "chance": 38.72,
        "rarity": "Common"
      },
      { ... }
    ]
  },
  { ... }
]

/data/cetusBountyRewards.json

Drop data for Cetus bounty missions. (Source)

Data structure:

"cetusBountyRewards": [
  {
    "_id": "0b9c958b277561c57f47390f5db201ef",
    "bountyLevel": "Level 10 - 30 Bounty",
    "rewards": {
      "A": [
        {
          "_id": "2d220168d8505314316354e586fe4c7e",
          "stage": "Stage 1",
          "itemName": "100 Endo",
          "chance": 25,
          "rarity": "Uncommon"
        },
        { ... }
      ],
      "B": [ ... ]
    }
  },
  { ... }
]

/data/zarimanRewards.json

Drop data for Zariman bounty missions. (Source)

Data structure:

"zarimanRewards": [
  {
    "_id": "255771097c27769a3a76bfa38c9fba49",
    "bountyLevel": "Level 50 - 55 Zariman Bounty",
      "rewards": {
        { ... }
        "C": [
          {
            "_id": "d5ccc328b76d91df416cc361d2209c1f",
            "itemName": "15,000 Credits",
            "rarity": "Uncommon",
            "chance": 17.39,
            "stage": "Final stage"
          },
        { ... }
      ],
    }
  },
  { ... }
]

/data/syndicates.json

Drop data for syndicate vendors. Generated by data from the Warframe Wikia.

Data structure:

{
  "syndicates": {
    "Steel Meridian": [
      {
        "_id": "d765637f1f1ae09add1b5265f5d29ea1",
        "item": "Steel Meridian Sigil",
        "chance": 100,
        "rarity": "Common",
        "place": "Steel Meridian, Brave",
        "standing": 1000
      },
      { ... }
    ],
    { ... }
  },
}

/data/miscItems.json

Miscellanous enemy item drops. (Source)

Data structure:

"miscItems": [
  {
    "_id": "abce816f002a752c88308d5f6658427c",
    "enemyName": "Akkalak Turret",
    "enemyItemDropChance": "70.00",
    "items": [
      {
        "_id": "a3ab4147ff1f344ae81bc8fd301a4ba5",
        "itemName": "Circuits",
        "chance": 68.02,
        "rarity": "Common"
      },
      { ... }
    ]
  },
  { ... }
]

/data/builds/builds.json

A list of available builds and their timestamps.

Data structure:

[
  {
    "hash": "d47a826e5c3a8dc7a37fe6f468f41a57",
    "timestamp": 1524933993968,
    "modified": 1524690737000
  },
  { ... }
]

/data/builds/{hash}.json

The all.json file of the given hash. Other files, such as missionRewards.json are not available for previous builds.

Data structure:

{
  "blueprintLocations": [ { ... } ],
  "cetusBountyRewards": [ { ... } ],
  "enemyBlueprintTables": [ { ... } ],
  "enemyModTables": [ { ... } ],
  "keyRewards": [ { ... } ],
  "miscItems": [ { ... } ],
  "missionRewards": { "Earth": { ... } },
  "modLocations": [ { ... } ],
  "relics": [ { ... } ],
  "sortieRewards": [ { ... } ],
  "transientRewards": [ { ... } ]
}

For Developers

Dependencies

Usage

You can run the build script with npm run build.

Once built, serve the Web UI with npm run serve:dev.

Syndicate drop data

Syndicate drop data is scraped from the wiki and not from the drops site as the rest of the data.

The syndicate data needs to be scraped from different pages, one for each syndicate which could also contain multiple sections containing the drop data. To make this possible a declarative configuration has been created within lib/syndicates.js where you can define all of this in the following format:

/**
 * @typedef {Object} SyndicateMapperResult
 * @property {_id} _id Unique hash of the item
 * @property {string} item The name of the item
 * @property {number} chance The dropchance of the item
 * @property {string} rarity The rarity of the item
 * @property {string} place The location where the item drops
 */
/**
 * @typedef {function} SyndicateMapper
 * @param {module:cheerio/CheerioAPI} $ cheerio interface
 * @param {string} element Current element
 * @param {string} syndicate Name of the Syndicate
 * @param {string} [section] Section title - potentially empty
 * @returns {SyndicateMapperResult}
 */
/**
 * @typedef {Object} SyndicateSection
 * @property {string} [title] Indicates the name of the specific vendor
 * @property {string} selector jQuery selector used to find the elements you want to map
 * @property {SyndicateMapper} [mapper] Used to map these elements. If not provided, a default mapped is used 
 */
/**
 * @typedef {Object} SyndicateConfig
 * @property {string} name Name of the Syndicate (should match the wiki)
 * @property {string} url The wiki url of the syndicate
 * @property {SyndicateSection[]} sections These will be parsed and mapped into json data
 */

/** @type {Array<SyndicateConfig>} */
const SYNDICATES = [
  {
    name: 'Steel Meridian',
    url: 'https://warframe.fandom.com/wiki/Steel_Meridian',
    sections: [
      { selector: '#mw-customcollapsible-SteelMeridian > div > div' },
    ],
  },
  {
    name: 'Entrati',
    url: 'https://warframe.fandom.com/wiki/Entrati',
    sections: [
      { title: 'Father', selector: '#mw-customcollapsible-Father > div > div' },
      { title: 'Daughter', selector: '#mw-customcollapsible-Daughter > div > div' },
      { title: 'Son', selector: '#mw-customcollapsible-Son > div > div' },
      { title: 'Otak', selector: '.flex-container:eq(3) > div' },
      { title: 'Grandmother', selector: '#mw-customcollapsible-Grandmother #gallery-1 > div', mapper: galleryMapper },
    ],
  },
  { ... }
];

Mappers

A mapper is a function that maps a singular element (found by the selector) to a json object. The mapper receives the following arguments: the cheerio object, the current element, name of the syndicate, section title (can be empty). The return type should at least contain the following information:

/**
 * @typedef {Object} SyndicateMapperResult
 * @property {_id} _id Unique hash of the item
 * @property {string} item The name of the item
 * @property {number} chance The dropchance of the item
 * @property {string} rarity The rarity of the item
 * @property {string} place The location where the item drops
 */

Any additional properties will be added into the final result but won't show up in the slim json file.

Disclaimer

This list represents data and drops from the PC version of the Free-to-play game Warframe. That's right - Warframe is free! Which means our drop system is designed to maintain a balance. Our free players can earn the game's content, and our paying players who support us (and keep the game running) usually get first dibs on the content by using Platinum (which can be traded to free players)! As far as we can tell... we are the first developers to openly post something quite like this. Let's hope it works out for us and we set a trend.

This is automatically generated from our internal data but this data comes with no guarantees -- do not expect it to be comprehensive for how complex the game is. This list will be maintained by an automated process which will be published with Updates (not all Hotfixes). We update often and new game systems may or may not be covered here. This list can be discussed here. Know a free-to-play game that provides official drop rates in a different way? We'd love to know.

License

MIT