diff --git a/Sources/SwiftNLP/1. Data Collection/Reddit/Reddit Enumerations.swift b/Sources/SwiftNLP/1. Data Collection/Reddit/Reddit Enumerations.swift index 0577a80c800bccf47f813fd94cea7231e24ce2d7..a53252766723af632e6c3a24b1854134539ed2ef 100644 --- a/Sources/SwiftNLP/1. Data Collection/Reddit/Reddit Enumerations.swift +++ b/Sources/SwiftNLP/1. Data Collection/Reddit/Reddit Enumerations.swift @@ -11,15 +11,22 @@ enum RedditContentType: String, CustomStringConvertible { enum ListingSortOrder: String, CustomStringConvertible { - case relevance = "relevance" - case hot = "hot" - case top = "top" - case new = "new" - case comments = "comments" + case relevance = "relevance" + case hot = "hot" + case top = "top" + case new = "new" + case old = "old" + case random = "random" + case qa = "qa" + case live = "live" + case comments = "comments" + case confidence = "confidence" + case controversial = "controversial" var description: String { rawValue } } + enum ListingTime: String, CustomStringConvertible { case hour = "hour" case day = "day" diff --git a/Sources/SwiftNLP/1. Data Collection/Reddit/RedditClient + Comment Search.swift b/Sources/SwiftNLP/1. Data Collection/Reddit/RedditClient + Comment Search.swift new file mode 100644 index 0000000000000000000000000000000000000000..4e41dafd7ac51448755268d78ea180f0fc36c29c --- /dev/null +++ b/Sources/SwiftNLP/1. Data Collection/Reddit/RedditClient + Comment Search.swift @@ -0,0 +1,31 @@ +import Foundation + +extension RedditClient { + + func searchComment( + article: RedditSubmission + ) async throws -> [RedditComment] { + + guard let subreddit = article.subreddit, let articleID = article.id + else { + throw RedditClientError(message: "Submission must include article data.") + } + + let (data, response) = try await _GET( + endpoint: "r/\(subreddit)/search/comment/\(articleID)", + parameters: parameters + ) + + print(response) + print(data) + + do { + let redditListing = try JSONDecoder().decode([RedditComment].self, from: data) + return redditListing + + } catch { + throw RedditClientError(message: "Unable to decode server response.") + } + } + +} diff --git a/Sources/SwiftNLP/1. Data Collection/Reddit/RedditDataItem.swift b/Sources/SwiftNLP/1. Data Collection/Reddit/RedditDataItem.swift index 39e9474f170bc0661884a61946f333e6c2ed7fb2..6266b5fc59f689ef648cd4c562bdb93314f2e110 100644 --- a/Sources/SwiftNLP/1. Data Collection/Reddit/RedditDataItem.swift +++ b/Sources/SwiftNLP/1. Data Collection/Reddit/RedditDataItem.swift @@ -1,4 +1,4 @@ -public protocol RedditDataItem: Encodable, Decodable, Equatable { +public protocol RedditDataItem: Codable, Equatable { var created_utc: Int32? { get } var id: String? { get } } diff --git a/Tests/SwiftNLPTests/Reddit API/RedditClient.swift b/Tests/SwiftNLPTests/Reddit API/RedditClient.swift index 65f03c1095421fe81fceaeaee9728392c3efb63a..2a62c9b5882c6f1e853bc20a48c99a980ec5c638 100644 --- a/Tests/SwiftNLPTests/Reddit API/RedditClient.swift +++ b/Tests/SwiftNLPTests/Reddit API/RedditClient.swift @@ -91,4 +91,25 @@ final class RedditClientTest: XCTestCase { XCTAssert(result.data.children.count > 0) } + +// func testCommentSearch() async throws { +// +// let id = ProcessInfo.processInfo.environment["REDDIT_CLIENT_ID"] ?? nil +// let secret = ProcessInfo.processInfo.environment["REDDIT_CLIENT_SECRET"] ?? nil +// +// guard let id = id, let secret = secret else { +// fatalError("Unable to fetch REDDIT_CLIENT_ID and REDDIT_CLIENT_SECRET from ProcessInfo.") +// } +// +// let client = RedditClient(id: id, secret: secret) +// guard let _ = try? await client.authenticate() else { +// throw RedditClientError(message: "Error authenticating client.") +// } +// +// let submission = RedditSubmission() +// +// let result = try await client.searchComment(article: nil) +// +// XCTAssert(result.data.children.count > 0) +// } }