mirror of
https://github.com/crunchy-labs/crunchy-cli.git
synced 2026-01-21 04:02:00 -06:00
69 lines
2.9 KiB
Go
69 lines
2.9 KiB
Go
package crunchyroll
|
|
|
|
import (
|
|
"regexp"
|
|
"strconv"
|
|
)
|
|
|
|
// ParseBetaSeriesURL tries to extract the season id of the given crunchyroll beta url, pointing to a season.
|
|
func ParseBetaSeriesURL(url string) (seasonId string, ok bool) {
|
|
pattern := regexp.MustCompile(`(?m)^https?://(www\.)?beta\.crunchyroll\.com/(\w{2}/)?series/(?P<seasonId>\w+).*`)
|
|
if urlMatch := pattern.FindAllStringSubmatch(url, -1); len(urlMatch) != 0 {
|
|
groups := regexGroups(urlMatch, pattern.SubexpNames()...)
|
|
seasonId = groups["seasonId"]
|
|
ok = true
|
|
}
|
|
return
|
|
}
|
|
|
|
// ParseBetaEpisodeURL tries to extract the episode id of the given crunchyroll beta url, pointing to an episode.
|
|
func ParseBetaEpisodeURL(url string) (episodeId string, ok bool) {
|
|
pattern := regexp.MustCompile(`(?m)^https?://(www\.)?beta\.crunchyroll\.com/(\w{2}/)?watch/(?P<episodeId>\w+).*`)
|
|
if urlMatch := pattern.FindAllStringSubmatch(url, -1); len(urlMatch) != 0 {
|
|
groups := regexGroups(urlMatch, pattern.SubexpNames()...)
|
|
episodeId = groups["episodeId"]
|
|
ok = true
|
|
}
|
|
return
|
|
}
|
|
|
|
// ParseVideoURL tries to extract the crunchyroll series / movie name out of the given url.
|
|
//
|
|
// Deprecated: Crunchyroll classic urls are sometimes not safe to use, use ParseBetaSeriesURL
|
|
// if possible since beta url are always safe to use.
|
|
// The method will stay in the library until only beta urls are supported by crunchyroll itself.
|
|
func ParseVideoURL(url string) (seriesName string, ok bool) {
|
|
pattern := regexp.MustCompile(`(?m)^https?://(www\.)?crunchyroll\.com(/\w{2}(-\w{2})?)?/(?P<series>[^/]+)(/videos)?/?$`)
|
|
if urlMatch := pattern.FindAllStringSubmatch(url, -1); len(urlMatch) != 0 {
|
|
groups := regexGroups(urlMatch, pattern.SubexpNames()...)
|
|
seriesName = groups["series"]
|
|
|
|
if seriesName != "" {
|
|
ok = true
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// ParseEpisodeURL tries to extract the crunchyroll series name, title, episode number and web id out of the given crunchyroll url
|
|
// Note that the episode number can be misleading. For example if an episode has the episode number 23.5 (slime isekai)
|
|
// the episode number will be 235.
|
|
//
|
|
// Deprecated: Crunchyroll classic urls are sometimes not safe to use, use ParseBetaEpisodeURL
|
|
// if possible since beta url are always safe to use.
|
|
// The method will stay in the library until only beta urls are supported by crunchyroll itself.
|
|
func ParseEpisodeURL(url string) (seriesName, title string, episodeNumber int, webId int, ok bool) {
|
|
pattern := regexp.MustCompile(`(?m)^https?://(www\.)?crunchyroll\.com(/\w{2}(-\w{2})?)?/(?P<series>[^/]+)/episode-(?P<number>\d+)-(?P<title>.+)-(?P<webId>\d+).*`)
|
|
if urlMatch := pattern.FindAllStringSubmatch(url, -1); len(urlMatch) != 0 {
|
|
groups := regexGroups(urlMatch, pattern.SubexpNames()...)
|
|
seriesName = groups["series"]
|
|
episodeNumber, _ = strconv.Atoi(groups["number"])
|
|
title = groups["title"]
|
|
webId, _ = strconv.Atoi(groups["webId"])
|
|
|
|
if seriesName != "" && title != "" && webId != 0 {
|
|
ok = true
|
|
}
|
|
}
|
|
return
|
|
}
|