YoutubeDataKit/YoutubeDataKit/API/Requests/SearchListRequest.swift
//
// SearchListRequest.swift
// YoutubeKit
//
// Created by Ryo Ishikawa on 12/30/2017
//
import Foundation
/// SeeAlso: https://developers.google.com/youtube/v3/docs/search/list
public struct SearchListRequest: Requestable {
public typealias Response = SearchList
public var path: String {
return "search"
}
public var httpMethod: HTTPMethod {
return .get
}
public var isAuthorizedRequest: Bool {
guard let filter = filter else { return false }
switch filter {
case .forContentOwner:
return true
case .forMine:
return true
case .relatedToVideoID:
return false
}
}
public var queryParameters: [String: Any] {
var query: [String: Any] = ["part": part.toCSV()]
query.appendingQueryFilter(filter)
query.appendingQueryParameter(key: "channelId", value: channelID)
query.appendingQueryParameter(key: "q", value: searchQuery)
query.appendingQueryParameter(key: "topicId", value: topicID)
query.appendingQueryParameter(key: "type", value: resourceType)
query.appendingQueryParameter(key: "videoCategoryId", value: videoCategoryID)
query.appendingQueryParameter(key: "channelType", value: channelType)
query.appendingQueryParameter(key: "eventType", value: eventType)
query.appendingQueryParameter(key: "maxResults", value: maxResults)
query.appendingQueryParameter(key: "onBehalfOfContentOwner", value: onBehalfOfContentOwner)
query.appendingQueryParameter(key: "order", value: order)
query.appendingQueryParameter(key: "pageToken", value: pageToken)
query.appendingQueryParameter(key: "publishedAfter", value: publishedAfter)
query.appendingQueryParameter(key: "publishedBefore", value: publishedBefore)
query.appendingQueryParameter(key: "regionCode", value: regionCode)
query.appendingQueryParameter(key: "safeSearch", value: safeSearch)
query.appendingQueryParameter(key: "videoCaption", value: videoCaption)
query.appendingQueryParameter(key: "videoDefinition", value: videoDefinition)
query.appendingQueryParameter(key: "videoDimension", value: videoDimension)
query.appendingQueryParameter(key: "videoDuration", value: videoDuration)
query.appendingQueryParameter(key: "videoEmbeddable", value: videoEmbeddable)
query.appendingQueryParameter(key: "videoLicense", value: videoLicense)
query.appendingQueryParameter(key: "videoSyndicated", value: videoSyndicated)
query.appendingQueryParameter(key: "videoType", value: videoType)
return query
}
// MARK: - Required parameters
public let part: [Part.SearchList]
// MARK: - Option parameters
public let filter: Filter.SearchList?
public let channelID: String?
public let channelType: String?
public let eventType: SearchEventType?
public let maxResults: Int?
public let onBehalfOfContentOwner: String?
public let order: ResultOrder.Search?
public let pageToken: String?
public let publishedAfter: Date?
public let publishedBefore: Date?
public let searchQuery: String?
public let regionCode: String?
public let safeSearch: SearchSafeMode?
public let topicID: String?
public let resourceType: [SearchResourceType]?
public let videoCaption: SearchVideoCaption?
public let videoCategoryID: VideoCategoryID?
public let videoDefinition: SearchVideoDefinition?
public let videoDimension: SearchVideoDimension?
public let videoDuration: SearchVideoDuration?
public let videoEmbeddable: SearchVideoEmbeddable?
public let videoLicense: SearchVideoLicense?
public let videoSyndicated: SearchVideoSyndicated?
public let videoType: SearchVideoType?
public init(part: [Part.SearchList],
filter: Filter.SearchList? = nil,
channelID: String? = nil,
channelType: String? = nil,
eventType: SearchEventType? = nil,
maxResults: Int? = nil,
onBehalfOfContentOwner: String? = nil,
order: ResultOrder.Search? = nil,
pageToken: String? = nil,
publishedAfter: Date? = nil,
publishedBefore: Date? = nil,
searchQuery: String? = nil,
regionCode: String? = nil,
safeSearch: SearchSafeMode? = nil,
topicID: String? = nil,
resourceType: [SearchResourceType]? = nil,
videoCaption: SearchVideoCaption? = nil,
videoCategoryID: VideoCategoryID? = nil,
videoDefinition: SearchVideoDefinition? = nil,
videoDimension: SearchVideoDimension? = nil,
videoDuration: SearchVideoDuration? = nil,
videoEmbeddable: SearchVideoEmbeddable? = nil,
videoLicense: SearchVideoLicense? = nil,
videoSyndicated: SearchVideoSyndicated? = nil,
videoType: SearchVideoType? = nil) {
self.part = part
self.filter = filter
self.channelID = channelID
self.channelType = channelType
self.eventType = eventType
self.maxResults = maxResults
self.onBehalfOfContentOwner = onBehalfOfContentOwner
self.order = order
self.pageToken = pageToken
self.publishedAfter = publishedAfter
self.publishedBefore = publishedBefore
self.searchQuery = searchQuery
self.regionCode = regionCode
self.safeSearch = safeSearch
self.topicID = topicID
self.resourceType = resourceType
self.videoCaption = videoCaption
self.videoCategoryID = videoCategoryID
self.videoDefinition = videoDefinition
self.videoDimension = videoDimension
self.videoDuration = videoDuration
self.videoEmbeddable = videoEmbeddable
self.videoLicense = videoLicense
self.videoSyndicated = videoSyndicated
self.videoType = videoType
}
}