How do I access Dow Jones, Barron's, and Wall Street Journal news via API through an active workspace session? Can you patch me through API team and entitlements team?
I can attached the test code we are using
"""
Minimal reproducible test: Dow Jones stories visible in LSEG Workspace
but empty through the LSEG Data Library API.
Environment observed:
Python 3.12
lseg-data 2.1.1
authenticated desktop.workspace session
This script prints metadata and counts only. It does not print article bodies.
"""
from future import annotations
import json
from importlib.metadata import PackageNotFoundError, version
import lseg.data as ld
from lseg.data.content import news
STORY_IDS = {
"confirmed_barrons": (
"urn:newsml:newswire.refinitiv.com:20260729:nDJR7HqVYR:2"
),
"workspace_dow_jones_2": (
"urn:newsml:newswire.refinitiv.com:20260729:nDJR20W9CQ:2"
),
"workspace_dow_jones_3": (
"urn:newsml:newswire.refinitiv.com:20260729:nDJR4S1rMP:1"
),
"workspace_dow_jones_4": (
"urn:newsml:newswire.refinitiv.com:20260729:nDJR4Slgyf:2"
),
}
def package_version(name: str) -> str:
try:
return version(name)
except PackageNotFoundError:
return "unknown"
def safe_len(value: object) -> int:
if value is None:
return 0
return len(str(value))
def test_access_layer(story_id: str) -> None:
try:
try:
result = ld.news.get_story(
story_id,
format=ld.news.Format.TEXT,
)
call_style = "positional + Format.TEXT"
except (AttributeError, TypeError):
result = ld.news.get_story(story_id)
call_style = "positional default"
print(f" Access Layer call style : {call_style}")
print(f" Access Layer type : {type(result).__name__}")
print(f" Access Layer characters : {safe_len(result)}")
except Exception as exc:
print(f" Access Layer error : {type(exc).__name__}: {exc}")<br>
def test_content_layer(story_id: str) -> None:
try:
response = news.story.Definition(story_id).get_data()
raw = getattr(response.data, "raw", None)
raw_json = (
json.dumps(raw, ensure_ascii=False, default=str)
if raw is not None
else ""
)<br>
story = getattr(response.data, "story", None)
content = getattr(story, "content", None) if story else None
html_content = getattr(content, "html", None) if content else None
text_content = getattr(content, "text", None) if content else None<br>
print(f" Content Layer response : {type(response).__name__}")
print(f" Raw payload present : {raw is not None}")
print(f" Raw payload characters : {len(raw_json)}")
print(f" Contains newsItem : {'newsItem' in raw_json}")
print(f" Contains contentSet : {'contentSet' in raw_json}")
print(f" Contains inlineXML : {'inlineXML' in raw_json}")
print(f" Contains webURL : {'webURL' in raw_json}")
print(f" HTML characters : {safe_len(html_content)}")
print(f" Text characters : {safe_len(text_content)}")
except Exception as exc:
print(f" Content Layer error : {type(exc).__name__}: {exc}")<br>
def test_content_layer(story_id: str) -> None:
try:
response = news.story.Definition(story_id).get_data()
raw = getattr(response.data, "raw", None)
raw_json = (
json.dumps(raw, ensure_ascii=False, default=str)
if raw is not None
else ""
)<br>
story = getattr(response.data, "story", None)
content = getattr(story, "content", None) if story else None
html_content = getattr(content, "html", None) if content else None
text_content = getattr(content, "text", None) if content else None<br>
print(f" Content Layer response : {type(response).__name__}")
print(f" Raw payload present : {raw is not None}")
print(f" Raw payload characters : {len(raw_json)}")
print(f" Contains newsItem : {'newsItem' in raw_json}")
print(f" Contains contentSet : {'contentSet' in raw_json}")
print(f" Contains inlineXML : {'inlineXML' in raw_json}")
print(f" Contains webURL : {'webURL' in raw_json}")
print(f" HTML characters : {safe_len(html_content)}")
print(f" Text characters : {safe_len(text_content)}")
except Exception as exc:
print(f" Content Layer error : {type(exc).__name__}: {exc}")<br>
def test_headlines() -> None:
print("\n=== CONTROL TEST: Reuters headlines ===")
try:
frame = ld.news.get_headlines(
query="R:AAPL.O AND Source:RTRS AND Language:LEN",
count=3,
)
print(f"Reuters headline rows : {0 if frame is None else len(frame)}")
if frame is not None:
print(f"Reuters headline columns : {list(frame.columns)}")
except Exception as exc:
print(f"Reuters headline error : {type(exc).name}: {exc}")
print("\n=== DOW JONES HEADLINE QUERIES ===")
queries = {
"DJN": "R:AAPL.O AND Source:DJN",
"BRN": "R:AAPL.O AND Source:BRN",
"WSJ": "R:AAPL.O AND Source:WSJ",
}
for label, query in queries.items():
try:
frame = ld.news.get_headlines(query=query, count=10)
print(f"{label:4s} headline rows : {0 if frame is None else len(frame)}")
except Exception as exc:
print(f"{label:4s} headline error : {type(exc).__name__}: {exc}")<br>
def main() -> None:
print("lseg-data version:", package_version("lseg-data"))
print("Opening explicit desktop.workspace session...")
session = ld.open_session(name="desktop.workspace")
print("Session:", session)
print("Session state:", getattr(session, "state", "unknown"))<br>
try:
test_headlines()<br>
print("\n=== EXACT WORKSPACE STORY IDS ===")
for label, story_id in STORY_IDS.items():
print("\n" + "-" * 78)
print("Label :", label)
print("Story ID:", story_id)
test_access_layer(story_id)
test_content_layer(story_id)
finally:
try:
session.close()
except Exception:
try:
ld.close_session()
except Exception:
pass<br>
if name == "main":
main()