mirror of
https://github.com/yattee/yattee.git
synced 2024-11-10 00:08:21 +00:00
Add shorts url parsing
This commit is contained in:
parent
a235267796
commit
eedb3d0471
@ -5,6 +5,7 @@ final class URLParserTests: XCTestCase {
|
|||||||
"https://www.youtube.com/watch?v=_E0PWQvW-14&list=WL&index=4&t=155s": "_E0PWQvW-14",
|
"https://www.youtube.com/watch?v=_E0PWQvW-14&list=WL&index=4&t=155s": "_E0PWQvW-14",
|
||||||
"https://youtu.be/IRsc57nK8mg?t=20": "IRsc57nK8mg",
|
"https://youtu.be/IRsc57nK8mg?t=20": "IRsc57nK8mg",
|
||||||
"yattee://youtu.be/oCtYBqcN7QE": "oCtYBqcN7QE",
|
"yattee://youtu.be/oCtYBqcN7QE": "oCtYBqcN7QE",
|
||||||
|
"https://www.youtube.com/shorts/TjOh-gfIE2s": "TjOh-gfIE2s",
|
||||||
"https://www.youtube-nocookie.com/watch?index=4&v=cE1PSQrWc11&list=WL&t=155s": "cE1PSQrWc11",
|
"https://www.youtube-nocookie.com/watch?index=4&v=cE1PSQrWc11&list=WL&t=155s": "cE1PSQrWc11",
|
||||||
"https://invidious.snopyta.org/watch?v=XpowfENlJAw": "XpowfENlJAw",
|
"https://invidious.snopyta.org/watch?v=XpowfENlJAw": "XpowfENlJAw",
|
||||||
"/watch?v=VQ_f5RymW70": "VQ_f5RymW70",
|
"/watch?v=VQ_f5RymW70": "VQ_f5RymW70",
|
||||||
|
@ -2,6 +2,7 @@ import CoreMedia
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
struct URLParser {
|
struct URLParser {
|
||||||
|
static var shortsPrefix = "/shorts/"
|
||||||
static let prefixes: [Destination: [String]] = [
|
static let prefixes: [Destination: [String]] = [
|
||||||
.playlist: ["/playlist", "playlist"],
|
.playlist: ["/playlist", "playlist"],
|
||||||
.channel: ["/c", "c", "/channel", "channel", "/user", "user"],
|
.channel: ["/c", "c", "/channel", "channel", "/user", "user"],
|
||||||
@ -59,11 +60,20 @@ struct URLParser {
|
|||||||
return urlComponents.host == "youtube.com" || urlComponents.host == "www.youtube.com"
|
return urlComponents.host == "youtube.com" || urlComponents.host == "www.youtube.com"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var isShortsPath: Bool {
|
||||||
|
path.hasPrefix(Self.shortsPrefix)
|
||||||
|
}
|
||||||
|
|
||||||
var videoID: String? {
|
var videoID: String? {
|
||||||
if host == "youtu.be", !path.isEmpty {
|
if host == "youtu.be", !path.isEmpty {
|
||||||
return String(path.suffix(from: path.index(path.startIndex, offsetBy: 1)))
|
return String(path.suffix(from: path.index(path.startIndex, offsetBy: 1)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if isYoutubeHost, isShortsPath {
|
||||||
|
let index = path.index(path.startIndex, offsetBy: Self.shortsPrefix.count)
|
||||||
|
return String(path[index...])
|
||||||
|
}
|
||||||
|
|
||||||
return queryItemValue("v")
|
return queryItemValue("v")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,7 +109,7 @@ struct URLParser {
|
|||||||
|
|
||||||
var channelName: String? {
|
var channelName: String? {
|
||||||
guard hasAnyOfPrefixes(path, ["c/", "/c/"]) else {
|
guard hasAnyOfPrefixes(path, ["c/", "/c/"]) else {
|
||||||
if isYoutubeHost { return pathWithoutForwardSlash }
|
if channelID == nil, username == nil { return pathWithoutForwardSlash }
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return removePrefixes(path, Self.prefixes[.channel]!.map { [$0, "/"].joined() })
|
return removePrefixes(path, Self.prefixes[.channel]!.map { [$0, "/"].joined() })
|
||||||
|
Loading…
Reference in New Issue
Block a user