Commit5caa0d31Recorded29 Mar 2026Repositorysigil-youtube

Use shared API client helpers from (sigil http client)

Message

Replace local youtube-api-url, youtube-upload-api-url, and check-youtube-response with build-api-url and make-response-checker from the shared library.

Changed
 src/youtube.sgl | 46 ++++++++++------------------------------------
 1 file changed, 10 insertions(+), 36 deletions(-)
Diff
src/youtube.sglmodified
@@ -111,12 +111,10 @@
111
#{})))
112
113
(define (youtube-api-url client . parts)
114
(apply string-append (youtube-client-base-url client)
115
(map (lambda (p) (string-append "/" p)) parts)))
+114
(apply build-api-url (youtube-client-base-url client) parts))
115
116
(define (youtube-upload-api-url client . parts)
118
(apply string-append (youtube-client-upload-url client)
119
(map (lambda (p) (string-append "/" p)) parts)))
+117
(apply build-api-url (youtube-client-upload-url client) parts))
118
119
120
;;; Append api-key to query params if client has one and no access-token.
@@ -127,38 +125,14 @@
125
(cons (cons "key" key) params)
126
params)))
127
130
;;; Check an HTTP response and return parsed JSON, or raise a
131
;;; YouTube-specific error with quota/auth context.
132
(define (check-youtube-response response)
133
(if (not (http-response? response))
134
(error "YouTube API request failed: no response"))
135
(let ((status (http-response-status response))
136
(body (http-response-body response)))
137
(cond
138
((= status 401)
139
(error (string-append
140
"YouTube API 401 Unauthorized. "
141
"Access token may be expired — refresh and retry. "
142
"Response: " (or body ""))))
143
((= status 403)
144
(error (string-append
145
"YouTube API 403 Forbidden. "
146
"Possible quota exceeded or insufficient permissions. "
147
"Check quota at console.cloud.google.com. "
148
"Response: " (or body ""))))
149
((= status 429)
150
(error (string-append
151
"YouTube API 429 rate limited. "
152
"Respect Retry-After header and retry with backoff. "
153
"Response: " (or body ""))))
154
((>= status 400)
155
(error (string-append
156
"YouTube API error " (number->string status) ": "
157
(or body ""))))
158
(else
159
(if (and body (not (string=? body "")))
160
(json-decode body)
161
#t)))))
+128
;;; Response checker with YouTube-specific quota/auth context.
+129
(define check-youtube-response
+130
(make-response-checker
+131
name: "YouTube API"
+132
handlers: (list
+133
(cons 401 "Access token may be expired — refresh and retry.")
+134
(cons 403 "Possible quota exceeded or insufficient permissions. Check quota at console.cloud.google.com.")
+135
(cons 429 "Respect Retry-After header and retry with backoff."))))
136
137
;;; Authenticated JSON GET request.
138
(define (youtube-get/json client url)