reportify-sdk 0.2.9__py3-none-any.whl → 0.2.10__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
reportify_sdk/__init__.py CHANGED
@@ -20,7 +20,7 @@ from reportify_sdk.exceptions import (
20
20
  APIError,
21
21
  )
22
22
 
23
- __version__ = "0.2.9"
23
+ __version__ = "0.2.10"
24
24
  __all__ = [
25
25
  "Reportify",
26
26
  "ReportifyError",
reportify_sdk/client.py CHANGED
@@ -67,13 +67,14 @@ class Reportify:
67
67
  self._chat = None
68
68
  self._agent = None
69
69
  self._user = None
70
+ self._search = None
70
71
 
71
72
  def _get_headers(self) -> dict[str, str]:
72
73
  """Get default headers for API requests"""
73
74
  return {
74
75
  "Authorization": f"Bearer {self.api_key}",
75
76
  "Content-Type": "application/json",
76
- "User-Agent": "reportify-sdk-python/0.2.9",
77
+ "User-Agent": "reportify-sdk-python/0.2.10",
77
78
  }
78
79
 
79
80
  def _request(
@@ -157,338 +158,19 @@ class Reportify:
157
158
  else:
158
159
  raise APIError(f"API error: {status_code}")
159
160
 
160
- # -------------------------------------------------------------------------
161
- # Search Methods
162
- # -------------------------------------------------------------------------
163
-
164
- def search(
165
- self,
166
- query: str,
167
- *,
168
- num: int = 10,
169
- symbols: list[str] | None = None,
170
- industries: list[str] | None = None,
171
- channel_ids: list[str] | None = None,
172
- start_datetime: str | None = None,
173
- end_datetime: str | None = None,
174
- ) -> list[dict[str, Any]]:
175
- """
176
- Search documents across all categories
177
-
178
- Args:
179
- query: Search query string
180
- num: Number of results to return (default: 10, max: 100)
181
- symbols: Filter by stock symbols (e.g., ["US:AAPL", "HK:0700"])
182
- industries: Filter by industries
183
- channel_ids: Filter by channel IDs
184
- start_datetime: Start datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
185
- end_datetime: End datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
186
-
187
- Returns:
188
- List of matching documents
189
-
190
- Example:
191
- >>> docs = client.search("Tesla earnings", num=10)
192
- >>> for doc in docs:
193
- ... print(doc["title"])
194
- """
195
- data: dict[str, Any] = {
196
- "query": query,
197
- "num": num,
198
- }
199
- if symbols:
200
- data["symbols"] = symbols
201
- if industries:
202
- data["industries"] = industries
203
- if channel_ids:
204
- data["channel_ids"] = channel_ids
205
- if start_datetime:
206
- data["start_datetime"] = start_datetime
207
- if end_datetime:
208
- data["end_datetime"] = end_datetime
209
-
210
- response = self._post("/v2/search", json=data)
211
- return response.get("docs", [])
212
-
213
- def search_news(
214
- self,
215
- query: str,
216
- *,
217
- num: int = 10,
218
- symbols: list[str] | None = None,
219
- channel_ids: list[str] | None = None,
220
- start_datetime: str | None = None,
221
- end_datetime: str | None = None,
222
- ) -> list[dict[str, Any]]:
223
- """
224
- Search news articles
225
-
226
- Args:
227
- query: Search query string
228
- num: Number of results to return
229
- symbols: Filter by stock symbols
230
- channel_ids: Filter by channel IDs
231
- start_datetime: Start datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
232
- end_datetime: End datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
233
-
234
- Returns:
235
- List of news articles
236
- """
237
- data: dict[str, Any] = {"query": query, "num": num}
238
- if symbols:
239
- data["symbols"] = symbols
240
- if channel_ids:
241
- data["channel_ids"] = channel_ids
242
- if start_datetime:
243
- data["start_datetime"] = start_datetime
244
- if end_datetime:
245
- data["end_datetime"] = end_datetime
246
-
247
- response = self._post("/v2/search/news", json=data)
248
- return response.get("docs", [])
249
-
250
- def search_reports(
251
- self,
252
- query: str,
253
- *,
254
- num: int = 10,
255
- symbols: list[str] | None = None,
256
- industries: list[str] | None = None,
257
- channel_ids: list[str] | None = None,
258
- start_datetime: str | None = None,
259
- end_datetime: str | None = None,
260
- ) -> list[dict[str, Any]]:
261
- """
262
- Search research reports
263
-
264
- Args:
265
- query: Search query string
266
- num: Number of results to return
267
- symbols: Filter by stock symbols
268
- industries: Filter by industries
269
- channel_ids: Filter by channel IDs
270
- start_datetime: Start datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
271
- end_datetime: End datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
272
-
273
- Returns:
274
- List of research reports
275
- """
276
- data: dict[str, Any] = {"query": query, "num": num}
277
- if symbols:
278
- data["symbols"] = symbols
279
- if industries:
280
- data["industries"] = industries
281
- if channel_ids:
282
- data["channel_ids"] = channel_ids
283
- if start_datetime:
284
- data["start_datetime"] = start_datetime
285
- if end_datetime:
286
- data["end_datetime"] = end_datetime
287
-
288
- response = self._post("/v2/search/reports", json=data)
289
- return response.get("docs", [])
290
-
291
- def search_filings(
292
- self,
293
- query: str,
294
- symbols: list[str],
295
- *,
296
- num: int = 10,
297
- start_datetime: str | None = None,
298
- end_datetime: str | None = None,
299
- ) -> list[dict[str, Any]]:
300
- """
301
- Search company filings and announcements
302
-
303
- Args:
304
- query: Search query string
305
- symbols: Stock symbols to filter by (required)
306
- num: Number of results to return
307
- start_datetime: Start datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
308
- end_datetime: End datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
309
-
310
- Returns:
311
- List of filings
312
- """
313
- data: dict[str, Any] = {"query": query, "symbols": symbols, "num": num}
314
- if start_datetime:
315
- data["start_datetime"] = start_datetime
316
- if end_datetime:
317
- data["end_datetime"] = end_datetime
318
-
319
- response = self._post("/v2/search/filings", json=data)
320
- return response.get("docs", [])
321
-
322
- def search_transcripts(
323
- self,
324
- query: str,
325
- symbols: list[str],
326
- *,
327
- num: int = 10,
328
- start_datetime: str | None = None,
329
- end_datetime: str | None = None,
330
- ) -> list[dict[str, Any]]:
331
- """
332
- Search earnings call transcripts (conference calls)
333
-
334
- Args:
335
- query: Search query string
336
- symbols: Stock symbols to filter by (required)
337
- num: Number of results to return
338
- start_datetime: Start datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
339
- end_datetime: End datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
340
-
341
- Returns:
342
- List of transcripts
343
- """
344
- data: dict[str, Any] = {"query": query, "symbols": symbols, "num": num}
345
- if start_datetime:
346
- data["start_datetime"] = start_datetime
347
- if end_datetime:
348
- data["end_datetime"] = end_datetime
349
-
350
- response = self._post("/v2/search/conference-calls", json=data)
351
- return response.get("docs", [])
352
-
353
- def search_earnings_pack(
354
- self,
355
- query: str,
356
- symbols: list[str],
357
- *,
358
- num: int = 10,
359
- start_datetime: str | None = None,
360
- end_datetime: str | None = None,
361
- ) -> list[dict[str, Any]]:
362
- """
363
- Search earnings pack documents
364
-
365
- Includes financial reports, earnings call transcripts,
366
- presentation materials, and press releases.
367
-
368
- Args:
369
- query: Search query string
370
- symbols: Stock symbols to filter by (required)
371
- num: Number of results to return
372
- start_datetime: Start datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
373
- end_datetime: End datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
374
-
375
- Returns:
376
- List of earnings pack documents
377
- """
378
- data: dict[str, Any] = {"query": query, "symbols": symbols, "num": num}
379
- if start_datetime:
380
- data["start_datetime"] = start_datetime
381
- if end_datetime:
382
- data["end_datetime"] = end_datetime
383
-
384
- response = self._post("/v2/search/earnings-pack", json=data)
385
- return response.get("docs", [])
386
-
387
- def search_minutes(
388
- self,
389
- query: str,
390
- *,
391
- num: int = 10,
392
- symbols: list[str] | None = None,
393
- start_datetime: str | None = None,
394
- end_datetime: str | None = None,
395
- ) -> list[dict[str, Any]]:
396
- """
397
- Search minutes transcripts
398
-
399
- Includes conference calls and IR (Investor Relations) meetings.
400
-
401
- Args:
402
- query: Search query string
403
- num: Number of results to return
404
- symbols: Filter by stock symbols
405
- start_datetime: Start datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
406
- end_datetime: End datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
407
-
408
- Returns:
409
- List of minutes transcripts
410
- """
411
- data: dict[str, Any] = {"query": query, "num": num}
412
- if symbols:
413
- data["symbols"] = symbols
414
- if start_datetime:
415
- data["start_datetime"] = start_datetime
416
- if end_datetime:
417
- data["end_datetime"] = end_datetime
418
-
419
- response = self._post("/v2/search/minutes", json=data)
420
- return response.get("docs", [])
421
-
422
- def search_socials(
423
- self,
424
- query: str,
425
- *,
426
- num: int = 10,
427
- symbols: list[str] | None = None,
428
- channel_ids: list[str] | None = None,
429
- start_datetime: str | None = None,
430
- end_datetime: str | None = None,
431
- ) -> list[dict[str, Any]]:
432
- """
433
- Search social media content and market sentiment
434
-
435
- Args:
436
- query: Search query string
437
- num: Number of results to return
438
- symbols: Filter by stock symbols
439
- channel_ids: Filter by channel IDs
440
- start_datetime: Start datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
441
- end_datetime: End datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
442
-
443
- Returns:
444
- List of social media content
445
- """
446
- data: dict[str, Any] = {"query": query, "num": num}
447
- if symbols:
448
- data["symbols"] = symbols
449
- if channel_ids:
450
- data["channel_ids"] = channel_ids
451
- if start_datetime:
452
- data["start_datetime"] = start_datetime
453
- if end_datetime:
454
- data["end_datetime"] = end_datetime
455
-
456
- response = self._post("/v2/search/socials", json=data)
457
- return response.get("docs", [])
458
-
459
- def search_webpages(
460
- self,
461
- query: str,
462
- *,
463
- num: int = 10,
464
- start_datetime: str | None = None,
465
- end_datetime: str | None = None,
466
- ) -> list[dict[str, Any]]:
467
- """
468
- Search webpage content
469
-
470
- Args:
471
- query: Search query string
472
- num: Number of results to return
473
- start_datetime: Start datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
474
- end_datetime: End datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
475
-
476
- Returns:
477
- List of webpage content
478
- """
479
- data: dict[str, Any] = {"query": query, "num": num}
480
- if start_datetime:
481
- data["start_datetime"] = start_datetime
482
- if end_datetime:
483
- data["end_datetime"] = end_datetime
484
-
485
- response = self._post("/v2/search/webpages", json=data)
486
- return response.get("docs", [])
487
161
 
488
162
  # -------------------------------------------------------------------------
489
163
  # Sub-modules (lazy loading)
490
164
  # -------------------------------------------------------------------------
491
165
 
166
+ @property
167
+ def search(self):
168
+ """Search module for document search across all categories"""
169
+ if self._search is None:
170
+ from reportify_sdk.search import SearchModule
171
+ self._search = SearchModule(self)
172
+ return self._search
173
+
492
174
  @property
493
175
  def stock(self):
494
176
  """Stock data module for financial statements, prices, etc."""
@@ -0,0 +1,357 @@
1
+ """
2
+ Search Module
3
+
4
+ Provides document search functionality across various categories.
5
+ """
6
+
7
+ from typing import TYPE_CHECKING, Any
8
+
9
+ if TYPE_CHECKING:
10
+ from reportify_sdk.client import Reportify
11
+
12
+
13
+ class SearchModule:
14
+ """
15
+ Search module for document search functionality.
16
+
17
+ Access via client.search:
18
+ >>> results = client.search.all("Tesla earnings")
19
+ >>> news = client.search.news("Apple iPhone")
20
+ """
21
+
22
+ def __init__(self, client: "Reportify"):
23
+ self._client = client
24
+
25
+ def _post(self, path: str, json: dict[str, Any] | None = None) -> dict[str, Any]:
26
+ return self._client._post(path, json=json)
27
+
28
+ def all(
29
+ self,
30
+ query: str,
31
+ *,
32
+ num: int = 10,
33
+ categories: list[str] | None = None,
34
+ symbols: list[str] | None = None,
35
+ industries: list[str] | None = None,
36
+ channel_ids: list[str] | None = None,
37
+ start_datetime: str | None = None,
38
+ end_datetime: str | None = None,
39
+ ) -> list[dict[str, Any]]:
40
+ """
41
+ Search documents across all categories
42
+
43
+ Args:
44
+ query: Search query string
45
+ num: Number of results to return (default: 10, max: 100)
46
+ categories: Filter by categories (news, reports, filings, transcripts, socials)
47
+ symbols: Filter by stock symbols (e.g., ["US:AAPL", "HK:0700"])
48
+ industries: Filter by industries
49
+ channel_ids: Filter by channel IDs
50
+ start_datetime: Start datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
51
+ end_datetime: End datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
52
+
53
+ Returns:
54
+ List of matching documents
55
+ """
56
+ data: dict[str, Any] = {"query": query, "num": num}
57
+ if categories:
58
+ data["categories"] = categories
59
+ if symbols:
60
+ data["symbols"] = symbols
61
+ if industries:
62
+ data["industries"] = industries
63
+ if channel_ids:
64
+ data["channel_ids"] = channel_ids
65
+ if start_datetime:
66
+ data["start_datetime"] = start_datetime
67
+ if end_datetime:
68
+ data["end_datetime"] = end_datetime
69
+
70
+ response = self._post("/v2/search", json=data)
71
+ return response.get("docs", [])
72
+
73
+ def news(
74
+ self,
75
+ query: str,
76
+ *,
77
+ num: int = 10,
78
+ symbols: list[str] | None = None,
79
+ channel_ids: list[str] | None = None,
80
+ start_datetime: str | None = None,
81
+ end_datetime: str | None = None,
82
+ ) -> list[dict[str, Any]]:
83
+ """
84
+ Search news articles
85
+
86
+ Args:
87
+ query: Search query string
88
+ num: Number of results to return
89
+ symbols: Filter by stock symbols
90
+ channel_ids: Filter by channel IDs
91
+ start_datetime: Start datetime filter
92
+ end_datetime: End datetime filter
93
+
94
+ Returns:
95
+ List of news documents
96
+ """
97
+ data: dict[str, Any] = {"query": query, "num": num}
98
+ if symbols:
99
+ data["symbols"] = symbols
100
+ if channel_ids:
101
+ data["channel_ids"] = channel_ids
102
+ if start_datetime:
103
+ data["start_datetime"] = start_datetime
104
+ if end_datetime:
105
+ data["end_datetime"] = end_datetime
106
+
107
+ response = self._post("/v2/search/news", json=data)
108
+ return response.get("docs", [])
109
+
110
+ def reports(
111
+ self,
112
+ query: str,
113
+ *,
114
+ num: int = 10,
115
+ symbols: list[str] | None = None,
116
+ industries: list[str] | None = None,
117
+ channel_ids: list[str] | None = None,
118
+ start_datetime: str | None = None,
119
+ end_datetime: str | None = None,
120
+ ) -> list[dict[str, Any]]:
121
+ """
122
+ Search research reports
123
+
124
+ Args:
125
+ query: Search query string
126
+ num: Number of results to return
127
+ symbols: Filter by stock symbols
128
+ industries: Filter by industries
129
+ channel_ids: Filter by channel IDs
130
+ start_datetime: Start datetime filter
131
+ end_datetime: End datetime filter
132
+
133
+ Returns:
134
+ List of research reports
135
+ """
136
+ data: dict[str, Any] = {"query": query, "num": num}
137
+ if symbols:
138
+ data["symbols"] = symbols
139
+ if industries:
140
+ data["industries"] = industries
141
+ if channel_ids:
142
+ data["channel_ids"] = channel_ids
143
+ if start_datetime:
144
+ data["start_datetime"] = start_datetime
145
+ if end_datetime:
146
+ data["end_datetime"] = end_datetime
147
+
148
+ response = self._post("/v2/search/reports", json=data)
149
+ return response.get("docs", [])
150
+
151
+ def filings(
152
+ self,
153
+ query: str,
154
+ symbols: list[str],
155
+ *,
156
+ num: int = 10,
157
+ start_datetime: str | None = None,
158
+ end_datetime: str | None = None,
159
+ ) -> list[dict[str, Any]]:
160
+ """
161
+ Search company filings
162
+
163
+ Args:
164
+ query: Search query string
165
+ symbols: Stock symbols to filter by (required)
166
+ num: Number of results to return
167
+ start_datetime: Start datetime filter
168
+ end_datetime: End datetime filter
169
+
170
+ Returns:
171
+ List of filing documents
172
+ """
173
+ data: dict[str, Any] = {"query": query, "symbols": symbols, "num": num}
174
+ if start_datetime:
175
+ data["start_datetime"] = start_datetime
176
+ if end_datetime:
177
+ data["end_datetime"] = end_datetime
178
+
179
+ response = self._post("/v2/search/filings", json=data)
180
+ return response.get("docs", [])
181
+
182
+ def conference_calls(
183
+ self,
184
+ query: str,
185
+ symbols: list[str],
186
+ *,
187
+ num: int = 10,
188
+ start_datetime: str | None = None,
189
+ end_datetime: str | None = None,
190
+ fiscal_year: str | None = None,
191
+ fiscal_quarter: str | None = None,
192
+ ) -> list[dict[str, Any]]:
193
+ """
194
+ Search earnings call transcripts and slides
195
+
196
+ Args:
197
+ query: Search query string
198
+ symbols: Stock symbols to filter by (required)
199
+ num: Number of results to return
200
+ start_datetime: Start datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
201
+ end_datetime: End datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
202
+ fiscal_year: Fiscal year filter (e.g., '2025', '2026')
203
+ fiscal_quarter: Fiscal quarter filter (e.g., 'Q1', 'Q2', 'Q3', 'Q4')
204
+
205
+ Returns:
206
+ List of conference call documents
207
+ """
208
+ data: dict[str, Any] = {"query": query, "symbols": symbols, "num": num}
209
+ if start_datetime:
210
+ data["start_datetime"] = start_datetime
211
+ if end_datetime:
212
+ data["end_datetime"] = end_datetime
213
+ if fiscal_year:
214
+ data["fiscal_year"] = fiscal_year
215
+ if fiscal_quarter:
216
+ data["fiscal_quarter"] = fiscal_quarter
217
+
218
+ response = self._post("/v2/search/conference-calls", json=data)
219
+ return response.get("docs", [])
220
+
221
+ def earnings_pack(
222
+ self,
223
+ query: str,
224
+ symbols: list[str],
225
+ *,
226
+ num: int = 10,
227
+ start_datetime: str | None = None,
228
+ end_datetime: str | None = None,
229
+ fiscal_year: str | None = None,
230
+ fiscal_quarter: str | None = None,
231
+ ) -> list[dict[str, Any]]:
232
+ """
233
+ Search earnings financial reports
234
+
235
+ Args:
236
+ query: Search query string
237
+ symbols: Stock symbols to filter by (required)
238
+ num: Number of results to return
239
+ start_datetime: Start datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
240
+ end_datetime: End datetime filter (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)
241
+ fiscal_year: Fiscal year filter (e.g., '2025', '2026')
242
+ fiscal_quarter: Fiscal quarter filter (e.g., 'Q1', 'Q2', 'Q3', 'Q4')
243
+
244
+ Returns:
245
+ List of earnings pack documents
246
+ """
247
+ data: dict[str, Any] = {"query": query, "symbols": symbols, "num": num}
248
+ if start_datetime:
249
+ data["start_datetime"] = start_datetime
250
+ if end_datetime:
251
+ data["end_datetime"] = end_datetime
252
+ if fiscal_year:
253
+ data["fiscal_year"] = fiscal_year
254
+ if fiscal_quarter:
255
+ data["fiscal_quarter"] = fiscal_quarter
256
+
257
+ response = self._post("/v2/search/earnings-pack", json=data)
258
+ return response.get("docs", [])
259
+
260
+ def minutes(
261
+ self,
262
+ query: str,
263
+ *,
264
+ num: int = 10,
265
+ symbols: list[str] | None = None,
266
+ start_datetime: str | None = None,
267
+ end_datetime: str | None = None,
268
+ ) -> list[dict[str, Any]]:
269
+ """
270
+ Search conference calls and IR (Investor Relations) meetings
271
+
272
+ Args:
273
+ query: Search query string
274
+ num: Number of results to return
275
+ symbols: Filter by stock symbols
276
+ start_datetime: Start datetime filter
277
+ end_datetime: End datetime filter
278
+
279
+ Returns:
280
+ List of minutes documents
281
+ """
282
+ data: dict[str, Any] = {"query": query, "num": num}
283
+ if symbols:
284
+ data["symbols"] = symbols
285
+ if start_datetime:
286
+ data["start_datetime"] = start_datetime
287
+ if end_datetime:
288
+ data["end_datetime"] = end_datetime
289
+
290
+ response = self._post("/v2/search/minutes", json=data)
291
+ return response.get("docs", [])
292
+
293
+ def socials(
294
+ self,
295
+ query: str,
296
+ *,
297
+ num: int = 10,
298
+ symbols: list[str] | None = None,
299
+ channel_ids: list[str] | None = None,
300
+ start_datetime: str | None = None,
301
+ end_datetime: str | None = None,
302
+ ) -> list[dict[str, Any]]:
303
+ """
304
+ Search social media content
305
+
306
+ Args:
307
+ query: Search query string
308
+ num: Number of results to return
309
+ symbols: Filter by stock symbols
310
+ channel_ids: Filter by channel IDs
311
+ start_datetime: Start datetime filter
312
+ end_datetime: End datetime filter
313
+
314
+ Returns:
315
+ List of social media documents
316
+ """
317
+ data: dict[str, Any] = {"query": query, "num": num}
318
+ if symbols:
319
+ data["symbols"] = symbols
320
+ if channel_ids:
321
+ data["channel_ids"] = channel_ids
322
+ if start_datetime:
323
+ data["start_datetime"] = start_datetime
324
+ if end_datetime:
325
+ data["end_datetime"] = end_datetime
326
+
327
+ response = self._post("/v2/search/socials", json=data)
328
+ return response.get("docs", [])
329
+
330
+ def webpages(
331
+ self,
332
+ query: str,
333
+ *,
334
+ num: int = 10,
335
+ start_datetime: str | None = None,
336
+ end_datetime: str | None = None,
337
+ ) -> list[dict[str, Any]]:
338
+ """
339
+ Search webpage content
340
+
341
+ Args:
342
+ query: Search query string
343
+ num: Number of results to return
344
+ start_datetime: Start datetime filter
345
+ end_datetime: End datetime filter
346
+
347
+ Returns:
348
+ List of webpage content
349
+ """
350
+ data: dict[str, Any] = {"query": query, "num": num}
351
+ if start_datetime:
352
+ data["start_datetime"] = start_datetime
353
+ if end_datetime:
354
+ data["end_datetime"] = end_datetime
355
+
356
+ response = self._post("/v2/search/webpages", json=data)
357
+ return response.get("docs", [])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reportify-sdk
3
- Version: 0.2.9
3
+ Version: 0.2.10
4
4
  Summary: Python SDK for Reportify API - Financial data and document search
5
5
  Author-email: Reportify <support@reportify.cn>
6
6
  License-Expression: MIT
@@ -1,18 +1,19 @@
1
- reportify_sdk/__init__.py,sha256=MZT6iafbhygOeqejK_rh0mBoXizw6f21J7M4ghlUj28,662
1
+ reportify_sdk/__init__.py,sha256=DLgFU-rq_NX0Xl420Qyt-gJehRnNhPsLaAwK3trr4Ms,663
2
2
  reportify_sdk/agent.py,sha256=y1iP4Jq7-ESMxeCWB_vxkAvwCjUCWT8K-ZSeJswU6nQ,6358
3
3
  reportify_sdk/channels.py,sha256=VbBCispCiP2Mzqn5lmBWVNWog4ElVni46mK2zg7KKzg,3518
4
4
  reportify_sdk/chat.py,sha256=w2KE8kO9PgL1uFSpBGI-8oD6pVhr0NF5ZAS_YoaFU5I,3551
5
- reportify_sdk/client.py,sha256=6PFJj_2kVQxQ1YXCz-cAmFijAn-9RrYd8WFFzJJj27M,18745
5
+ reportify_sdk/client.py,sha256=1pePkYX9vt0iG6z7yYxiXAwxbEZSqvyFdbFJBDzUM6E,8207
6
6
  reportify_sdk/concepts.py,sha256=XlHPuuZacFFUccMthyeb5R2OTayFYxXgIODKNfJLa_c,1891
7
7
  reportify_sdk/docs.py,sha256=6VylFci91gdV89tVKnaUgLYRF3suGEFTkO85VwK_ip4,16570
8
8
  reportify_sdk/exceptions.py,sha256=r2_C_kTh6tCrQnfA3UozSqMMA-2OBnoP3pGpgYeqcdU,1049
9
9
  reportify_sdk/kb.py,sha256=3e82_56hvnGQ2fI404g3DAem9javPY7OpE5B8goYOB8,2895
10
10
  reportify_sdk/quant.py,sha256=9rWKWo2UlG3GfsQC-jpEgXUl25ojEabpvOGISyGMamM,15110
11
+ reportify_sdk/search.py,sha256=QChN1hDP0q_fEaDm_Sb8SnKwHqTMg6yzpPsFHHWZQVw,11413
11
12
  reportify_sdk/stock.py,sha256=DkZkLXAPVK4AbkjWRRe6OdjXjUyJD1JZz0hEXMjtT_Y,21528
12
13
  reportify_sdk/timeline.py,sha256=7ZbF5-0eGoF_N5h9swEyYgZSaMb54PMwLDXlaqFS4ns,5396
13
14
  reportify_sdk/user.py,sha256=lsdhvaovllEwYiz4fhhSwl8PMX8tKswzABAvZbB0iJw,1261
14
- reportify_sdk-0.2.9.dist-info/licenses/LICENSE,sha256=zBUq4DL4lE-fZU_PMkr0gnxkYS1LhdRHFw8_LmCb-ek,1066
15
- reportify_sdk-0.2.9.dist-info/METADATA,sha256=cGo0IJ7EViR9IUG71fqyzpicvklzGH9tgYgyB7VwZfU,4311
16
- reportify_sdk-0.2.9.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
17
- reportify_sdk-0.2.9.dist-info/top_level.txt,sha256=tc_dzCSWIDsNbHSi-FlyEEX8xwinhN9gl-CwyLRE4B0,14
18
- reportify_sdk-0.2.9.dist-info/RECORD,,
15
+ reportify_sdk-0.2.10.dist-info/licenses/LICENSE,sha256=zBUq4DL4lE-fZU_PMkr0gnxkYS1LhdRHFw8_LmCb-ek,1066
16
+ reportify_sdk-0.2.10.dist-info/METADATA,sha256=7zKml8JYyFUsjaeiasHMmWp-RDiZnFs17LztA_GRogs,4312
17
+ reportify_sdk-0.2.10.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
18
+ reportify_sdk-0.2.10.dist-info/top_level.txt,sha256=tc_dzCSWIDsNbHSi-FlyEEX8xwinhN9gl-CwyLRE4B0,14
19
+ reportify_sdk-0.2.10.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.10.1)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5