Micro-sheep / Micro-sheep/efinance
ef.stock.get_realtime_quotes()失效
- Dominant language
- Python
- Stars
- 4.1k
- Forks
- 755
- PR merge metrics
- No merged PRs in 30d
Description
求助大佬们有无解决方案!!
---------------------------------------------------------------------------
JSONDecodeError Traceback (most recent call last)
File /opt/conda/envs/xlfh/lib/python3.10/site-packages/requests/models.py:974, in Response.json(self, **kwargs)
973 try:
--> 974 return complexjson.loads(self.text, **kwargs)
975 except JSONDecodeError as e:
976 # Catch JSON-related errors and raise as requests.JSONDecodeError
977 # This aliases json.JSONDecodeError and simplejson.JSONDecodeError
File /opt/conda/envs/xlfh/lib/python3.10/json/__init__.py:346, in loads(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
343 if (cls is None and object_hook is None and
344 parse_int is None and parse_float is None and
345 parse_constant is None and object_pairs_hook is None and not kw):
--> 346 return _default_decoder.decode(s)
347 if cls is None:
File /opt/conda/envs/xlfh/lib/python3.10/json/decoder.py:337, in JSONDecoder.decode(self, s, _w)
333 """Return the Python representation of ``s`` (a ``str`` instance
334 containing a JSON document).
335
336 """
--> 337 obj, end = self.raw_decode(s, idx=_w(s, 0).end())
338 end = _w(s, end).end()
File /opt/conda/envs/xlfh/lib/python3.10/json/decoder.py:355, in JSONDecoder.raw_decode(self, s, idx)
354 except StopIteration as err:
--> 355 raise JSONDecodeError("Expecting value", s, err.value) from None
356 return obj, end
JSONDecodeError: Expecting value: line 2 column 1 (char 1)
During handling of the above exception, another exception occurred:
JSONDecodeError Traceback (most recent call last)
Cell In[18], line 1
----> 1 ef.stock.get_realtime_quotes()
File /opt/conda/envs/xlfh/lib/python3.10/site-packages/efinance/utils/__init__.py:336, in process_dataframe_and_series..decorator..wrapper(*args, **kwargs)
334 @wraps(func)
335 def wrapper(*args, **kwargs):
--> 336 values = func(*args, **kwargs)
337 if isinstance(values, pd.DataFrame):
338 for column, function_name in function_fields.items():
File /opt/conda/envs/xlfh/lib/python3.10/site-packages/efinance/utils/__init__.py:48, in to_numeric..run(*args, **kwargs)
46 @wraps(func)
47 def run(*args, **kwargs):
---> 48 values = func(*args, **kwargs)
49 if isinstance(values, pd.DataFrame):
50 for column in values.columns:
File /opt/conda/envs/xlfh/lib/python3.10/site-packages/efinance/stock/getter.py:433, in get_realtime_quotes(fs, **kwargs)
431 fs_list.append(FS_DICT["stock"])
432 fs_str = ",".join(fs_list)
--> 433 df = get_realtime_quotes_by_fs(fs_str, **kwargs)
434 df.rename(columns={"代码": "股票代码", "名称": "股票名称"}, inplace=True)
436 return df
File /opt/conda/envs/xlfh/lib/python3.10/site-packages/efinance/utils/__init__.py:48, in to_numeric..run(*args, **kwargs)
46 @wraps(func)
47 def run(*args, **kwargs):
---> 48 values = func(*args, **kwargs)
49 if isinstance(values, pd.DataFrame):
50 for column in values.columns:
File /opt/conda/envs/xlfh/lib/python3.10/site-packages/efinance/common/getter.py:79, in get_realtime_quotes_by_fs(fs, **kwargs)
77 with ThreadPoolExecutor() as executor:
78 tasks = executor.map(get_by_page, range(1, pages + 1), [pz] * pages)
---> 79 responses = list(tasks)
81 dfs = [
82 pd.DataFrame(response["data"]["diff"])[list(columns.keys())]
83 for response in responses
84 ]
85 df = (
86 pd.concat(dfs, axis=0, ignore_index=True)
87 .rename(columns=columns)[columns.values()]
(...)
93 )
94 )
File /opt/conda/envs/xlfh/lib/python3.10/concurrent/futures/_base.py:621, in Executor.map..result_iterator()
618 while fs:
619 # Careful not to keep a reference to the popped future
620 if timeout is None:
--> 621 yield _result_or_cancel(fs.pop())
622 else:
623 yield _result_or_cancel(fs.pop(), end_time - time.monotonic())
File /opt/conda/envs/xlfh/lib/python3.10/concurrent/futures/_base.py:319, in _result_or_cancel(***failed resolving arguments***)
317 try:
318 try:
--> 319 return fut.result(timeout)
320 finally:
321 fut.cancel()
File /opt/conda/envs/xlfh/lib/python3.10/concurrent/futures/_base.py:451, in Future.result(self, timeout)
449 raise CancelledError()
450 elif self._state == FINISHED:
--> 451 return self.__get_result()
453 self._condition.wait(timeout)
455 if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]:
File /opt/conda/envs/xlfh/lib/python3.10/concurrent/futures/_base.py:403, in Future.__get_result(self)
401 if self._exception:
402 try:
--> 403 raise self._exception
404 finally:
405 # Break a reference cycle with the exception in self._exception
406 self = None
File /opt/conda/envs/xlfh/lib/python3.10/concurrent/futures/thread.py:58, in _WorkItem.run(self)
55 return
57 try:
---> 58 result = self.fn(*self.args, **self.kwargs)
59 except BaseException as exc:
60 self.future.set_exception(exc)
File /opt/conda/envs/xlfh/lib/python3.10/site-packages/efinance/common/getter.py:57, in get_realtime_quotes_by_fs..get_by_page(pn, pz)
42 params = (
43 ("pn", pn),
44 ("pz", pz),
(...)
52 ("fields", fields),
53 )
54 url = "http://push2.eastmoney.com/api/qt/clist/get"
55 json_response = session.get(
56 url, headers=EASTMONEY_REQUEST_HEADERS, params=params
---> 57 ).json()
58 return json_response
File /opt/conda/envs/xlfh/lib/python3.10/site-packages/requests/models.py:978, in Response.json(self, **kwargs)
974 return complexjson.loads(self.text, **kwargs)
975 except JSONDecodeError as e:
976 # Catch JSON-related errors and raise as requests.JSONDecodeError
977 # This aliases json.JSONDecodeError and simplejson.JSONDecodeError
--> 978 raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
JSONDecodeError: Expecting value: line 2 column 1 (char 1)
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with efinance/stock/getter.py at get_realtime_quotes() and efinance/common/getter.py at get_realtime_quotes_by_fs(), then reproduce the call against the Eastmoney endpoint shown in the traceback. Determine why the response is not JSON and verify that realtime quote retrieval works again, including the affected request path.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend, data
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 30/100