code: def get_data_from_remote(symbol, interval, start, end):
      error_msg = f"{symbol}-{interval}-{start}-{end}"
  
      try:
          # TODO: numberOfHistoricalDaysToCrawl should be bigger enough
          url = INDEX_BENCH_URL.format(
              index_code=symbol,
              numberOfHistoricalDaysToCrawl=10000,
              startDate=start,
              endDate=end,
          )
          resp = requests.get(
              url,
              headers={
                  "referer": "http://fund.eastmoney.com/110022.html"
              },
              timeout=None,
          )
  
          if resp.status_code != 200:
              raise ValueError("request error")
  
          data = json.loads(resp.text.split("(")[-1].split(")")[0])
  
          # Some funds don't show the net value, example: http://fundf10.eastmoney.com/jjjz_010288.html
          SYType = data["Data"]["SYType"]
          if SYType in {"每万份收益", "每百份收益", "每百万份收益"}:
              raise ValueError("The fund contains 每*份收益")
  
          # TODO: should we sort the value by datetime?
          _resp = pd.DataFrame(data["Data"]["LSJZList"])
  
          if isinstance(_resp, pd.DataFrame):
              return _resp.reset_index()
      except Exception as e:
          logger.warning(f"{error_msg}:{e}")
  
imports: import abc
  import sys
  import datetime
  import json
  from abc import ABC
  from pathlib import Path
  import fire
  import requests
  import pandas
  from loguru import logger
  from dateutil.tz import tzlocal
  from qlib.constant import REG_CN
  from data_collector.base import BaseCollector, BaseNormalize, BaseRun
  from data_collector.utils import get_calendar_list, get_en_fund_symbols
label_desc: Use image node_id 5 for calling the FundCollector obj's underlying member method code with example usage: obj.get_data_from_remote(symbol, interval, start, end) and returns: _resp