def _list_variables(self, station_codes):
        """
        Internal helper to list the variables for the given station codes.
        """
        # sample output from obs retrieval:
        #
        # DD9452D0
        #     HP(SRBM5)
        #         2013-07-22 19:30 45.97
        #     HT(SRBM5)
        #         2013-07-22 19:30 44.29
        #     PC(SRBM5)
        #         2013-07-22 19:30 36.19
        #
        rvar = re.compile(r"\n\s([A-Z]{2}[A-Z0-9]{0,1})\(\w+\)")

        variables = set()
        resp = requests.post(
            self.obs_retrieval_url,
            data={
                "state": "nil",
                "hsa": "nil",
                "of": "3",
                "extraids": " ".join(station_codes),
                "sinceday": -1,
            },
        )
        resp.raise_for_status()

        list(map(variables.add, rvar.findall(resp.text)))
        return variables