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.
Files changed (37) hide show
  1. getscript-0.14.1/PKG-INFO +194 -0
  2. getscript-0.14.1/README.md +166 -0
  3. {getscript-0.12.0 → getscript-0.14.1}/getscript/__init__.py +1 -1
  4. {getscript-0.12.0 → getscript-0.14.1}/getscript/cli.py +181 -83
  5. {getscript-0.12.0 → getscript-0.14.1}/getscript/completions.py +10 -14
  6. {getscript-0.12.0 → getscript-0.14.1}/getscript/config.py +0 -6
  7. {getscript-0.12.0 → getscript-0.14.1}/getscript/detect.py +4 -23
  8. {getscript-0.12.0 → getscript-0.14.1}/getscript/search.py +1 -38
  9. {getscript-0.12.0 → getscript-0.14.1}/getscript/upload.py +1 -19
  10. getscript-0.14.1/getscript.egg-info/PKG-INFO +194 -0
  11. {getscript-0.12.0 → getscript-0.14.1}/getscript.egg-info/SOURCES.txt +1 -3
  12. getscript-0.14.1/getscript.egg-info/requires.txt +1 -0
  13. {getscript-0.12.0 → getscript-0.14.1}/pyproject.toml +3 -5
  14. {getscript-0.12.0 → getscript-0.14.1}/tests/test_detect.py +6 -32
  15. {getscript-0.12.0 → getscript-0.14.1}/tests/test_integration.py +70 -10
  16. {getscript-0.12.0 → getscript-0.14.1}/tests/test_output.py +9 -9
  17. getscript-0.14.1/tests/test_search.py +65 -0
  18. {getscript-0.12.0 → getscript-0.14.1}/tests/test_upload.py +16 -65
  19. getscript-0.12.0/PKG-INFO +0 -125
  20. getscript-0.12.0/README.md +0 -95
  21. getscript-0.12.0/getscript/youtube.py +0 -58
  22. getscript-0.12.0/getscript.egg-info/PKG-INFO +0 -125
  23. getscript-0.12.0/getscript.egg-info/requires.txt +0 -3
  24. getscript-0.12.0/tests/test_search.py +0 -125
  25. getscript-0.12.0/tests/test_youtube.py +0 -109
  26. {getscript-0.12.0 → getscript-0.14.1}/LICENSE +0 -0
  27. {getscript-0.12.0 → getscript-0.14.1}/getscript/apple.py +0 -0
  28. {getscript-0.12.0 → getscript-0.14.1}/getscript/output.py +0 -0
  29. {getscript-0.12.0 → getscript-0.14.1}/getscript/picker.py +0 -0
  30. {getscript-0.12.0 → getscript-0.14.1}/getscript/progress.py +0 -0
  31. {getscript-0.12.0 → getscript-0.14.1}/getscript.egg-info/dependency_links.txt +0 -0
  32. {getscript-0.12.0 → getscript-0.14.1}/getscript.egg-info/entry_points.txt +0 -0
  33. {getscript-0.12.0 → getscript-0.14.1}/getscript.egg-info/top_level.txt +0 -0
  34. {getscript-0.12.0 → getscript-0.14.1}/setup.cfg +0 -0
  35. {getscript-0.12.0 → getscript-0.14.1}/tests/test_apple.py +0 -0
  36. {getscript-0.12.0 → getscript-0.14.1}/tests/test_config.py +0 -0
  37. {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
+ [![PyPI](https://img.shields.io/pypi/v/getscript)](https://pypi.org/project/getscript/)
44
+ [![CI](https://github.com/outerbanks73/cli-tools/actions/workflows/test.yml/badge.svg)](https://github.com/outerbanks73/cli-tools/actions/workflows/test.yml)
45
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
46
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue)](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
+ [![PyPI](https://img.shields.io/pypi/v/getscript)](https://pypi.org/project/getscript/)
16
+ [![CI](https://github.com/outerbanks73/cli-tools/actions/workflows/test.yml/badge.svg)](https://github.com/outerbanks73/cli-tools/actions/workflows/test.yml)
17
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
18
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue)](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.12.0" # fallback for editable installs without metadata
6
+ __version__ = "0.14.1" # fallback for editable installs without metadata