Skip to content

Instantly share code, notes, and snippets.

@lagenorhynque
Last active December 13, 2017 08:23
Show Gist options
  • Select an option

  • Save lagenorhynque/7cd04796c15028a04ed284849f91cd8b to your computer and use it in GitHub Desktop.

Select an option

Save lagenorhynque/7cd04796c15028a04ed284849f91cd8b to your computer and use it in GitHub Desktop.
SlideShare image URL generator
{:deps {org.clojure/clojure {:mvn/version "1.9.0"}
org.clojure/tools.cli {:mvn/version "0.3.5"}}
:paths ["."]}
(ns slideshare-url-generator
(:require [clojure.tools.cli :as cli]
[clojure.xml :as xml]))
(defn slideshare-img-url [url page]
(let [api-url (str "https://www.slideshare.net/api/oembed/2?url=" url)
xml (-> api-url
xml/parse
xml-seq)
slide-image-baseurl (->> xml
(filter (comp #{:slide-image-baseurl} :tag))
(map (comp first :content))
first)
slide-image-baseurl-suffix (->> xml
(filter (comp #{:slide-image-baseurl-suffix} :tag))
(map (comp first :content))
first)]
(str "http:" slide-image-baseurl page slide-image-baseurl-suffix)))
(def cli-options
[["-p" "--page PAGE" "page number"
:default 1
:parse-fn #(Integer/parseInt %)
:validate-fn [(every-pred nat-int? pos?)]]])
(defn -main [& args]
(let [{[url] :arguments
{:keys [page]} :options} (cli/parse-opts args cli-options)]
(when-not url
(throw (IllegalArgumentException. "url must be specified as the first argument!")))
(println (slideshare-img-url url page))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment