Given a product keyword, downloads the SUVI l1b image into the current directory.
        NOTE: the suvi_l1b_url must be properly set for the Fetcher object
        :param product: the keyword for the product, e.g. suvi-l1b-fe094
        :param correct: remove nans and negatives
        :return: tuple of product name, fits header, and data object
            the header and data object will be None if the request failed

def fetch_suvi_l1b(self, product, correct=True, median_kernel=5):
        """
        Given a product keyword, downloads the SUVI l1b image into the current directory.
        NOTE: the suvi_l1b_url must be properly set for the Fetcher object
        :param product: the keyword for the product, e.g. suvi-l1b-fe094
        :param correct: remove nans and negatives
        :return: tuple of product name, fits header, and data object
            the header and data object will be None if the request failed
        """
        if self.date < datetime(2018, 5, 23) and not (self.date >= datetime(2017, 9, 6) \
                and self.date <= datetime(2017, 9, 10, 23, 59)):
            print("SUVI data is only available after 2018-5-23")
            return product, None, None

        url = self.suvi_base_url + product + "/{}/{:02d}/{:02d}".format(self.date.year, self.date.month, self.date.day)
        if self.verbose:
            print("Requesting from {}".format(url))

        try:
            req = urllib.request.Request(url)
            with urllib.request.urlopen(req) as response:
                page = response.read()
        except (URLError, HTTPError):
            msg = "The SUVI URL you requested, {}, appears to be unavailable. Check it through a web browser."
            raise RuntimeError(msg.format(url))

        soup = BeautifulSoup(page, 'html.parser')
        links = [link['href'] for link in soup.find_all('a', href=True)]
        links = [link for link in links if "SUVI" in link]
        meta = [self.parse_filename_meta(fn) for fn in links if ".fits" in fn]
        links = sorted(meta, key=lambda m: np.abs((m[2] - self.date).total_seconds()))[:10]
        links = [fn for fn, _, _, _, _ in links]

        i = 0

        def download_and_check(i):
            try:
                urllib.request.urlretrieve(url + "/" + links[i], "{}.fits".format(product))
            except (URLError, HTTPError):
                msg = "THE SUVI file you requested, {}, appears to be unvailable. Check if the website is correct."
                raise RuntimeError(msg.format(url + "/" + links[i]))

            with fits.open("{}.fits".format(product)) as hdu:
                head = hdu[0].header
            return head['exptime'] > 0.5

        while not download_and_check(i):
            i += 1

        with fits.open("{}.fits".format(product)) as hdu:
            head = hdu[0].header
            data = hdu[0].data
        os.remove("{}.fits".format(product))

        if correct:
            data[np.isnan(data)] = 0
            data[data < 0] = 0

        if median_kernel:
            data = medfilt(data, median_kernel)

        data, head = self.align_solar_fov(head, data, 2.5, 2.0, rotate=True, scale=False)
        if self.verbose:
            print(product, " is using ", head['date-obs'])
        return product, head, data