✊🏿 Black Lives Matter. Please consider donating to Black Girls Code today.
🐇 Announcing Dash VTK for 3d simulation graphics. Check out the March webinar.

HTTP 403 forbidden error - Terra satellite feed live updates

The example from https://dash.plotly.com/live-updates is raising a 403 forbidden error. Error trace show below. Any help in identifying the root cause would be appreciated.


HTTPError Traceback (most recent call last)
in
10 # pip install pyorbital
11 from pyorbital.orbital import Orbital
—> 12 satellite = Orbital(‘TERRA’)
13
14 external_stylesheets = [‘https://codepen.io/chriddyp/pen/bWLwgP.css’]

/dir/user/lib/python3.7/site-packages/pyorbital/orbital.py in init(self, satellite, tle_file, line1, line2)
163 self.satellite_name = satellite
164 self.tle = tlefile.read(satellite, tle_file=tle_file,
–> 165 line1=line1, line2=line2)
166 self.orbit_elements = OrbitElements(self.tle)
167 self._sgdp4 = _SGDP4(self.orbit_elements)

/dir/user/lib/python3.7/site-packages/pyorbital/tlefile.py in read(platform, tle_file, line1, line2)
95 TLES pattern, or from internet if none is provided.
96 “”"
—> 97 return Tle(platform, tle_file=tle_file, line1=line1, line2=line2)
98
99

/dir/user/lib/python3.7/site-packages/pyorbital/tlefile.py in init(self, platform, tle_file, line1, line2)
141 self.orbit = None
142
–> 143 self._read_tle()
144 self._checksum()
145 self._parse_tle()

/dir/user/lib/python3.7/site-packages/pyorbital/tlefile.py in _read_tle(self)
199 designator = "1 " + SATELLITES.get(self._platform, ‘’)
200 for url in urls:
–> 201 fid = open_func(url)
202 for l_0 in fid:
203 l_0 = l_0.decode(‘utf-8’)

/dir/user/lib/python3.7/urllib/request.py in urlopen(url, data, timeout, cafile, capath, cadefault, context)
220 else:
221 opener = _opener
–> 222 return opener.open(url, data, timeout)
223
224 def install_opener(opener):

/dir/user/lib/python3.7/urllib/request.py in open(self, fullurl, data, timeout)
529 for processor in self.process_response.get(protocol, ):
530 meth = getattr(processor, meth_name)
–> 531 response = meth(req, response)
532
533 return response

/dir/user/lib/python3.7/urllib/request.py in http_response(self, request, response)
639 if not (200 <= code < 300):
640 response = self.parent.error(
–> 641 ‘http’, request, response, code, msg, hdrs)
642
643 return response

/dir/user/lib/python3.7/urllib/request.py in error(self, proto, *args)
567 if http_err:
568 args = (dict, ‘default’, ‘http_error_default’) + orig_args
–> 569 return self._call_chain(*args)
570
571 # XXX probably also want an abstract factory that knows when it makes

/dir/user/lib/python3.7/urllib/request.py in _call_chain(self, chain, kind, meth_name, *args)
501 for handler in handlers:
502 func = getattr(handler, meth_name)
–> 503 result = func(*args)
504 if result is not None:
505 return result

/dir/user/lib/python3.7/urllib/request.py in http_error_default(self, req, fp, code, msg, hdrs)
647 class HTTPDefaultErrorHandler(BaseHandler):
648 def http_error_default(self, req, fp, code, msg, hdrs):
–> 649 raise HTTPError(req.full_url, code, msg, hdrs, fp)
650
651 class HTTPRedirectHandler(BaseHandler):

HTTPError: HTTP Error 403: Forbidden