Skip to content

Library Quickstart¤

Most code is developed using asynchronous programming, enabling parallel execution of multiple queries and achieve high performance.

Here is a quick example in case you are not familiar with this code style:

import asyncio
from fr24 import FR24

async def main() -> None: # (1)!
    async with FR24() as fr24:
        result = await fr24.live_feed.fetch() # (2)!
        print(result)
        print(result.to_proto())
        print(result.to_dict())
        print(result.to_polars())

if __name__ == "__main__":
    asyncio.run(main())  # (3)!
  1. Wrap your code in an async function
  2. fetch() is an asynchronous method - we need to await it
  3. main() returns a coroutine object which does not run immediately - we need to run it on the event loop. If you are using Jupyter, a bare await main() would do as well.
LiveFeedResult(
    request=LiveFeedParams(
        bounding_box=BoundingBox(south=42, north=52, west=-8, east=10),
        stats=False,
        limit=1500,
        maxage=14400,
        fields={'type', 'route', 'flight', 'reg'}
    ),
    response=<Response [200 OK]>,
    timestamp=1741365506
)
flights_list {
  flightid: 962751826
  lat: 42.1471863
  lon: -6.79849291
  track: 15
  alt: 45000
  speed: 478
  icon: LJ60
  timestamp: 1741365503
  extra_info {
    type: "E55P"
  }
  position_buffer {
    recent_positions_list {
      delta_lat: 190
      delta_lon: 70
      delta_ms: 1074
    }
    recent_positions_list {
      delta_lat: 405
      delta_lon: 146
      delta_ms: 2092
    }
    recent_positions_list {
      delta_lat: 885
...
  timestamp_ms: 1741365503412
}
server_time_ms: 1741365506194
{
    'flightsList': [
        {
            'flightid': 962751826,
            'lat': 42.147186,
            'lon': -6.798493,
            'track': 15,
            'alt': 45000,
            'speed': 478,
            'icon': 'LJ60',
            'timestamp': 1741365503,
            'extraInfo': {'type': 'E55P'},
            'positionBuffer': {
                'recentPositionsList': [
                    {'deltaLat': 190, 'deltaLon': 70, 'deltaMs': 1074},
                    {'deltaLat': 405, 'deltaLon': 146, 'deltaMs': 2092},
                    {'deltaLat': 885, 'deltaLon': 323, 'deltaMs': 4250},
                    {'deltaLat': 1100, 'deltaLon': 404, 'deltaMs': 5540},
                    {'deltaLat': 1420, 'deltaLon': 516, 'deltaMs': 6570},
                    {'deltaLat': 1869, 'deltaLon': 685, 'deltaMs': 8740},
                    {'deltaLat': 2079, 'deltaLon': 759, 'deltaMs': 9820}
                ]
            },
            'timestampMs': '1741365503377'
        },
...
    ],
    'serverTimeMs': '1741365506194'
}
shape: (1_383, 18)
┌────────────┬───────────┬───────────┬───────────┬───┬─────┬───────────────┬────────┬──────────────┐
│ timestamp  ┆ flightid  ┆ latitude  ┆ longitude ┆ … ┆ eta ┆ vertical_spee ┆ squawk ┆ position_buf │
│ ---        ┆ ---       ┆ ---       ┆ ---       ┆   ┆ --- ┆ d             ┆ ---    ┆ fer          │
│ u32        ┆ u32       ┆ f32       ┆ f32       ┆   ┆ u32 ┆ ---           ┆ u16    ┆ ---          │
│            ┆           ┆           ┆           ┆   ┆     ┆ i16           ┆        ┆ list[struct[ │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 3]]          │
╞════════════╪═══════════╪═══════════╪═══════════╪═══╪═════╪═══════════════╪════════╪══════════════╡
│ 1741365503 ┆ 962751826 ┆ 42.147186 ┆ -6.798493 ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{190,70,107 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 4}, {405,146 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ ,2092}…      │
│ 1741365502 ┆ 962816491 ┆ 42.135269 ┆ -6.858715 ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-96,193,10 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 61}, {-186,3 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 78,210…      │
│ 1741365502 ┆ 962797796 ┆ 42.508209 ┆ -7.829132 ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-241,-86,1 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 027}, {-422, │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ -150,2…      │
│ 1741365502 ┆ 962807077 ┆ 42.617691 ┆ -7.186656 ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-153,-178, │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 1140},       │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ {-294,-340,… │
│ 1741365503 ┆ 962798031 ┆ 43.173149 ┆ -6.419874 ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-326,-189, │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 2087},       │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ {-481,-283,… │
│ …          ┆ …         ┆ …         ┆ …         ┆ … ┆ …   ┆ …             ┆ …      ┆ …            │
│ 1741365502 ┆ 962810249 ┆ 51.088894 ┆ 9.924316  ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-215,-123, │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 1005},       │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ {-366,-205,… │
│ 1741365500 ┆ 962779754 ┆ 51.545338 ┆ 9.681549  ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-45,-475,4 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 751}, {-60,- │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 579,64…      │
│ 1741365502 ┆ 962810708 ┆ 51.785828 ┆ 9.941025  ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{162,83,103 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 0}, {395,205 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ ,2080}…      │
│ 1741365502 ┆ 962800000 ┆ 51.911652 ┆ 9.614821  ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ []           │
│ 1741365503 ┆ 962808335 ┆ 51.924786 ┆ 9.956282  ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{220,60,105 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 8}, {377,102 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ ,2359}…      │
└────────────┴───────────┴───────────┴───────────┴───┴─────┴───────────────┴────────┴──────────────┘

The following sections will break down what each line does under the hood.

Initialisation¤

from fr24 import FR24

async def my_feed() -> None:
    async with FR24() as fr24:
        ...

When FR24() is first initialised, it creates an unauthenticated HTTPX client under the hood. It also manages authentication (subscription key and tokens).

How to authenticate?

from fr24 import FR24

async def main() -> None:
    async with FR24() as fr24:
        # anonymous now
        await fr24.login() # reads from environment or configuration file, or,
        await fr24.login(creds={"username": "...", "password": "..."}) # or,
        await fr24.login(creds={"subscriptionKey": "...", "token": "..."})

See authentication for more details.

How to pass in my own HTTPX client?

To share clients across code, pass it into the fr24.FR24 constructor.

import httpx

from fr24 import FR24

client = httpx.AsyncClient(http1=False, http2=True, transport=httpx.AsyncHTTPTransport(retries=5))

async def main() -> None:
    async with FR24(client) as fr24:
        ...

The async with statement ensures that it is properly authenticated by calling the login endpoint (if necessary).

Data Fetching¤

Next, fr24 contains multiple services, each of which implements the fetch method:

from fr24 import FR24

async def my_feed() -> None:
    async with FR24() as fr24:
        result = await fr24.live_feed.fetch()
        print(result.response.content)
LiveFeedResult(
    request=LiveFeedParams(
        bounding_box=BoundingBox(south=42, north=52, west=-8, east=10),
        stats=False,
        limit=1500,
        maxage=14400,
        fields={'type', 'route', 'flight', 'reg'}
    ),
    response=<Response [200 OK]>,
    timestamp=1741365506
)
b'...truncated
\x84\x02(\xa2\x160m8\x03@\x00H\xfc\xc1\xac\xbe\x06P\x00Z\x05DEGLC`\x00j\x1c\n\x00\x12\x06D-EGLC\x1a\n\n\x03KSF\x12
\x03EIB"\x04C172r6\n\x19\x08\xd3\xff\xff\xff\xff\xff\xff\xff\xff\x01\x10\xa5\xfc\xff\xff\xff\xff\xff\xff\xff\x01\x18
\x8f%\n\x19\x08\xc4\xff\xff\xff\xff\xff\xff\xff\xff\x01\x10\xbd\xfb\xff\xff\xff\xff\xff\xff\xff\x01\x18\xb42x\xf5
\xb0\xe3\x8b\xd72\n\x96\x01\x08\xd4\xa6\x8d\xcb\x03\x15\xb0$OB\x1dp\x0e\x1fA 
\x12(\xbar0\xf3\x028\x05@\x00H\xfe\xc1\xac\xbe\x06P\x00Z\x06ECA4RT`\x00j\x1c\n\x00\x12\x06D-CFRT\x1a\n\n\x03FMM\x12
\x03HAJ"\x04C25CrA\n\x08\x08\xa2\x01\x10S\x18\x86\x08\n\t\x08\x8b\x03\x10\xcd\x01\x18\xa0\x10\n\t\x08\xd1\x05\x10
\xf5\x02\x18\x8c!\n\t\x08\xf9\x06\x10\xd1\x03\x18\xac*\n\t\x08\xb7\n\x10\xbc\x05\x18\x8c=\n\t\x08\xed\x0b\x10\xa1\x06
\x18\x9fEx\xf0\xc4\xe3\x8b\xd72\nN\x08\x80\xd3\x8c\xcb\x03\x15\x88\xa5OB\x1dO\xd6\x19A 
\xf2\x01(\x96\x1a0\n8\x03@\x00H\xfe\xc1\xac\xbe\x06P\x00Z\x05DEGZZ`\x01j\x16\n\x00\x12\x06D-EGZZ\x1a\x04\n\x00\x12
\x00"\x04DA40r\x00x\xc4\xc1\xe3\x8b\xd72\n\x9c\x01\x08\x8f\x94\x8d\xcb\x03\x15\xfb\xb2OB\x1d\xeeL\x1fA 
\n(\xa1Y0\xd6\x028\x07@\x00H\xff\xc1\xac\xbe\x06P\x00Z\x07AFR87MJ`\x00j"\n\x06AF1838\x12\x06F-HBXE\x1a\n\n\x03CDG
\x12\x03HAJ"\x04E170r@\n\x08\x08\xdc\x01\x10<\x18\xa2\x08\n\x08\x08\xf9\x02\x10f\x18\xb7\x12\n\t\x08\xed\x05\x10\xd3
\x01\x18\x82&\n\t\x08\x9e\x07\x10\x8a\x02\x18\xbd.\n\t\x08\xb9\x08\x10\xb8\x02\x18\xa76\n\t\x08\xb5\x0b\x10\xa3\x03
\x18\xa1Gx\xb4\xcb\xe3\x8b\xd72 \x92\xe1\xe3\x8b\xd72\x80\x00\x00\x00\x0fgrpc-status:0\r\n'

It returns a wrapped context and response, which contains:

  • the context related to the request under result.request;
  • the raw HTTPX response under result.response:
    • the raw bytes under result.response.content
    • the HTTP status under result.response.status_code
    • the response headers under result.response.headers

As you can see, the raw bytes seem to be jarbled, somewhat resembling records of aircraft. In fact, the live feed API uses gRPC over HTTP2 and protocol buffers, a compact binary serialisation protocol.

A further decoding step is needed.

Conversion to other formats¤

The result implements:

import asyncio
from fr24 import FR24

async def main() -> None:
    async with FR24() as fr24:
        result = await fr24.live_feed.fetch()
        print(result.to_proto())
        print(result.to_dict())
        print(result.to_polars())
flights_list {
  flightid: 962751826
  lat: 42.1471863
  lon: -6.79849291
  track: 15
  alt: 45000
  speed: 478
  icon: LJ60
  timestamp: 1741365503
  extra_info {
    type: "E55P"
  }
  position_buffer {
    recent_positions_list {
      delta_lat: 190
      delta_lon: 70
      delta_ms: 1074
    }
    recent_positions_list {
      delta_lat: 405
      delta_lon: 146
      delta_ms: 2092
    }
    recent_positions_list {
      delta_lat: 885
...
  timestamp_ms: 1741365503412
}
server_time_ms: 1741365506194
{
    'flightsList': [
        {
            'flightid': 962751826,
            'lat': 42.147186,
            'lon': -6.798493,
            'track': 15,
            'alt': 45000,
            'speed': 478,
            'icon': 'LJ60',
            'timestamp': 1741365503,
            'extraInfo': {'type': 'E55P'},
            'positionBuffer': {
                'recentPositionsList': [
                    {'deltaLat': 190, 'deltaLon': 70, 'deltaMs': 1074},
                    {'deltaLat': 405, 'deltaLon': 146, 'deltaMs': 2092},
                    {'deltaLat': 885, 'deltaLon': 323, 'deltaMs': 4250},
                    {'deltaLat': 1100, 'deltaLon': 404, 'deltaMs': 5540},
                    {'deltaLat': 1420, 'deltaLon': 516, 'deltaMs': 6570},
                    {'deltaLat': 1869, 'deltaLon': 685, 'deltaMs': 8740},
                    {'deltaLat': 2079, 'deltaLon': 759, 'deltaMs': 9820}
                ]
            },
            'timestampMs': '1741365503377'
        },
...
    ],
    'serverTimeMs': '1741365506194'
}
shape: (1_383, 18)
┌────────────┬───────────┬───────────┬───────────┬───┬─────┬───────────────┬────────┬──────────────┐
│ timestamp  ┆ flightid  ┆ latitude  ┆ longitude ┆ … ┆ eta ┆ vertical_spee ┆ squawk ┆ position_buf │
│ ---        ┆ ---       ┆ ---       ┆ ---       ┆   ┆ --- ┆ d             ┆ ---    ┆ fer          │
│ u32        ┆ u32       ┆ f32       ┆ f32       ┆   ┆ u32 ┆ ---           ┆ u16    ┆ ---          │
│            ┆           ┆           ┆           ┆   ┆     ┆ i16           ┆        ┆ list[struct[ │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 3]]          │
╞════════════╪═══════════╪═══════════╪═══════════╪═══╪═════╪═══════════════╪════════╪══════════════╡
│ 1741365503 ┆ 962751826 ┆ 42.147186 ┆ -6.798493 ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{190,70,107 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 4}, {405,146 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ ,2092}…      │
│ 1741365502 ┆ 962816491 ┆ 42.135269 ┆ -6.858715 ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-96,193,10 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 61}, {-186,3 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 78,210…      │
│ 1741365502 ┆ 962797796 ┆ 42.508209 ┆ -7.829132 ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-241,-86,1 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 027}, {-422, │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ -150,2…      │
│ 1741365502 ┆ 962807077 ┆ 42.617691 ┆ -7.186656 ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-153,-178, │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 1140},       │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ {-294,-340,… │
│ 1741365503 ┆ 962798031 ┆ 43.173149 ┆ -6.419874 ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-326,-189, │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 2087},       │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ {-481,-283,… │
│ …          ┆ …         ┆ …         ┆ …         ┆ … ┆ …   ┆ …             ┆ …      ┆ …            │
│ 1741365502 ┆ 962810249 ┆ 51.088894 ┆ 9.924316  ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-215,-123, │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 1005},       │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ {-366,-205,… │
│ 1741365500 ┆ 962779754 ┆ 51.545338 ┆ 9.681549  ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-45,-475,4 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 751}, {-60,- │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 579,64…      │
│ 1741365502 ┆ 962810708 ┆ 51.785828 ┆ 9.941025  ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{162,83,103 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 0}, {395,205 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ ,2080}…      │
│ 1741365502 ┆ 962800000 ┆ 51.911652 ┆ 9.614821  ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ []           │
│ 1741365503 ┆ 962808335 ┆ 51.924786 ┆ 9.956282  ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{220,60,105 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 8}, {377,102 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ ,2359}…      │
└────────────┴───────────┴───────────┴───────────┴───┴─────┴───────────────┴────────┴──────────────┘

Polars is a dataframe library that implements the Arrow columnar data storage format. Under the hood, to_polars utilises a strongly typed schema to reduce memory.

If you wish, you can convert the polars DataFrame into pandas.

Warning

to_polars tries to convert a list of records in the result into a 2D table. Extra metadata that does not fit in a table (e.g. airline information in the flight list service) will be discarded.

Writing to a file¤

You can write the data in JSON format:

import asyncio
import json
from fr24 import FR24

async def main() -> None:
    async with FR24() as fr24:
        result = await fr24.live_feed.fetch()
        with open("path/to/some/file.json", "w") as f:
            json.dump(result.to_dict(), f, indent=4)

Alternatively, you can serialize the tabular form of the data in the Parquet data format.

result implements the write_table method, which can be used to write to a file on the disk or a buffer, in the parquet or csv format:

import asyncio
from io import BytesIO
from fr24 import FR24

async def main() -> None:
    async with FR24() as fr24:
        result = await fr24.live_feed.fetch()
        result.write_table("path/to/some/file.parquet") # (1)!
        result.write_table("path/to/some/file.csv", format="csv") # (2)!

        buffer = BytesIO()
        result.write_table(buffer, format="parquet")
        buffer.seek(0)
  1. If the format is not specified, it defaults to parquet.
  2. You must specify format="csv" - write_table does not infer from the file extension of the given path.

Caching¤

Writing¤

You can also write the table into a cache:

import asyncio
from fr24 import FR24, FR24Cache

cache = FR24Cache("path/to/some/directory/")
# alternatively, use the default cache directory:
cache = FR24Cache.default() # (1)!

async def main() -> None:
    async with FR24() as fr24:
        result = await fr24.live_feed.fetch()
        result.write_table(cache)
  1. More information about the location of the default cache can be found here. You can also check the location by running fr24 dirs in the shell.

  2. In this case, the file is written to {cache_dir}/feed/{timestamp}.parquet.

Files will be organised in the cache, with the structure shown here:

It should resemble the following on Linux:

$ tree $HOME/.cache/fr24/feed
/home/user/.cache/fr24
├── feed
│   └── 1711911907.parquet
├── flight_list
│   ├── flight
│   │   └── CX8747.parquet
│   └── reg
│       └── B-HUJ.parquet
└── playback
    └── 2d81a27.parquet

These directories are created automatically when FR24Cache is initialised.

Reading¤

FR24Cache resembles the FR24 service class. You list all cached files under a collection with the glob method and lazily load the file with the scan_table method:

from fr24 import FR24Cache

cache = FR24Cache.default()

for fp in cache.live_feed.glob("*"):
    print(fp)
    lf = cache.live_feed.scan_table(fp)
    print(lf.collect())

# alternatively, scan one file:
lf = cache.live_feed.scan_table("1733036597")
/home/user/.cache/fr24/feed/1733036597.parquet
shape: (1_383, 18)
┌────────────┬───────────┬───────────┬───────────┬───┬─────┬───────────────┬────────┬──────────────┐
│ timestamp  ┆ flightid  ┆ latitude  ┆ longitude ┆ … ┆ eta ┆ vertical_spee ┆ squawk ┆ position_buf │
│ ---        ┆ ---       ┆ ---       ┆ ---       ┆   ┆ --- ┆ d             ┆ ---    ┆ fer          │
│ u32        ┆ u32       ┆ f32       ┆ f32       ┆   ┆ u32 ┆ ---           ┆ u16    ┆ ---          │
│            ┆           ┆           ┆           ┆   ┆     ┆ i16           ┆        ┆ list[struct[ │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 3]]          │
╞════════════╪═══════════╪═══════════╪═══════════╪═══╪═════╪═══════════════╪════════╪══════════════╡
│ 1741365503 ┆ 962751826 ┆ 42.147186 ┆ -6.798493 ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{190,70,107 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 4}, {405,146 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ ,2092}…      │
│ 1741365502 ┆ 962816491 ┆ 42.135269 ┆ -6.858715 ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-96,193,10 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 61}, {-186,3 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 78,210…      │
│ 1741365502 ┆ 962797796 ┆ 42.508209 ┆ -7.829132 ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-241,-86,1 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 027}, {-422, │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ -150,2…      │
│ 1741365502 ┆ 962807077 ┆ 42.617691 ┆ -7.186656 ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-153,-178, │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 1140},       │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ {-294,-340,… │
│ 1741365503 ┆ 962798031 ┆ 43.173149 ┆ -6.419874 ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-326,-189, │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 2087},       │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ {-481,-283,… │
│ …          ┆ …         ┆ …         ┆ …         ┆ … ┆ …   ┆ …             ┆ …      ┆ …            │
│ 1741365502 ┆ 962810249 ┆ 51.088894 ┆ 9.924316  ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-215,-123, │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 1005},       │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ {-366,-205,… │
│ 1741365500 ┆ 962779754 ┆ 51.545338 ┆ 9.681549  ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{-45,-475,4 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 751}, {-60,- │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 579,64…      │
│ 1741365502 ┆ 962810708 ┆ 51.785828 ┆ 9.941025  ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{162,83,103 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 0}, {395,205 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ ,2080}…      │
│ 1741365502 ┆ 962800000 ┆ 51.911652 ┆ 9.614821  ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ []           │
│ 1741365503 ┆ 962808335 ┆ 51.924786 ┆ 9.956282  ┆ … ┆ 0   ┆ 0             ┆ 0      ┆ [{220,60,105 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ 8}, {377,102 │
│            ┆           ┆           ┆           ┆   ┆     ┆               ┆        ┆ ,2359}…      │
└────────────┴───────────┴───────────┴───────────┴───┴─────┴───────────────┴────────┴──────────────┘

Notes¤

See the examples gallery to learn more.

Intersphinx for this project could be found here.