class_docstr: Executes a direct download of data from Yahoo servers for the given time
  range.
  
  Specific parameters (or specific meaning):
  
    - ``dataname``
  
      The ticker to download ('YHOO' for Yahoo own stock quotes)
  
    - ``proxies``
  
      A dict indicating which proxy to go through for the download as in
      {'http': 'http://myproxy.com'} or {'http': 'http://127.0.0.1:8080'}
  
    - ``period``
  
      The timeframe to download data in. Pass 'w' for weekly and 'm' for
      monthly.
  
    - ``reverse``
  
      [2018-11-16] The latest incarnation of Yahoo online downloads returns
      the data in the proper order. The default value of ``reverse`` for the
      online download is therefore set to ``False``
  
    - ``adjclose``
  
      Whether to use the dividend/split adjusted close and adjust all values
      according to it.
  
    - ``urlhist``
  
      The url of the historical quotes in Yahoo Finance used to gather a
      ``crumb`` authorization cookie for the download
  
    - ``urldown``
  
      The url of the actual download server
  
    - ``retries``
  
      Number of times (each) to try to get a ``crumb`` cookie and download
      the data
  
    
code: def start_v7(self):
      try:
          import requests
      except ImportError:
          msg = (
              "The new Yahoo data feed requires to have the requests "
              "module installed. Please use pip install requests or "
              "the method of your choice"
          )
          raise Exception(msg)
  
      self.error = None
      url = self.p.urlhist.format(self.p.dataname)
  
      sesskwargs = dict()
      if self.p.proxies:
          sesskwargs["proxies"] = self.p.proxies
  
      crumb = None
      sess = requests.Session()
      sess.headers["User-Agent"] = "backtrader"
      for i in range(self.p.retries + 1):  # at least once
          resp = sess.get(url, **sesskwargs)
          if resp.status_code != requests.codes.ok:
              continue
  
          txt = resp.text
          i = txt.find("CrumbStore")
          if i == -1:
              continue
          i = txt.find("crumb", i)
          if i == -1:
              continue
          istart = txt.find('"', i + len("crumb") + 1)
          if istart == -1:
              continue
          istart += 1
          iend = txt.find('"', istart)
          if iend == -1:
              continue
  
          crumb = txt[istart:iend]
          crumb = crumb.encode("ascii").decode("unicode-escape")
          break
  
      if crumb is None:
          self.error = "Crumb not found"
          self.f = None
          return
  
      crumb = urlquote(crumb)
  
      # urldown/ticker?period1=posix1&period2=posix2&interval=1d&events=history&crumb=crumb
  
      # Try to download
      urld = "{}/{}".format(self.p.urldown, self.p.dataname)
  
      urlargs = []
      posix = date(1970, 1, 1)
      if self.p.todate is not None:
          period2 = (self.p.todate.date() - posix).total_seconds()
          urlargs.append("period2={}".format(int(period2)))
  
      if self.p.todate is not None:
          period1 = (self.p.fromdate.date() - posix).total_seconds()
          urlargs.append("period1={}".format(int(period1)))
  
      intervals = {
          bt.TimeFrame.Days: "1d",
          bt.TimeFrame.Weeks: "1wk",
          bt.TimeFrame.Months: "1mo",
      }
  
      urlargs.append("interval={}".format(intervals[self.p.timeframe]))
      urlargs.append("events=history")
      urlargs.append("crumb={}".format(crumb))
  
      urld = "{}?{}".format(urld, "&".join(urlargs))
      f = None
      for i in range(self.p.retries + 1):  # at least once
          resp = sess.get(urld, **sesskwargs)
          if resp.status_code != requests.codes.ok:
              continue
  
          ctype = resp.headers["Content-Type"]
          # Cover as many text types as possible for Yahoo changes
          if not ctype.startswith("text/"):
              self.error = "Wrong content type: %s" % ctype
              continue  # HTML returned? wrong url?
  
          # buffer everything from the socket into a local buffer
          try:
              # r.encoding = 'UTF-8'
              f = io.StringIO(resp.text, newline=None)
          except Exception:
              continue  # try again if possible
  
          break
  
      self.f = f
  
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import collections
  from datetime import date, datetime
  import io
  import itertools
  from ..utils.py3 import urlopen, urlquote, ProxyHandler, build_opener, install_opener
  import backtrader
  from ..None import feed
  from ..utils import date2num
label_desc: Use image node_id 1 for calling the YahooFinanceData obj's underlying member method code with example usage: obj.start_v7() without return types