Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagepy
linenumberstrue
import requests
from eccodes import codes_new_from_message, codes_get, codes_release

url='https://some.gov/pub/data/temperature.grib2'
print('Started downloading...')
r = requests.get(url)
data = r.content # raw bytes

# Convert each field to a handle in turn
offset = 0
while offset < len(data):
    h = codes_new_from_message(data[offset:])
    print(offset, codes_get(h, 'step'), codes_get(h, 'shortName'))
    # Advance through the bytes by the length of the message
    offset += codes_get(h, 'totalLength')
    codes_release(h)

Here in line 4 we retrieve the GRIB data from the specified resource. Then in line 7 we get the raw bytes which can contain several GRIB messages.
Now we start off at the beginning of the stream (offset = 0) and get the first message using codes_new_from_message() which gives us a handle 'h' on the first message. We can now use the standard codes_get() function to access values of various keys from this message. In line 15 we advance through the byte data by the length of the first message so next time when we call codes_new_from_message() we will come across the next message and so on. We must ensure to call the codes_release() on each handle to free the memory.

Content by Label
showLabelsfalse
max5
spacesUDOC
showSpacefalse
sortmodified
reversetrue
typepage
cqllabel in ("decode","python","eccodes-faqs","kb-how-to-article") and label = "eccodes-faqs" and type = "page" and space = "UDOC"
labelsdecode python

...