master
Raw Download raw file
 1package main
 2
 3import (
 4	"bytes"
 5	"github.com/gorilla/feeds"
 6	"github.com/mmcdole/gofeed"
 7	"log"
 8	"os"
 9	"os/exec"
10	"strings"
11	"time"
12	"fmt"
13)
14
15func main() {
16	YouTubePlaylistRSS := "https://www.youtube.com/feeds/videos.xml?playlist_id=PLiZxWe0ejyv8CSMylrxb6Nx4Ii2RHbu_j"
17	audiodir := "/var/www/audio/"
18	fp := gofeed.NewParser()
19	feed, _ := fp.ParseURL(YouTubePlaylistRSS)
20	now := time.Now()
21
22	newfeed := &feeds.AtomFeed{
23		Title:      "Late Show w/ Stephen Colbert Intro Monologues",
24		Link:       &feeds.AtomLink{Href: "https://www.youtube.com/channel/UCMtFAi84ehTSYSE9XoHefig"},
25		Subtitle:   "Podcast version of Intro Monologues",
26		Author:     &feeds.AtomAuthor{AtomPerson: feeds.AtomPerson{Name: "CBS", Email: ""}},
27		Updated:    now.String(), 
28	}
29
30	for _, i := range feed.Items {
31		guid := strings.Split(i.GUID, ":")
32		id := guid[len(guid)-1]
33
34		if _, err := os.Stat(audiodir + id + ".mp3"); os.IsNotExist(err) {
35			// id mp3 hasn't been downloaded
36			fmt.Println("downloading: ", id)
37			cmd := exec.Command("youtube-dl", "--extract-audio", "--audio-format", "mp3", "-o", audiodir+"%(id)s.%(ext)s", i.Link)
38			var out bytes.Buffer
39			cmd.Stdout = &out
40			err := cmd.Run()
41			if err != nil {
42				log.Fatal(err)
43			}
44		}
45			//fmt.Println("adding: ", id)
46
47		newentry := &feeds.AtomEntry{
48			Title:   i.Title,
49			Id: id,
50			Link:    &feeds.AtomLink{Href: "https://trustme.click/audio/" + id + ".mp3", Type: "audio/mpeg", Length: "1024", Rel: "enclosure"},
51			Updated: i.Published,
52		}
53		newfeed.Entries = append(newfeed.Entries, newentry)
54	}
55	writer, _ := os.Create("/var/www/audio/feed.xml")
56	feeds.WriteXML(newfeed, writer)
57	fmt.Println("feed update complete", now)
58
59}