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\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\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[^/]+)(/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[^/]+)/episode-(?P\d+)-(?P.+)-(?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 }