From a2f1bd2678cd9631d2ffae72491fd1aeeb6ad58b Mon Sep 17 00:00:00 2001 From: Aman Kumar <45920843+amankumar303@users.noreply.github.com> Date: Sun, 2 Jul 2023 14:38:16 +0530 Subject: [PATCH] Update YouTubePlayer.swift Added cases to handle various types of youtube video links --- YouTubePlayer/YouTubePlayer/YouTubePlayer.swift | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/YouTubePlayer/YouTubePlayer/YouTubePlayer.swift b/YouTubePlayer/YouTubePlayer/YouTubePlayer.swift index 67816da..2691e91 100644 --- a/YouTubePlayer/YouTubePlayer/YouTubePlayer.swift +++ b/YouTubePlayer/YouTubePlayer/YouTubePlayer.swift @@ -74,12 +74,15 @@ private extension URL { } public func videoIDFromYouTubeURL(_ videoURL: URL) -> String? { - if videoURL.pathComponents.count > 1 && (videoURL.host?.hasSuffix("youtu.be"))! { - return videoURL.pathComponents[1] - } else if videoURL.pathComponents.contains("embed") { - return videoURL.pathComponents.last + let pattern = #"(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=|shorts\/)|youtu\.be\/|m\.youtube.com\/watch\?v=)([a-zA-Z0-9_-]{11})"# + let regex = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive) + let range = NSRange(location: 0, length: count) + guard let result = regex?.firstMatch(in: self, range: range) else { + return nil } - return videoURL.queryStringComponents()["v"] as? String + let idRange = result.range(at: 1) + let id = (self as NSString).substring(with: idRange) + return id } /** Embed and control YouTube videos */