Skip to content
This repository has been archived by the owner on Jun 30, 2023. It is now read-only.

Commit

Permalink
Merge pull request #112 from mironal/add-get-tweets-id-quote_tweets
Browse files Browse the repository at this point in the history
Add get tweets id quote tweets
  • Loading branch information
mironal committed Mar 18, 2022
2 parents 69f4043 + 85eedae commit cc02c72
Show file tree
Hide file tree
Showing 3 changed files with 121 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import Foundation

/// https://developer.twitter.com/en/docs/twitter-api/tweets/quote-tweets/api-reference/get-tweets-id-quote_tweets
open class GetTweetsQuoteTweetsRequestV2: TwitterAPIRequest {

public let id: String
public let expansions: Set<TwitterTweetExpansionsV2>?
public let maxResults: Int?
public let mediaFields: Set<TwitterMediaFieldsV2>?
public let paginationToken: String?
public let placeFields: Set<TwitterPlaceFieldsV2>?
public let pollFields: Set<TwitterPollFieldsV2>?
public let tweetFields: Set<TwitterTweetFieldsV2>?
public let userFields: Set<TwitterUserFieldsV2>?

public var method: HTTPMethod {
return .get
}

public var path: String {
return "/2/tweets/\(id)/quote_tweets"
}

open var parameters: [String: Any] {
var p = [String: Any]()
expansions?.bind(param: &p)
maxResults.map { p["max_results"] = $0 }
mediaFields?.bind(param: &p)
paginationToken.map { p["pagination_token"] = $0 }
placeFields?.bind(param: &p)
pollFields?.bind(param: &p)
tweetFields?.bind(param: &p)
userFields?.bind(param: &p)
return p
}

public init(
id: String,
expansions: Set<TwitterTweetExpansionsV2>? = .none,
maxResults: Int? = .none,
mediaFields: Set<TwitterMediaFieldsV2>? = .none,
paginationToken: String? = .none,
placeFields: Set<TwitterPlaceFieldsV2>? = .none,
pollFields: Set<TwitterPollFieldsV2>? = .none,
tweetFields: Set<TwitterTweetFieldsV2>? = .none,
userFields: Set<TwitterUserFieldsV2>? = .none
) {
self.id = id
self.expansions = expansions
self.maxResults = maxResults
self.mediaFields = mediaFields
self.paginationToken = paginationToken
self.placeFields = placeFields
self.pollFields = pollFields
self.tweetFields = tweetFields
self.userFields = userFields
}
}
9 changes: 9 additions & 0 deletions Sources/TwitterAPIKit/APIv2/Tweet/TweetAPIv2.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ public protocol TweetAPIv2 {
_ request: GetTweetRequestV2
) -> TwitterAPISessionJSONTask

/// https://developer.twitter.com/en/docs/twitter-api/tweets/quote-tweets/api-reference/get-tweets-id-quote_tweets
func getQuoteTweets(
_ request: GetTweetsQuoteTweetsRequestV2
) -> TwitterAPISessionJSONTask

/// https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/delete-tweets-id
func deleteTweet(
_ request: DeleteTweetRequestV2
Expand All @@ -37,6 +42,10 @@ extension TwitterAPIKit.TwitterAPIImplV2: TweetAPIv2 {
return session.send(request)
}

func getQuoteTweets(_ request: GetTweetsQuoteTweetsRequestV2) -> TwitterAPISessionJSONTask {
return session.send(request)
}

func deleteTweet(_ request: DeleteTweetRequestV2) -> TwitterAPISessionJSONTask {
return session.send(request)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import TwitterAPIKit
import XCTest

class GetTweetsQuoteTweetsRequestV2Tests: XCTestCase {
override func setUpWithError() throws {
}

override func tearDownWithError() throws {
}

func test() throws {
let req = GetTweetsQuoteTweetsRequestV2(
id: "_i_",
expansions: [.attachmentsMediaKeys],
maxResults: 10,
mediaFields: [.height],
paginationToken: "_p_",
placeFields: [.country],
pollFields: [.options],
tweetFields: [.authorID],
userFields: [.entities]
)

XCTAssertEqual(req.method, .get)
XCTAssertEqual(req.baseURLType, .api)
XCTAssertEqual(req.path, "/2/tweets/_i_/quote_tweets")
XCTAssertEqual(req.bodyContentType, .wwwFormUrlEncoded)
AssertEqualAnyDict(
req.parameters,
[
"expansions": "attachments.media_keys",
"max_results": 10,
"media.fields": "height",
"pagination_token": "_p_",
"place.fields": "country",
"poll.fields": "options",
"tweet.fields": "author_id",
"user.fields": "entities",
]
)
}

func testDefaultArg() throws {
let req = GetTweetsQuoteTweetsRequestV2(
id: "i"
)

XCTAssertEqual(req.path, "/2/tweets/i/quote_tweets")
AssertEqualAnyDict(
req.parameters,
[:]
)
}
}

0 comments on commit cc02c72

Please sign in to comment.