mirror of
https://github.com/hwchase17/langchain.git
synced 2025-06-26 08:33:49 +00:00
community: Fix YahooFinanceNewsTool to handle updated yfinance data structure (#29498)
*Description:** Updates the YahooFinanceNewsTool to handle the current yfinance news data structure. The tool was failing with a KeyError due to changes in the yfinance API's response format. This PR updates the code to correctly extract news URLs from the new structure. **Issue:** #29495 **Dependencies:** No new dependencies required. Works with existing yfinance package. The changes maintain backwards compatibility while fixing the KeyError that users were experiencing. The modified code properly handles the new data structure where: - News type is now at `content.contentType` - News URL is now at `content.canonicalUrl.url` --------- Co-authored-by: Chester Curme <chester.curme@gmail.com>
This commit is contained in:
parent
22219eefaf
commit
b7e3e337b1
@ -36,7 +36,16 @@ class YahooFinanceNewsTool(BaseTool): # type: ignore[override, override]
|
||||
query: str,
|
||||
run_manager: Optional[CallbackManagerForToolRun] = None,
|
||||
) -> str:
|
||||
"""Use the Yahoo Finance News tool."""
|
||||
"""
|
||||
Use the Yahoo Finance News tool.
|
||||
|
||||
Args:
|
||||
query: Company ticker symbol (e.g., 'AAPL' for Apple).
|
||||
run_manager: Optional callback manager.
|
||||
|
||||
Returns:
|
||||
str: Formatted news results or error message.
|
||||
"""
|
||||
try:
|
||||
import yfinance
|
||||
except ImportError:
|
||||
@ -53,7 +62,11 @@ class YahooFinanceNewsTool(BaseTool): # type: ignore[override, override]
|
||||
|
||||
links = []
|
||||
try:
|
||||
links = [n["link"] for n in company.news if n["type"] == "STORY"]
|
||||
links = [
|
||||
n["content"]["canonicalUrl"]["url"]
|
||||
for n in company.news
|
||||
if n["content"]["contentType"] == "STORY"
|
||||
]
|
||||
except (HTTPError, ReadTimeout, ConnectionError):
|
||||
if not links:
|
||||
return f"No news found for company that searched with {query} ticker."
|
||||
@ -69,8 +82,9 @@ class YahooFinanceNewsTool(BaseTool): # type: ignore[override, override]
|
||||
@staticmethod
|
||||
def _format_results(docs: Iterable[Document], query: str) -> str:
|
||||
doc_strings = [
|
||||
"\n".join([doc.metadata["title"], doc.metadata["description"]])
|
||||
"\n".join([doc.metadata["title"], doc.metadata.get("description", "")])
|
||||
for doc in docs
|
||||
if query in doc.metadata["description"] or query in doc.metadata["title"]
|
||||
if query in doc.metadata.get("description", "")
|
||||
or query in doc.metadata["title"]
|
||||
]
|
||||
return "\n\n".join(doc_strings)
|
||||
|
@ -9,7 +9,7 @@ yfinance = pytest.importorskip("yfinance")
|
||||
def test_success() -> None:
|
||||
"""Test that the tool runs successfully."""
|
||||
tool = YahooFinanceNewsTool()
|
||||
query = "Microsoft"
|
||||
query = "AAPL"
|
||||
result = tool.run(query)
|
||||
assert result is not None
|
||||
assert f"Company ticker {query} not found." not in result
|
||||
|
Loading…
Reference in New Issue
Block a user