getscript 0.12.0__tar.gz → 0.14.1__tar.gz
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.
- getscript-0.14.1/PKG-INFO +194 -0
- getscript-0.14.1/README.md +166 -0
- {getscript-0.12.0 → getscript-0.14.1}/getscript/__init__.py +1 -1
- {getscript-0.12.0 → getscript-0.14.1}/getscript/cli.py +181 -83
- {getscript-0.12.0 → getscript-0.14.1}/getscript/completions.py +10 -14
- {getscript-0.12.0 → getscript-0.14.1}/getscript/config.py +0 -6
- {getscript-0.12.0 → getscript-0.14.1}/getscript/detect.py +4 -23
- {getscript-0.12.0 → getscript-0.14.1}/getscript/search.py +1 -38
- {getscript-0.12.0 → getscript-0.14.1}/getscript/upload.py +1 -19
- getscript-0.14.1/getscript.egg-info/PKG-INFO +194 -0
- {getscript-0.12.0 → getscript-0.14.1}/getscript.egg-info/SOURCES.txt +1 -3
- getscript-0.14.1/getscript.egg-info/requires.txt +1 -0
- {getscript-0.12.0 → getscript-0.14.1}/pyproject.toml +3 -5
- {getscript-0.12.0 → getscript-0.14.1}/tests/test_detect.py +6 -32
- {getscript-0.12.0 → getscript-0.14.1}/tests/test_integration.py +70 -10
- {getscript-0.12.0 → getscript-0.14.1}/tests/test_output.py +9 -9
- getscript-0.14.1/tests/test_search.py +65 -0
- {getscript-0.12.0 → getscript-0.14.1}/tests/test_upload.py +16 -65
- getscript-0.12.0/PKG-INFO +0 -125
- getscript-0.12.0/README.md +0 -95
- getscript-0.12.0/getscript/youtube.py +0 -58
- getscript-0.12.0/getscript.egg-info/PKG-INFO +0 -125
- getscript-0.12.0/getscript.egg-info/requires.txt +0 -3
- getscript-0.12.0/tests/test_search.py +0 -125
- getscript-0.12.0/tests/test_youtube.py +0 -109
- {getscript-0.12.0 → getscript-0.14.1}/LICENSE +0 -0
- {getscript-0.12.0 → getscript-0.14.1}/getscript/apple.py +0 -0
- {getscript-0.12.0 → getscript-0.14.1}/getscript/output.py +0 -0
- {getscript-0.12.0 → getscript-0.14.1}/getscript/picker.py +0 -0
- {getscript-0.12.0 → getscript-0.14.1}/getscript/progress.py +0 -0
- {getscript-0.12.0 → getscript-0.14.1}/getscript.egg-info/dependency_links.txt +0 -0
- {getscript-0.12.0 → getscript-0.14.1}/getscript.egg-info/entry_points.txt +0 -0
- {getscript-0.12.0 → getscript-0.14.1}/getscript.egg-info/top_level.txt +0 -0
- {getscript-0.12.0 → getscript-0.14.1}/setup.cfg +0 -0
- {getscript-0.12.0 → getscript-0.14.1}/tests/test_apple.py +0 -0
- {getscript-0.12.0 → getscript-0.14.1}/tests/test_config.py +0 -0
- {getscript-0.12.0 → getscript-0.14.1}/tests/test_picker.py +0 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: getscript
|
|
3
|
+
Version: 0.14.1
|
|
4
|
+
Summary: Fast, Unix-friendly CLI for fetching transcripts from Apple Podcasts
|
|
5
|
+
Author: Voxly
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/outerbanks73/cli-tools
|
|
8
|
+
Project-URL: Documentation, https://voxlytranscribes.com/docs/getscript
|
|
9
|
+
Project-URL: Repository, https://github.com/outerbanks73/cli-tools
|
|
10
|
+
Project-URL: Issues, https://github.com/outerbanks73/cli-tools/issues
|
|
11
|
+
Keywords: transcript,podcast,apple-podcasts,cli
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Multimedia :: Sound/Audio
|
|
22
|
+
Classifier: Topic :: Utilities
|
|
23
|
+
Requires-Python: >=3.10
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: defusedxml>=0.7.1
|
|
27
|
+
Dynamic: license-file
|
|
28
|
+
|
|
29
|
+
# getscript
|
|
30
|
+
|
|
31
|
+
A fast, Unix-friendly CLI for fetching transcripts from Apple Podcasts. You don't need to transcribe much of anything nowadays
|
|
32
|
+
because Apple is transcribing everything for us. 'getscript' lets you use the transcripts in a more human / text friendly manner.
|
|
33
|
+
The idea behind getscript is to put the transcripts to use in a meaningful way.
|
|
34
|
+
|
|
35
|
+
For example - let's say you're curious about AI Slop as a podcast topic:
|
|
36
|
+
|
|
37
|
+
$ getscript --search "AI Slop" --list
|
|
38
|
+
<removing list of 10 podcasts and their podcast id's>
|
|
39
|
+
$ getscript 1000730374732 | claude -p "Summarize the top 5 Points"
|
|
40
|
+
|
|
41
|
+
Of course you can also export to TTML, JSON, markdown and run from cron if you want to schedule things.
|
|
42
|
+
|
|
43
|
+
[](https://pypi.org/project/getscript/)
|
|
44
|
+
[](https://github.com/outerbanks73/cli-tools/actions/workflows/test.yml)
|
|
45
|
+
[](LICENSE)
|
|
46
|
+
[](https://www.python.org)
|
|
47
|
+
|
|
48
|
+
## Install
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
pip install getscript
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Or via Homebrew:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
brew install outerbanks73/tap/getscript
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Requires Python 3.10+. Apple Podcasts transcripts require macOS 15.5+ with Xcode CLI tools.
|
|
61
|
+
|
|
62
|
+
## Quick Start
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# Fetch from an episode URL
|
|
66
|
+
getscript "https://podcasts.apple.com/us/podcast/the-daily/id1200361736?i=1000753754819"
|
|
67
|
+
|
|
68
|
+
# Fetch from a bare episode ID
|
|
69
|
+
getscript 1000753754819
|
|
70
|
+
|
|
71
|
+
# Raw TTML XML output
|
|
72
|
+
getscript 1000753754819 --ttml
|
|
73
|
+
|
|
74
|
+
# Search Apple Podcasts interactively (requires fzf)
|
|
75
|
+
getscript --search "artificial intelligence"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Output Formats
|
|
79
|
+
|
|
80
|
+
Output formats are mutually exclusive (`--json`, `--ttml`, `--markdown`). The `--timestamps` flag can be combined with any format.
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# JSON piped to jq
|
|
84
|
+
getscript EPISODE_ID --json | jq '.segments[].text'
|
|
85
|
+
|
|
86
|
+
# Markdown with timestamps
|
|
87
|
+
getscript EPISODE_ID --markdown --timestamps > notes.md
|
|
88
|
+
|
|
89
|
+
# Write to file
|
|
90
|
+
getscript EPISODE_ID -o transcript.txt
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Search
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# Search Apple Podcasts (requires fzf)
|
|
97
|
+
getscript --search "climate change"
|
|
98
|
+
|
|
99
|
+
# List results without fzf
|
|
100
|
+
getscript --search "topic" --list --limit 20
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Stdin & Batch Processing
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Read episode ID from stdin
|
|
107
|
+
echo "1000753754819" | getscript -
|
|
108
|
+
|
|
109
|
+
# Batch process a list of IDs
|
|
110
|
+
cat ids.txt | xargs -n1 getscript --no-upload --quiet
|
|
111
|
+
|
|
112
|
+
# Disable upload via environment variable
|
|
113
|
+
GETSCRIPT_UPLOAD=0 getscript EPISODE_ID
|
|
114
|
+
|
|
115
|
+
# Silent file output for scripting
|
|
116
|
+
getscript EPISODE_ID --quiet --no-upload -o out.txt
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Shared Transcript Library
|
|
120
|
+
|
|
121
|
+
Fetched transcripts are automatically submitted to [voxlytranscribes.com](https://voxlytranscribes.com) for indexing and enrichment. To disable:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
getscript EPISODE_ID --no-upload
|
|
125
|
+
GETSCRIPT_UPLOAD=0 getscript EPISODE_ID
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Shell Completions
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
getscript --completions bash >> ~/.bashrc
|
|
132
|
+
getscript --completions zsh >> ~/.zshrc
|
|
133
|
+
getscript --completions fish > ~/.config/fish/completions/getscript.fish
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Configuration
|
|
137
|
+
|
|
138
|
+
Config file: `~/.config/getscript/config.json`
|
|
139
|
+
|
|
140
|
+
| Key | Type | Default | Description |
|
|
141
|
+
|-----|------|---------|-------------|
|
|
142
|
+
| `output_format` | string | `text` | Default format: `text`, `json`, `markdown`, `ttml` |
|
|
143
|
+
| `timestamps` | bool | `false` | Include timestamps in text output |
|
|
144
|
+
| `search_limit` | int | `10` | Number of search results |
|
|
145
|
+
| `no_upload` | bool | `false` | Disable shared library submissions |
|
|
146
|
+
| `quiet` | bool | `false` | Suppress progress and upload status messages |
|
|
147
|
+
|
|
148
|
+
Environment variables:
|
|
149
|
+
|
|
150
|
+
| Variable | Description |
|
|
151
|
+
|----------|-------------|
|
|
152
|
+
| `GETSCRIPT_UPLOAD` | Set to `0` to disable submissions |
|
|
153
|
+
| `NO_COLOR` | Disable colored output |
|
|
154
|
+
|
|
155
|
+
Precedence: config file < environment variables < CLI flags.
|
|
156
|
+
|
|
157
|
+
See [examples/config.example.md](examples/config.example.md) for a full annotated reference.
|
|
158
|
+
|
|
159
|
+
## How It Works
|
|
160
|
+
|
|
161
|
+
Compiles a small Obj-C helper that calls Apple's private AMSMescal framework (FairPlay DRM) to generate a bearer token. That token authenticates requests to the AMP API, which returns TTML transcripts. The token is cached at `~/.cache/getscript/apple_token` for 30 days. This is the only open-source tool that can fetch Apple Podcasts transcripts programmatically.
|
|
162
|
+
|
|
163
|
+
## Shared Transcript Library
|
|
164
|
+
|
|
165
|
+
Every fetch contributes to the shared library at [voxlytranscribes.com](https://voxlytranscribes.com). Submissions go through a quarantine pipeline: server-side re-fetch, content hash verification, and provenance tracking before promotion to the canonical library. See the [technical docs](https://voxlytranscribes.com/docs/getscript) for details.
|
|
166
|
+
|
|
167
|
+
## Exit Codes
|
|
168
|
+
|
|
169
|
+
| Code | Meaning |
|
|
170
|
+
|------|---------|
|
|
171
|
+
| `0` | Success |
|
|
172
|
+
| `1` | Runtime error (network, auth, missing transcript) |
|
|
173
|
+
| `2` | Usage error (bad arguments, unrecognized URL) |
|
|
174
|
+
| `130` | Interrupted (Ctrl-C) |
|
|
175
|
+
|
|
176
|
+
## Testing
|
|
177
|
+
|
|
178
|
+
87 tests across 9 modules. CI matrix: Python 3.10–3.13 on Ubuntu and macOS.
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
pytest -v
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Contributing
|
|
185
|
+
|
|
186
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
187
|
+
|
|
188
|
+
## Changelog
|
|
189
|
+
|
|
190
|
+
See [CHANGELOG.md](CHANGELOG.md).
|
|
191
|
+
|
|
192
|
+
## License
|
|
193
|
+
|
|
194
|
+
MIT
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# getscript
|
|
2
|
+
|
|
3
|
+
A fast, Unix-friendly CLI for fetching transcripts from Apple Podcasts. You don't need to transcribe much of anything nowadays
|
|
4
|
+
because Apple is transcribing everything for us. 'getscript' lets you use the transcripts in a more human / text friendly manner.
|
|
5
|
+
The idea behind getscript is to put the transcripts to use in a meaningful way.
|
|
6
|
+
|
|
7
|
+
For example - let's say you're curious about AI Slop as a podcast topic:
|
|
8
|
+
|
|
9
|
+
$ getscript --search "AI Slop" --list
|
|
10
|
+
<removing list of 10 podcasts and their podcast id's>
|
|
11
|
+
$ getscript 1000730374732 | claude -p "Summarize the top 5 Points"
|
|
12
|
+
|
|
13
|
+
Of course you can also export to TTML, JSON, markdown and run from cron if you want to schedule things.
|
|
14
|
+
|
|
15
|
+
[](https://pypi.org/project/getscript/)
|
|
16
|
+
[](https://github.com/outerbanks73/cli-tools/actions/workflows/test.yml)
|
|
17
|
+
[](LICENSE)
|
|
18
|
+
[](https://www.python.org)
|
|
19
|
+
|
|
20
|
+
## Install
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
pip install getscript
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Or via Homebrew:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
brew install outerbanks73/tap/getscript
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Requires Python 3.10+. Apple Podcasts transcripts require macOS 15.5+ with Xcode CLI tools.
|
|
33
|
+
|
|
34
|
+
## Quick Start
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# Fetch from an episode URL
|
|
38
|
+
getscript "https://podcasts.apple.com/us/podcast/the-daily/id1200361736?i=1000753754819"
|
|
39
|
+
|
|
40
|
+
# Fetch from a bare episode ID
|
|
41
|
+
getscript 1000753754819
|
|
42
|
+
|
|
43
|
+
# Raw TTML XML output
|
|
44
|
+
getscript 1000753754819 --ttml
|
|
45
|
+
|
|
46
|
+
# Search Apple Podcasts interactively (requires fzf)
|
|
47
|
+
getscript --search "artificial intelligence"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Output Formats
|
|
51
|
+
|
|
52
|
+
Output formats are mutually exclusive (`--json`, `--ttml`, `--markdown`). The `--timestamps` flag can be combined with any format.
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# JSON piped to jq
|
|
56
|
+
getscript EPISODE_ID --json | jq '.segments[].text'
|
|
57
|
+
|
|
58
|
+
# Markdown with timestamps
|
|
59
|
+
getscript EPISODE_ID --markdown --timestamps > notes.md
|
|
60
|
+
|
|
61
|
+
# Write to file
|
|
62
|
+
getscript EPISODE_ID -o transcript.txt
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Search
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# Search Apple Podcasts (requires fzf)
|
|
69
|
+
getscript --search "climate change"
|
|
70
|
+
|
|
71
|
+
# List results without fzf
|
|
72
|
+
getscript --search "topic" --list --limit 20
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Stdin & Batch Processing
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# Read episode ID from stdin
|
|
79
|
+
echo "1000753754819" | getscript -
|
|
80
|
+
|
|
81
|
+
# Batch process a list of IDs
|
|
82
|
+
cat ids.txt | xargs -n1 getscript --no-upload --quiet
|
|
83
|
+
|
|
84
|
+
# Disable upload via environment variable
|
|
85
|
+
GETSCRIPT_UPLOAD=0 getscript EPISODE_ID
|
|
86
|
+
|
|
87
|
+
# Silent file output for scripting
|
|
88
|
+
getscript EPISODE_ID --quiet --no-upload -o out.txt
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Shared Transcript Library
|
|
92
|
+
|
|
93
|
+
Fetched transcripts are automatically submitted to [voxlytranscribes.com](https://voxlytranscribes.com) for indexing and enrichment. To disable:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
getscript EPISODE_ID --no-upload
|
|
97
|
+
GETSCRIPT_UPLOAD=0 getscript EPISODE_ID
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Shell Completions
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
getscript --completions bash >> ~/.bashrc
|
|
104
|
+
getscript --completions zsh >> ~/.zshrc
|
|
105
|
+
getscript --completions fish > ~/.config/fish/completions/getscript.fish
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Configuration
|
|
109
|
+
|
|
110
|
+
Config file: `~/.config/getscript/config.json`
|
|
111
|
+
|
|
112
|
+
| Key | Type | Default | Description |
|
|
113
|
+
|-----|------|---------|-------------|
|
|
114
|
+
| `output_format` | string | `text` | Default format: `text`, `json`, `markdown`, `ttml` |
|
|
115
|
+
| `timestamps` | bool | `false` | Include timestamps in text output |
|
|
116
|
+
| `search_limit` | int | `10` | Number of search results |
|
|
117
|
+
| `no_upload` | bool | `false` | Disable shared library submissions |
|
|
118
|
+
| `quiet` | bool | `false` | Suppress progress and upload status messages |
|
|
119
|
+
|
|
120
|
+
Environment variables:
|
|
121
|
+
|
|
122
|
+
| Variable | Description |
|
|
123
|
+
|----------|-------------|
|
|
124
|
+
| `GETSCRIPT_UPLOAD` | Set to `0` to disable submissions |
|
|
125
|
+
| `NO_COLOR` | Disable colored output |
|
|
126
|
+
|
|
127
|
+
Precedence: config file < environment variables < CLI flags.
|
|
128
|
+
|
|
129
|
+
See [examples/config.example.md](examples/config.example.md) for a full annotated reference.
|
|
130
|
+
|
|
131
|
+
## How It Works
|
|
132
|
+
|
|
133
|
+
Compiles a small Obj-C helper that calls Apple's private AMSMescal framework (FairPlay DRM) to generate a bearer token. That token authenticates requests to the AMP API, which returns TTML transcripts. The token is cached at `~/.cache/getscript/apple_token` for 30 days. This is the only open-source tool that can fetch Apple Podcasts transcripts programmatically.
|
|
134
|
+
|
|
135
|
+
## Shared Transcript Library
|
|
136
|
+
|
|
137
|
+
Every fetch contributes to the shared library at [voxlytranscribes.com](https://voxlytranscribes.com). Submissions go through a quarantine pipeline: server-side re-fetch, content hash verification, and provenance tracking before promotion to the canonical library. See the [technical docs](https://voxlytranscribes.com/docs/getscript) for details.
|
|
138
|
+
|
|
139
|
+
## Exit Codes
|
|
140
|
+
|
|
141
|
+
| Code | Meaning |
|
|
142
|
+
|------|---------|
|
|
143
|
+
| `0` | Success |
|
|
144
|
+
| `1` | Runtime error (network, auth, missing transcript) |
|
|
145
|
+
| `2` | Usage error (bad arguments, unrecognized URL) |
|
|
146
|
+
| `130` | Interrupted (Ctrl-C) |
|
|
147
|
+
|
|
148
|
+
## Testing
|
|
149
|
+
|
|
150
|
+
87 tests across 9 modules. CI matrix: Python 3.10–3.13 on Ubuntu and macOS.
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
pytest -v
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Contributing
|
|
157
|
+
|
|
158
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
159
|
+
|
|
160
|
+
## Changelog
|
|
161
|
+
|
|
162
|
+
See [CHANGELOG.md](CHANGELOG.md).
|
|
163
|
+
|
|
164
|
+
## License
|
|
165
|
+
|
|
166
|
+
MIT
|
|
@@ -3,4 +3,4 @@ from importlib.metadata import version, PackageNotFoundError
|
|
|
3
3
|
try:
|
|
4
4
|
__version__ = version("getscript")
|
|
5
5
|
except PackageNotFoundError:
|
|
6
|
-
__version__ = "0.
|
|
6
|
+
__version__ = "0.14.1" # fallback for editable installs without metadata
|