code: def __do_series_search(self, url):
          
          root = self.__fetch_data(url)
  
          series_ids = []
          data = {}
  
          num_results_returned = 0  # number of results returned in this HTTP request
          num_results_total = int(root.get('count'))  # total number of results, this can be larger than number of results returned
          for child in root.getchildren():
              num_results_returned += 1
              series_id = child.get('id')
              series_ids.append(series_id)
              data[series_id] = {"id": series_id}
              fields = ["realtime_start", "realtime_end", "title", "observation_start", "observation_end",
                        "frequency", "frequency_short", "units", "units_short", "seasonal_adjustment",
                        "seasonal_adjustment_short", "last_updated", "popularity", "notes"]
              for field in fields:
                  data[series_id][field] = child.get(field)
  
          if num_results_returned > 0:
              data = pd.DataFrame(data, columns=series_ids).T
              # parse datetime columns
              for field in ["realtime_start", "realtime_end", "observation_start", "observation_end", "last_updated"]:
                  data[field] = data[field].apply(self._parse, format=None)
              # set index name
              data.index.name = 'series id'
          else:
              data = None
          return data, num_results_total
docs: helper function for making one HTTP request for data, and parsing the returned results into a DataFrame