1
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Sources API Reference
2
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
::: video_processor.sources.base
4
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
5
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
6
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
7
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Overview
8
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
9
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The sources module provides a unified interface for fetching content from cloud services, local applications, and the web. All sources implement the `BaseSource` abstract class, providing consistent `authenticate()`, `list_videos()`, and `download()` methods.
10
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
11
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Sources are lazy-loaded to avoid pulling in optional dependencies at import time. You can import any source directly from `video_processor.sources` and the correct module will be loaded on demand.
12
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
13
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
14
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
15
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## BaseSource (ABC)
16
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
17
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
18
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.sources import BaseSource
19
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
20
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
21
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Abstract base class that all source integrations implement. Defines the standard three-step workflow: authenticate, list, download.
22
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
23
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### authenticate()
24
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
25
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
26
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@abstractmethod
27
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def authenticate(self) -> bool
28
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
29
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
30
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Authenticate with the cloud provider or service. Uses the auth strategy defined for the source (OAuth, API key, local access, etc.).
31
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
32
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Returns:** `bool` -- `True` on successful authentication, `False` on failure.
33
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
34
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### list_videos()
35
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
36
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
37
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@abstractmethod
38
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def list_videos(
39
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
40
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
folder_id: Optional[str] = None,
41
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
folder_path: Optional[str] = None,
42
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
patterns: Optional[List[str]] = None,
43
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> List[SourceFile]
44
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
45
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
46
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
List available video files (or other content, depending on the source).
47
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
48
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Parameters:**
49
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
50
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Parameter | Type | Default | Description |
51
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|---|
52
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `folder_id` | `Optional[str]` | `None` | Provider-specific folder/container identifier |
53
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `folder_path` | `Optional[str]` | `None` | Path within the source (e.g., folder name) |
54
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `patterns` | `Optional[List[str]]` | `None` | File name glob patterns to filter results |
55
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
56
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Returns:** `List[SourceFile]` -- available files matching the criteria.
57
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
58
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### download()
59
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
60
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
61
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@abstractmethod
62
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def download(
63
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
64
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
file: SourceFile,
65
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
destination: Path,
66
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> Path
67
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
68
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
69
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Download a single file to a local path.
70
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
71
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Parameters:**
72
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
73
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Parameter | Type | Description |
74
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|
75
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `file` | `SourceFile` | File descriptor from `list_videos()` |
76
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `destination` | `Path` | Local destination path |
77
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
78
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Returns:** `Path` -- the local path where the file was saved.
79
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
80
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### download_all()
81
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
82
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
83
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def download_all(
84
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
85
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
files: List[SourceFile],
86
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
destination_dir: Path,
87
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> List[Path]
88
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
89
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
90
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Download multiple files to a directory, preserving subfolder structure from `SourceFile.path`. This is a concrete method provided by the base class.
91
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
92
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Parameters:**
93
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
94
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Parameter | Type | Description |
95
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|
96
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `files` | `List[SourceFile]` | Files to download |
97
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `destination_dir` | `Path` | Base directory for downloads (created if needed) |
98
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
99
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Returns:** `List[Path]` -- local paths of successfully downloaded files. Failed downloads are logged and skipped.
100
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
101
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
102
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
103
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## SourceFile
104
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
105
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
106
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.sources import SourceFile
107
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
108
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
109
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Pydantic model describing a file available in a cloud source.
110
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
111
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Field | Type | Default | Description |
112
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|---|
113
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `name` | `str` | *required* | File name |
114
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `id` | `str` | *required* | Provider-specific file identifier |
115
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `size_bytes` | `Optional[int]` | `None` | File size in bytes |
116
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `mime_type` | `Optional[str]` | `None` | MIME type (e.g., `"video/mp4"`) |
117
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `modified_at` | `Optional[str]` | `None` | Last modified timestamp |
118
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `path` | `Optional[str]` | `None` | Path within the source folder (used for subfolder structure in `download_all`) |
119
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
120
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```json
121
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
122
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"name": "sprint-review-2026-03-01.mp4",
123
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"id": "abc123def456",
124
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"size_bytes": 524288000,
125
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"mime_type": "video/mp4",
126
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"modified_at": "2026-03-01T14:30:00Z",
127
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"path": "recordings/march/sprint-review-2026-03-01.mp4"
128
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
129
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
130
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
131
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
132
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
133
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Lazy Loading Pattern
134
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
135
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
All sources are lazy-loaded via `__getattr__` in the package `__init__.py`. This means importing `video_processor.sources` does not pull in any external dependencies (e.g., `google-auth`, `msal`, `notion-client`). The actual module is loaded only when you access the class.
136
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
137
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
138
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# This import is instant -- no dependencies loaded
139
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.sources import ZoomSource
140
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
141
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# The zoom_source module (and its dependencies) are loaded here
142
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
source = ZoomSource()
143
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
144
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
145
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
146
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
147
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Available Sources
148
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
149
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Cloud Recordings
150
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
151
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Sources for fetching recorded meetings from video conferencing platforms.
152
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
153
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Source | Class | Auth Method | Description |
154
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|---|
155
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Zoom | `ZoomSource` | OAuth / Server-to-Server | List and download Zoom cloud recordings |
156
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Google Meet | `MeetRecordingSource` | OAuth (Google) | List and download Google Meet recordings from Drive |
157
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Microsoft Teams | `TeamsRecordingSource` | OAuth (Microsoft) | List and download Teams meeting recordings |
158
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
159
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Cloud Storage and Workspace
160
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
161
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Sources for accessing files stored in cloud platforms.
162
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
163
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Source | Class | Auth Method | Description |
164
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|---|
165
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Google Drive | `GoogleDriveSource` | OAuth (Google) | Files from Google Drive |
166
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Google Workspace | `GWSSource` | OAuth (Google) | Google Docs, Sheets, Slides |
167
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Microsoft 365 | `M365Source` | OAuth (Microsoft) | OneDrive, SharePoint files |
168
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Notion | `NotionSource` | OAuth / API key | Notion pages and databases |
169
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| GitHub | `GitHubSource` | OAuth / API token | Repository files, issues, discussions |
170
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Dropbox | `DropboxSource` | OAuth / access token | *(via auth config)* |
171
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
172
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Notes Applications
173
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
174
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Sources for local and cloud-based note-taking apps.
175
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
176
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Source | Class | Auth Method | Description |
177
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|---|
178
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Apple Notes | `AppleNotesSource` | Local (macOS) | Notes from Apple Notes.app |
179
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Obsidian | `ObsidianSource` | Local filesystem | Markdown files from Obsidian vaults |
180
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Logseq | `LogseqSource` | Local filesystem | Pages from Logseq graphs |
181
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| OneNote | `OneNoteSource` | OAuth (Microsoft) | Microsoft OneNote notebooks |
182
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Google Keep | `GoogleKeepSource` | OAuth (Google) | Google Keep notes |
183
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
184
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Web and Content
185
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
186
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Sources for fetching content from the web.
187
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
188
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Source | Class | Auth Method | Description |
189
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|---|
190
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| YouTube | `YouTubeSource` | API key / OAuth | YouTube video metadata and transcripts |
191
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Web | `WebSource` | None | General web page content extraction |
192
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| RSS | `RSSSource` | None | RSS/Atom feed entries |
193
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Podcast | `PodcastSource` | None | Podcast episodes from RSS feeds |
194
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| arXiv | `ArxivSource` | None | Academic papers from arXiv |
195
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Hacker News | `HackerNewsSource` | None | Hacker News posts and comments |
196
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Reddit | `RedditSource` | API credentials | Reddit posts and comments |
197
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Twitter/X | `TwitterSource` | API credentials | Tweets and threads |
198
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
199
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
200
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
201
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Auth Integration
202
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
203
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Most sources use PlanOpticon's unified auth system (see [Auth API](auth.md)). The typical pattern within a source implementation:
204
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
205
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
206
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.auth import get_auth_manager
207
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
208
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
class MySource(BaseSource):
209
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def __init__(self):
210
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self._token = None
211
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
212
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def authenticate(self) -> bool:
213
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
manager = get_auth_manager("my_service")
214
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if manager:
215
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
token = manager.get_token()
216
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if token:
217
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self._token = token
218
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return True
219
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return False
220
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
221
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def list_videos(self, **kwargs) -> list[SourceFile]:
222
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if not self._token:
223
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
raise RuntimeError("Not authenticated. Call authenticate() first.")
224
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Use self._token to call the API
225
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...
226
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
227
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
228
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
229
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
230
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Usage Examples
231
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
232
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Listing and downloading Zoom recordings
233
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
234
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
235
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from pathlib import Path
236
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.sources import ZoomSource
237
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
238
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
source = ZoomSource()
239
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if source.authenticate():
240
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
recordings = source.list_videos()
241
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for rec in recordings:
242
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(f"{rec.name} ({rec.size_bytes} bytes)")
243
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
244
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Download all to a local directory
245
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
paths = source.download_all(recordings, Path("./downloads"))
246
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
247
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
248
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Fetching from multiple sources
249
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
250
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
251
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from pathlib import Path
252
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.sources import GoogleDriveSource, NotionSource
253
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
254
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Google Drive
255
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
gdrive = GoogleDriveSource()
256
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if gdrive.authenticate():
257
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
files = gdrive.list_videos(
258
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
folder_path="Meeting Recordings",
259
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
patterns=["*.mp4", "*.webm"],
260
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
261
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
gdrive.download_all(files, Path("./drive-downloads"))
262
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
263
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Notion
264
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
notion = NotionSource()
265
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if notion.authenticate():
266
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
pages = notion.list_videos() # Lists Notion pages
267
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for page in pages:
268
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(f"Page: {page.name}")
269
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
270
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
271
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### YouTube content
272
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
273
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
274
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.sources import YouTubeSource
275
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
276
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
yt = YouTubeSource()
277
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if yt.authenticate():
278
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
videos = yt.list_videos(folder_path="https://youtube.com/playlist?list=...")
279
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for v in videos:
280
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(f"{v.name} - {v.id}")
281
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
282
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!