EDCD / EDDI

Companion application for Elite Dangerous
Other
440 stars 81 forks source link

Implement star system data retrieval from Spansh? #2327

Open Tkael opened 2 years ago

Tkael commented 2 years ago

What happens now

Star system data is sourced from EDSM. EDSM data is bound to user accounts and may not be retained for accounts deactivated due to inactivity. Further, the EDSM API is rate limited and rate limiting has a dramatic impact on service query search times.

What I'd like to happen

Consider transitioning from EDSM to a more comprehensive / more complete data source.

How it can happen

It is possible to access system data via the Spansh API using id64 / system address, e.g. https://www.spansh.co.uk/api/system/263303726260. The complementary user-friendly version of the page is at https://www.spansh.co.uk/system/263303726260.

Similarly, station data is available using market ID: https://www.spansh.co.uk/api/station/3707582976 and body data is available via body id64: https://www.spansh.co.uk/api/body/36029060322690228.

Body id64 is calculated from: (bodyId << 55) + systemAddress.

EDDI Version

4.0.1

Tkael commented 1 year ago

Buy/sell locations are available with a query like: https://spansh.co.uk/api/commodity/sell/Sol/Platinum/100 or https://spansh.co.uk/api/commodity/buy/Sol/Platinum/100 Where

Tkael commented 1 year ago

Type-ahead endpoint: https://spansh.co.uk/api/systems/field_values/system_names?q=sol Quick search endpoint (returns systems, bodies, and stations with selective details): https://spansh.co.uk/api/search?q=sol (q is not case sensitive and may also be a system address, station name, or body name) Dump endpoint (returns the complete data available from the line in the dump file, which includes all body and station (including outfitting and market) data but no additional data seeded from other sources): https://www.spansh.co.uk/api/dump/10477373803

Tkael commented 2 months ago

Searches (e.g. for station services) require a POST to https://www.spansh.co.uk/api/stations/search with a json payload defining desired filters. Payload example (for a manufactured materials trader near coordinates 6.25, -1.25, -5.75):

{
    "filters": {
        "services": {
            "value": ["Material Trader"]
        },
        "primary_economy": {
            "value": ["Industrial"]
        }
    },
    "sort": [{
            "distance": {
                "direction": "asc"
            }
        }
    ],
    "size": 10,
    "page": 0,
    "reference_coords": {
        "x": 6.25,
        "y": -1.28,
        "z": -5.75
    }
}

The server appears to respond ASAP with the result rather than returning a referral number that needs to be checked periodically. Example response (conveniently already sorted by distance):

{
    "count": 811,
    "from": 0,
    "results": [
        {
            "controlling_minor_faction": "Sirius Corporation",
            "distance": 0.00124999999999997,
            "distance_to_arrival": 1024.068257,
            "economies": [
                {
                    "name": "Extraction",
                    "share": 30.0
                },
                {
                    "name": "Industrial",
                    "share": 70.0
                }
            ],
            "government": "Corporate",
            "has_large_pad": true,
            "has_market": true,
            "has_outfitting": true,
            "has_shipyard": true,
            "id": "ECmg_I8BSefGriDOBLba",
            "is_planetary": false,
            "large_pads": 9,
            "market": [ ... ],
            "market_id": 128136952,
            "market_updated_at": "2024-06-08 20:34:03+00",
            "material_trader": "Manufactured",
            "medium_pads": 18,
            "modules": [ ... ],
            "name": "Patterson Enterprise",
            "outfitting_updated_at": "2024-06-08 20:34:03+00",
            "power_state": "Contested",
            "primary_economy": "Industrial",
            "prohibited_commodities": [ ... ],
            "secondary_economy": "Extraction",
            "services": [ ... ],
            "ships": [ ... ],
            "shipyard_updated_at": "2024-06-08 20:34:03+00",
            "small_pads": 17,
            "system_id64": 121569805492,
            "system_name": "Sirius",
            "system_power": [
                "Edmund Mahon",
                "Zachary Hudson"
            ],
            "system_x": 6.25,
            "system_y": -1.28125,
            "system_z": -5.75,
            "type": "Coriolis Starport",
            "updated_at": "2024-06-08 21:15:56+00"
        },
        ...,
    ],
    "search": {
        "filters": {
            "primary_economy": {
                "value": [
                    "Industrial"
                ]
            },
            "services": {
                "value": [
                    "Material Trader"
                ]
            }
        },
        "page": 0,
        "reference_coords": {
            "x": 6.25,
            "y": -1.28,
            "z": -5.75
        },
        "size": 10,
        "sort": [
            {
                "distance": {
                    "direction": "asc"
                }
            }
        ]
    },
    "search_reference": "25F7C398-26EC-11EF-B109-EEC2E5B66F40",
    "size": 10
}