Skip to content
This repository has been archived by the owner on Nov 18, 2024. It is now read-only.

Commit

Permalink
implements downloading of imgur albums
Browse files Browse the repository at this point in the history
  • Loading branch information
Sebastian Winkler committed Oct 8, 2016
1 parent 421d12f commit fa4fb82
Showing 1 changed file with 59 additions and 9 deletions.
68 changes: 59 additions & 9 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,32 @@ import (
)

var (
ChannelWhitelist map[string]string
BaseDownloadPath string
RegexpUrlTwitter *regexp.Regexp
RegexpUrlTistory *regexp.Regexp
RegexpUrlGfycat *regexp.Regexp
RegexpUrlInstagram *regexp.Regexp
RegexpUrlImgurGifv *regexp.Regexp
ChannelWhitelist map[string]string
BaseDownloadPath string
RegexpUrlTwitter *regexp.Regexp
RegexpUrlTistory *regexp.Regexp
RegexpUrlGfycat *regexp.Regexp
RegexpUrlInstagram *regexp.Regexp
RegexpUrlImgurGifv *regexp.Regexp
RegexpUrlImgurAlbum *regexp.Regexp
)

const (
VERSION string = "1.5"
RELEASE_URL string = "https://github.com/Seklfreak/discord-image-downloader-go/releases/latest"
VERSION string = "1.6"
RELEASE_URL string = "https://github.com/Seklfreak/discord-image-downloader-go/releases/latest"
IMGUR_CLIENT_ID string = "a39473314df3f59"
)

type GfycatObject struct {
GfyItem map[string]string
}

type ImgurAlbumObject struct {
Data []struct {
Link string
}
}

func main() {
fmt.Printf("discord-image-downloader-go version %s\n", VERSION)
fmt.Printf("Go to %s to get the latest release.\n", RELEASE_URL)
Expand Down Expand Up @@ -100,6 +108,12 @@ func main() {
fmt.Println("Regexp error", err)
return
}
RegexpUrlImgurAlbum, err = regexp.Compile(
`^http(s?):\/\/imgur\.com\/a\/[A-Za-z0-9]+$`)
if err != nil {
fmt.Println("Regexp error", err)
return
}

var dg *discordgo.Session
if cfg.Section("auth").HasKey("token") {
Expand Down Expand Up @@ -180,6 +194,12 @@ func messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) {
fmt.Println("imgur gifv url failed, ", iFoundUrl, ",", err)
continue
}
} else if RegexpUrlImgurAlbum.MatchString(iFoundUrl) {
err := handleImgurAlbumUrl(iFoundUrl, downloadPath)
if err != nil {
fmt.Println("imgur album url failed, ", iFoundUrl, ",", err)
continue
}
} else {
// Any other url
downloadFromUrl(iFoundUrl,
Expand Down Expand Up @@ -237,7 +257,20 @@ func handleImgurGifvUrl(url string, folder string) error {
url = strings.Replace(url, ".gifv", "", -1)
downloadFromUrl(url, "", folder)
return nil
}

func handleImgurAlbumUrl(url string, folder string) error {
afterLastSlash := strings.LastIndex(url, "/")
albumId := url[afterLastSlash+1:]
headers := make(map[string]string)
headers["Authorization"] = "Client-ID " + IMGUR_CLIENT_ID
imgurAlbumObject := new(ImgurAlbumObject)
getJsonWithHeaders("https://api.imgur.com/3/album/"+albumId+"/images", imgurAlbumObject, headers)
fmt.Printf("[%s] Found imgur album url: %s\n", time.Now().Format(time.Stamp), url)
for _, v := range imgurAlbumObject.Data {
downloadFromUrl(v.Link, "", folder)
}
return nil
}

func getJson(url string, target interface{}) error {
Expand All @@ -250,6 +283,23 @@ func getJson(url string, target interface{}) error {
return json.NewDecoder(r.Body).Decode(target)
}

func getJsonWithHeaders(url string, target interface{}, headers map[string]string) error {
client := &http.Client{}
req, _ := http.NewRequest("GET", url, nil)

for k, v := range headers {
req.Header.Set(k, v)
}

r, err := client.Do(req)
if err != nil {
return err
}
defer r.Body.Close()

return json.NewDecoder(r.Body).Decode(target)
}

func filenameFromUrl(dUrl string) string {
base := path.Base(dUrl)
parts := strings.Split(base, "?")
Expand Down

0 comments on commit fa4fb82

Please sign in to comment.