Allows you to search for videos on youtube and automatically add the audio URLs to an MPD playlist
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

76 lines
1.8 KiB

module Types where
import Data.Aeson
import qualified Data.ByteString.Lazy.Char8 as BL
import qualified Data.Text as T
import qualified Data.Map as M
import qualified Data.String as S
data URL = URL { jurl :: T.Text }
deriving (Show, Eq)
data VideoID = VideoID { videoID :: T.Text }
deriving (Show, Eq)
data Thumbnail = Thumbnail { thumbnail :: URL }
deriving (Show, Eq)
data JSearchResult = JSearchResult {
jvideoID :: VideoID,
snippet :: Snippet
}
deriving (Show, Eq)
data Snippet = Snippet {
jtitle :: T.Text,
jdescription :: T.Text,
jthumbnails :: Thumbnail
}
deriving (Show, Eq)
data JItems = JItems [JSearchResult]
deriving (Show)
data SearchResult = SearchResult {
title :: T.Text,
description :: T.Text,
url :: T.Text,
thumb :: T.Text
}
deriving (Show, Eq)
data M3U = M3U T.Text
deriving (Show)
instance S.IsString M3U where
fromString = M3U . T.pack
instance FromJSON URL where
parseJSON (Object v) = URL <$> v .: "url"
parseJSON _ = error "invalid parse"
instance FromJSON Thumbnail where
parseJSON (Object v) = Thumbnail <$> v .: "default"
parseJSON _ = error "invalid parse"
instance FromJSON VideoID where
parseJSON (Object v) = VideoID <$>
v .: "videoId"
parseJSON _ = error "invalid parse"
instance FromJSON Snippet where
parseJSON (Object v) = Snippet <$>
v .: "title" <*>
v .: "description" <*>
v .: "thumbnails"
parseJSON _ = error "invalid parse"
instance FromJSON JSearchResult where
parseJSON (Object v) = JSearchResult <$>
(v .: "id") <*>
(v .: "snippet")
parseJSON _ = error "invalid parse"
instance FromJSON JItems where
parseJSON (Object v) = JItems <$> v .: "items"
parseJSON _ = error "invalid parse"