why its not working ?

import os, time, pandas as pd
import refinitiv.data as rd
from refinitiv.data.content import filings as rfil
CSV_FILE_PATH = "/Users/prince/Downloads/nwsheet.csv"
COMPANY_NAME_COLUMN = "Company Name"
COMPANY_ID_COLUMN = "Identifier" # RICs like AAPL.OQ, RELI.NS, etc.
DOWNLOAD_DIR = "/Users/prince/Downloads/x"
START_YEAR, END_YEAR = 2015, 2023
LSEG_API_KEY = "" # or set env var RD_APP_KEY
ANNUAL_REPORT_CATEGORY_ID = 1 # MidLevelCategory: 1 == "Annual"
def ensure_dir(p):
if not os.path.exists(p):
os.makedirs(p)
def filings_query(ric: str, y: int) -> str:
# Filings query syntax uses field:value with AND
# Common fields: RIC, DateFrom, DateTo, MidLevelCategory
return f'RIC:{ric} AND DateFrom:{y}-01-01 AND DateTo:{y}-12-31 AND MidLevelCategory:{ANNUAL_REPORT_CATEGORY_ID}'
def main():
rd.open_session(app_key=LSEG_API_KEY) # or just rd.open_session() if RD_APP_KEY env var set
ensure_dir(DOWNLOAD_DIR)
try: df = pd.read_csv(CSV_FILE_PATH) ids = df[COMPANY_ID_COLUMN].astype(str).tolist() names = df[COMPANY_NAME_COLUMN].astype(str).tolist() except FileNotFoundError: print(f"CSV not found: {CSV_FILE_PATH}") return except KeyError as e: print(f"Missing column in CSV: {e}") return print(f"Found {len(ids)} companies") for ric, name in zip(ids, names): if not ric or ric == "nan": continue safe = name.replace(" ", "_").replace("/", "_") company_dir = os.path.join(DOWNLOAD_DIR, safe) ensure_dir(company_dir) print(f"\nProcessing {name} ({ric})") for year in range(START_YEAR, END_YEAR + 1): try: query = filings_query(ric, year) # 1) Search the Filings catalog search_resp = rfil.search(query=query, top=5) # returns a DataFrame in .data.df results = getattr(search_resp, "data", None) df_res = getattr(results, "df", pd.DataFrame()) if df_res.empty: print(f" {year}: no annual report found") continue # Pick the best candidate (you can filter further on Title/Language if needed) row = df_res.iloc[0] doc_id = row.get("documentId") or row.get("DocumentId") # naming differs across library versions title = row.get("documentTitle") or row.get("DocumentTitle") or "Annual Report" if not doc_id: print(f" {year}: search returned rows without documentId") continue out_path = os.path.join(company_dir, f"{safe}_Annual_Report_{year}.pdf") # 2) Download the document binary doc_resp = rfil.get_document(document_id=doc_id) # returns .data.raw or .data.content depending on version binary = getattr(doc_resp.data, "raw", None) or getattr(doc_resp.data, "content", None) if not binary: print(f" {year}: could not retrieve document content for {doc_id}") continue with open(out_path, "wb") as f: f.write(binary) print(f" {year}: downloaded '{title}' -> {out_path}") except Exception as e: print(f" {year}: error: {e}") time.sleep(0.75) # be nice to the API # close session (guard if none) sess = rd.get_default_session() if sess and getattr(sess, "is_open", False): rd.close_session()
if name == "main":
main()
Answers
-
Thank you for reaching out to us.
You can refer to the sample code in this Using AI modeling to interpret 10-Q filings article. It uses a GraphQL expression.
To the best of my knowledge, the Filing APIs are compatible with the Platform session. They may not function properly in the Desktop session due to permission limitations.
You can reach out directly to your LSEG account or sales team to verify your permissions.
0
Categories
- All Categories
- 3 Polls
- 6 AHS
- 37 Alpha
- 167 App Studio
- 6 Block Chain
- 4 Bot Platform
- 18 Connected Risk APIs
- 47 Data Fusion
- 34 Data Model Discovery
- 713 Datastream
- 1.5K DSS
- 639 Eikon COM
- 5.3K Eikon Data APIs
- 20 Electronic Trading
- 1 Generic FIX
- 7 Local Bank Node API
- 12 Trading API
- 3K Elektron
- 1.5K EMA
- 260 ETA
- 574 WebSocket API
- 42 FX Venues
- 16 FX Market Data
- 2 FX Post Trade
- 1 FX Trading - Matching
- 12 FX Trading – RFQ Maker
- 5 Intelligent Tagging
- 2 Legal One
- 26 Messenger Bot
- 5 Messenger Side by Side
- 9 ONESOURCE
- 7 Indirect Tax
- 60 Open Calais
- 285 Open PermID
- 47 Entity Search
- 2 Org ID
- 1 PAM
- PAM - Logging
- 6 Product Insight
- Project Tracking
- ProView
- ProView Internal
- 25 RDMS
- 2.3K Refinitiv Data Platform
- 20 CFS Bulk File/TM3
- 939 Refinitiv Data Platform Libraries
- 6 LSEG Due Diligence
- 1 LSEG Due Diligence Portal API
- 4 Refinitiv Due Dilligence Centre
- Rose's Space
- 1.2K Screening
- 18 Qual-ID API
- 12 World-Check Customer Risk Screener
- World-Check On Demand
- 1K World-Check One
- 46 World-Check One Zero Footprint
- 46 Side by Side Integration API
- 2 Test Space
- 3 Thomson One Smart
- 10 TR Knowledge Graph
- 151 Transactions
- 143 REDI API
- 1.8K TREP APIs
- 4 CAT
- 27 DACS Station
- 126 Open DACS
- 1.1K RFA
- 108 UPA
- 197 TREP Infrastructure
- 232 TRKD
- 925 TRTH
- 5 Velocity Analytics
- 9 Wealth Management Web Services
- 107 Workspace SDK
- 11 Element Framework
- 5 Grid
- 19 World-Check Data File
- 1 Yield Book Analytics
- 48 中文论坛