PeerTube 동영상 다운로드 스크립트
10468 단어 peertubecommonlispdownload
아마도 다른 Common Lisp 구현에서도 작동하지만 SBCL 2.0.1-5.fc34에서만 테스트했습니다.
;; How to run
;; sbcl --load download-peertube-videos.lisp
(ql:quickload :jonathan)
(ql:quickload :dexador)
(ql:quickload :alexandria)
(ql:quickload :asdf)
(import 'alexandria:assoc-value)
(defparameter *username* "peertube-user-name")
(defparameter *hostname* "peertube.social")
(defparameter *get-videos-url* (format nil "https://~A/api/v1/accounts/~A/videos" *hostname* *username*))
(defparameter *videos-info* (assoc-value (jonathan:parse (dex:get *get-videos-url*)
:as :alist)
"data"
:test 'equal))
(defparameter *total* (assoc-value (jonathan:parse (dex:get (format nil "https://~A/api/v1/accounts/~A/videos" *hostname* *username*))
:as :alist)
"total"
:test 'equal))
(defparameter *count* 5)
(defun get-video-id (video-info)
(assoc-value video-info "id" :test 'equal))
(defun get-video-json (video-id)
(let ((video-info-url (format nil "https://~A/api/v1/videos/~A" *hostname* video-id)))
(dex:get video-info-url)))
(defun download-video (video-details)
(let* ((files (assoc-value video-details "files" :test 'equal))
(download-url (assoc-value (car files) "fileDownloadUrl" :test 'equal))
(cmd (format nil "wget ~A" download-url)))
(format t "CMD: ~A~%" cmd)
(uiop:run-program cmd :output t)))
(defun save-metadata (video-id video-json)
(with-open-file (f (format nil "~A.json" video-id)
:direction :output
:if-exists :supersede
:if-does-not-exist :create)
(write-string video-json f)))
(defun download-video-with-metadata (video-info)
(let* ((video-id (get-video-id video-info))
(video-json (get-video-json video-id))
(video-details (jonathan:parse video-json
:as :alist)))
(save-metadata video-id video-json)
(download-video video-details)))
(let ((i 0))
(loop while (< i *total*)
do
(let* ((url (format nil "https://~A/api/v1/accounts/~A/videos?start=~A&count=~A" *hostname* *username* i *count*))
(videos-json (dex:get url))
(videos-alist (jonathan:parse videos-json :as :alist))
(videos-info (assoc-value videos-alist "data" :test 'equal)))
(format t "*** i = ~A~%" i)
(loop for video-info in videos-info
do
(download-video-with-metadata video-info)))
(setq i (+ i *count*))))
Reference
이 문제에 관하여(PeerTube 동영상 다운로드 스크립트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/veer66/a-script-for-downloading-peertube-videos-31dd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)