Slurping http://foobar.mp3, который перенаправляет на http://fizzbar.mp3 в Clojure
Я пытаюсь программно скачать mp3 файлы из этого RSS-канала. Когда я открываю URL-адрес, такой как: http://menlochurch.podbean.com/mf/feed/5gv2gb/170219_jortberg.mp3 он перенаправляет на URL-адрес, например: http://s62.podbean.com/pb/67f34563539acbe87b9566ecc5738d57/58aeff8e/data4/fs145/948579/uploads/170219_jortberg.mp3
Если я curl
По первому URL он скачивает пустой файл.
Если я curl -L
по первому URL он правильно скачивает файл.
Если я curl
Второй URL-адрес правильно загружает файл.
Если я slurp
Первый URL-адрес в Clojure загружает что-то, похожее на mp3 (большое и без разборчивого текста), но не воспроизводимое и не совпадающее с выводом из curl -L
,
Если я slurp
Второй URL-адрес в Clojure также загружает что-то, похожее на mp3 (большое и без разборчивого текста), но не воспроизводимое и не совпадающее с выводом из curl -L
и совпадает с выводом из предыдущего slurp
,
➜ ~ git:(master) ✗ ls -l *.mp3
-rw-r--r-- 1 adam adam 38038533 Feb 23 08:32 curl-url1.mp3
-rw-r--r-- 1 adam adam 38038533 Feb 23 08:37 curl-url2.mp3
-rw-r--r-- 1 adam adam 0 Feb 23 08:45 curl-without-L.mp3
-rw-r--r-- 1 adam adam 67144297 Feb 23 08:31 slurp-url1.mp3
-rw-r--r-- 1 adam adam 67144297 Feb 23 08:31 slurp-url2.mp3
Как вы можете видеть, что бы я ни глотал, он почти в два раза больше того, что я керлю.
Я не знаю, что с этим делать, я использую slurp
в неподходящем контексте? Любой совет будет принят во внимание!
2 ответа
slurp
для строк, поэтому не будет работать с двоичными данными.
user=> (doc slurp)
-------------------------
clojure.core/slurp
([f & opts])
Opens a reader on f and reads all its contents, returning a string.
See clojure.java.io/reader for a complete list of supported arguments.
Несмотря на то что двоичные данные не удаются, следующая функция сделает что-то похожее на slurp
но принимает двоичные потоки:
(defn copy-uri-to-file [uri file]
(with-open [in (clojure.java.io/input-stream uri)
out (clojure.java.io/output-stream file)]
(clojure.java.io/copy in out)))
Для этого конкретного примера файл mp3 можно скачать следующим образом:
(copy-uri-to-file "http://menlochurch.podbean.com/mf/feed/5gv2gb/170219_jortberg.mp3" "foo.mp3")