From e9b5ead86429ea7582fed93eed9ff6c1192de821 Mon Sep 17 00:00:00 2001 From: BernardoGiordano Date: Fri, 12 May 2023 12:42:37 +0200 Subject: [PATCH 1/5] Quick modifications to allow basic DM api --- pom.xml | 2 +- .../java/com/twitter/clientlib/api/DmApi.java | 200 ++++++++++++++++++ .../com/twitter/clientlib/api/TwitterApi.java | 5 + .../com/twitter/clientlib/model/DmEvent.java | 95 +++++++++ .../clientlib/model/Get2DmEventsResponse.java | 132 ++++++++++++ 5 files changed, 433 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/twitter/clientlib/api/DmApi.java create mode 100644 src/main/java/com/twitter/clientlib/model/DmEvent.java create mode 100644 src/main/java/com/twitter/clientlib/model/Get2DmEventsResponse.java diff --git a/pom.xml b/pom.xml index 348f7f3..edf30f2 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ twitter-api-java-sdk jar twitter-api-java-sdk - 2.0.3 + 2.0.4-easy https://github.com/twitterdev/twitter-api-java-sdk Twitter API v2 available endpoints diff --git a/src/main/java/com/twitter/clientlib/api/DmApi.java b/src/main/java/com/twitter/clientlib/api/DmApi.java new file mode 100644 index 0000000..c1afd18 --- /dev/null +++ b/src/main/java/com/twitter/clientlib/api/DmApi.java @@ -0,0 +1,200 @@ +package com.twitter.clientlib.api; + +import com.google.gson.reflect.TypeToken; +import com.twitter.clientlib.ApiCallback; +import com.twitter.clientlib.ApiException; +import com.twitter.clientlib.ApiResponse; +import com.twitter.clientlib.Pair; +import com.twitter.clientlib.model.Get2DmEventsResponse; +import okhttp3.Call; + +import java.lang.reflect.Type; +import java.util.*; + +public class DmApi extends ApiCommon { + + public class APIfindDmEventsRequest { + private Set tweetFields; + private Set expansions; + private Set mediaFields; + private Set userFields; + private Set dmEventsFields; + private Set dmEventTypes; + private Integer maxResults; + private String paginationToken; + private final Set tweetFieldsAll = new HashSet<>(Arrays.asList("attachments", "author_id", "context_annotations", "conversation_id", "created_at", "edit_controls", "edit_history_tweet_ids", "entities", "geo", "id", "in_reply_to_user_id", "lang", "non_public_metrics", "organic_metrics", "possibly_sensitive", "promoted_metrics", "public_metrics", "referenced_tweets", "reply_settings", "source", "text", "withheld")); + private final Set mediaFieldsAll = new HashSet<>(Arrays.asList("alt_text", "duration_ms", "height", "media_key", "non_public_metrics", "organic_metrics", "preview_image_url", "promoted_metrics", "public_metrics", "type", "url", "variants", "width")); + private final Set userFieldsAll = new HashSet<>(Arrays.asList("created_at", "description", "entities", "id", "location", "name", "pinned_tweet_id", "profile_image_url", "protected", "public_metrics", "url", "username", "verified", "withheld")); + private final Set expansionsAll = new HashSet<>(Arrays.asList("attachments.media_keys", "referenced_tweets.id", "sender_id", "participant_ids")); + private final Set dmEventsFieldsAll = new HashSet<>(Arrays.asList("id", "text", "event_type", "created_at", "dm_conversation_id", "sender_id", "participant_ids", "referenced_tweets", "attachments")); + private final Set dmEventTypesAll = new HashSet<>(Arrays.asList("MessageCreate", "ParticipantsJoin", "ParticipantsLeave")); + + private boolean isExclude = false; + + public APIfindDmEventsRequest excludeInputFields() { + isExclude = true; + return this; + } + + public APIfindDmEventsRequest tweetFields(Set tweetFields) { + this.tweetFields = tweetFields; + return this; + } + + public APIfindDmEventsRequest expansions(Set expansions) { + this.expansions = expansions; + return this; + } + + public APIfindDmEventsRequest mediaFields(Set mediaFields) { + this.mediaFields = mediaFields; + return this; + } + + public APIfindDmEventsRequest userFields(Set userFields) { + this.userFields = userFields; + return this; + } + + public APIfindDmEventsRequest dmEventsFields(Set dmEventsFields) { + this.dmEventsFields = dmEventsFields; + return this; + } + + public APIfindDmEventsRequest dmEventTypes(Set dmEventTypes) { + this.dmEventTypes = dmEventTypes; + return this; + } + + public APIfindDmEventsRequest maxResults(Integer maxResults) { + this.maxResults = maxResults; + return this; + } + + public APIfindDmEventsRequest paginationToken(String paginationToken) { + this.paginationToken = paginationToken; + return this; + } + + public okhttp3.Call buildCall(final ApiCallback _callback) throws ApiException { + return findDmEventsCall(tweetFields, expansions, mediaFields, userFields, dmEventsFields, dmEventTypes, maxResults, paginationToken, _callback); + } + + public Get2DmEventsResponse execute() throws ApiException { + tweetFields = getFields("tweetFields", isExclude, tweetFields, tweetFieldsAll); + expansions = getFields("expansions", isExclude, expansions, expansionsAll); + mediaFields = getFields("mediaFields", isExclude, mediaFields, mediaFieldsAll); + userFields = getFields("userFields", isExclude, userFields, userFieldsAll); + dmEventsFields = getFields("dm_event.fields", isExclude, dmEventsFields, dmEventsFieldsAll); + dmEventTypes = getFields("event_types", isExclude, dmEventTypes, dmEventTypesAll); + + ApiResponse localVarResp = findDmEventsCallWithHttpInfo(tweetFields, expansions, mediaFields, userFields, dmEventsFields, dmEventTypes, maxResults, paginationToken); + return localVarResp.getData(); + } + + public Get2DmEventsResponse execute(Integer retries) throws ApiException { + Get2DmEventsResponse localVarResp; + try{ + localVarResp = execute(); + } catch (ApiException e) { + if(handleRateLimit(e, retries)) { + return execute(retries - 1); + } else { + throw e; + } + } + return localVarResp; + } + + public ApiResponse executeWithHttpInfo() throws ApiException { + return findDmEventsCallWithHttpInfo(tweetFields, expansions, mediaFields, userFields, dmEventsFields, dmEventTypes, maxResults, paginationToken); + } + + public okhttp3.Call executeAsync(final ApiCallback _callback) throws ApiException { + return findDmEventsCallAsync(tweetFields, expansions, mediaFields, userFields, dmEventsFields, dmEventTypes, maxResults, paginationToken, _callback); + } + } + + private Call findDmEventsCall(Set tweetFields, Set expansions, Set mediaFields, Set userFields, Set dmEventsFields, Set dmEventsTypes, Integer maxResults, String paginationToken, ApiCallback callback) throws ApiException { + Object localVarPostBody = null; + + String localVarPath = "/2/dm_events"; + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + if (tweetFields != null) { + localVarCollectionQueryParams.addAll(localVarApiClient.parameterToPairs("csv", "tweet.fields", tweetFields)); + } + + if (expansions != null) { + localVarCollectionQueryParams.addAll(localVarApiClient.parameterToPairs("csv", "expansions", expansions)); + } + + if (mediaFields != null) { + localVarCollectionQueryParams.addAll(localVarApiClient.parameterToPairs("csv", "media.fields", mediaFields)); + } + + if (userFields != null) { + localVarCollectionQueryParams.addAll(localVarApiClient.parameterToPairs("csv", "user.fields", userFields)); + } + + if (dmEventsFields != null) { + localVarCollectionQueryParams.addAll(localVarApiClient.parameterToPairs("csv", "dm_event.fields", dmEventsFields)); + } + + if (dmEventsTypes != null) { + localVarCollectionQueryParams.addAll(localVarApiClient.parameterToPairs("csv", "event_types", dmEventsTypes)); + } + + if (maxResults != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("max_results", maxResults)); + } + + if (paginationToken != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("pagination_token", paginationToken)); + } + + final String[] localVarAccepts = { + "application/json", "application/problem+json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + String[] localVarAuthNames = new String[] { "BearerToken", "OAuth2UserToken", "UserToken" }; + return localVarApiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, reduceAuthNames(localVarAuthNames), callback); + } + + private Call findDmEventsValidateBeforeCall(Set tweetFields, Set expansions, Set mediaFields, Set userFields, Set dmEventsFields, Set dmEventsTypes, Integer maxResults, String paginationToken, final ApiCallback _callback) throws ApiException { + okhttp3.Call localVarCall = findDmEventsCall(tweetFields, expansions, mediaFields, userFields, dmEventsFields, dmEventsTypes, maxResults, paginationToken, _callback); + return localVarCall; + } + + private ApiResponse findDmEventsCallWithHttpInfo(Set tweetFields, Set expansions, Set mediaFields, Set userFields, Set dmEventsFields, Set dmEventsTypes, Integer maxResults, String paginationToken) throws ApiException { + okhttp3.Call localVarCall = findDmEventsValidateBeforeCall(tweetFields, expansions, mediaFields, userFields, dmEventsFields, dmEventsTypes, maxResults, paginationToken, null); + try { + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } catch (ApiException e) { + e.setErrorObject(localVarApiClient.getJSON().getGson().fromJson(e.getResponseBody(), new TypeToken(){}.getType())); + throw e; + } + } + + private okhttp3.Call findDmEventsCallAsync(Set tweetFields, Set expansions, Set mediaFields, Set userFields, Set dmEventsFields, Set dmEventsTypes, Integer maxResults, String paginationToken, final ApiCallback _callback) throws ApiException { + + okhttp3.Call localVarCall = findDmEventsValidateBeforeCall(tweetFields, expansions, mediaFields, userFields, dmEventsFields, dmEventsTypes, maxResults, paginationToken, _callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback); + return localVarCall; + } + + public APIfindDmEventsRequest findDmEvents() { + return new APIfindDmEventsRequest(); + } +} diff --git a/src/main/java/com/twitter/clientlib/api/TwitterApi.java b/src/main/java/com/twitter/clientlib/api/TwitterApi.java index a20b38f..d672b7c 100644 --- a/src/main/java/com/twitter/clientlib/api/TwitterApi.java +++ b/src/main/java/com/twitter/clientlib/api/TwitterApi.java @@ -42,6 +42,7 @@ public class TwitterApi { private final SpacesApi spaces = new SpacesApi(); private final TweetsApi tweets = new TweetsApi(); private final UsersApi users = new UsersApi(); + private final DmApi dm = new DmApi(); private ApiClient localVarApiClient = new ApiClient(); public TwitterApi(TwitterCredentialsBearer credentials) { @@ -84,6 +85,7 @@ private void initApis() { spaces.setClient(localVarApiClient); tweets.setClient(localVarApiClient); users.setClient(localVarApiClient); + dm.setClient(localVarApiClient); } public BookmarksApi bookmarks() { @@ -107,6 +109,9 @@ public TweetsApi tweets() { public UsersApi users() { return users; } + public DmApi dm() { + return dm; + } public OAuth2AccessToken refreshToken() throws ApiException { return localVarApiClient.refreshToken(); diff --git a/src/main/java/com/twitter/clientlib/model/DmEvent.java b/src/main/java/com/twitter/clientlib/model/DmEvent.java new file mode 100644 index 0000000..737bc7a --- /dev/null +++ b/src/main/java/com/twitter/clientlib/model/DmEvent.java @@ -0,0 +1,95 @@ +package com.twitter.clientlib.model; + +import com.google.gson.annotations.SerializedName; + +import java.time.OffsetDateTime; + +public class DmEvent { + + @SerializedName("id") + private String id; + + @SerializedName("sender_id") + private String senderId; + + @SerializedName("event_type") + private String eventType; // TODO enum + + @SerializedName("text") + private String text; + + @SerializedName("dm_conversation_id") + private String dmConversationId; + + @SerializedName("created_at") + private OffsetDateTime createdAt; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getSenderId() { + return senderId; + } + + public void setSenderId(String senderId) { + this.senderId = senderId; + } + + public String getEventType() { + return eventType; + } + + public void setEventType(String eventType) { + this.eventType = eventType; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getDmConversationId() { + return dmConversationId; + } + + public void setDmConversationId(String dmConversationId) { + this.dmConversationId = dmConversationId; + } + + public OffsetDateTime getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(OffsetDateTime createdAt) { + this.createdAt = createdAt; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class DmEvent {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" senderId: ").append(toIndentedString(senderId)).append("\n"); + sb.append(" eventType: ").append(toIndentedString(eventType)).append("\n"); + sb.append(" text: ").append(toIndentedString(text)).append("\n"); + sb.append(" dmConversationId: ").append(toIndentedString(dmConversationId)).append("\n"); + sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/com/twitter/clientlib/model/Get2DmEventsResponse.java b/src/main/java/com/twitter/clientlib/model/Get2DmEventsResponse.java new file mode 100644 index 0000000..54f11d4 --- /dev/null +++ b/src/main/java/com/twitter/clientlib/model/Get2DmEventsResponse.java @@ -0,0 +1,132 @@ +package com.twitter.clientlib.model; + +import com.google.gson.annotations.SerializedName; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class Get2DmEventsResponse { + + public static final String SERIALIZED_NAME_DATA = "data"; + @SerializedName(SERIALIZED_NAME_DATA) + private List data = null; + + public static final String SERIALIZED_NAME_ERRORS = "errors"; + @SerializedName(SERIALIZED_NAME_ERRORS) + private List errors = null; + + public static final String SERIALIZED_NAME_INCLUDES = "includes"; + @SerializedName(SERIALIZED_NAME_INCLUDES) + private Expansions includes; + + public static final String SERIALIZED_NAME_META = "meta"; + @SerializedName(SERIALIZED_NAME_META) + private Get2TweetsSearchAllResponseMeta meta; + + public Get2DmEventsResponse() { + + } + + public Get2DmEventsResponse data(List data) { + this.data = data; + return this; + } + + public Get2DmEventsResponse addDataItem(DmEvent dataItem) { + if (this.data == null) { + this.data = new ArrayList<>(); + } + this.data.add(dataItem); + return this; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public Get2DmEventsResponse errors(List errors) { + this.errors = errors; + return this; + } + + public Get2DmEventsResponse addErrorsItem(Problem errorsItem) { + if (this.errors == null) { + this.errors = new ArrayList<>(); + } + this.errors.add(errorsItem); + return this; + } + + public List getErrors() { + return errors; + } + + public void setErrors(List errors) { + this.errors = errors; + } + + public Get2DmEventsResponse includes(Expansions includes) { + this.includes = includes; + return this; + } + + public Expansions getIncludes() { + return includes; + } + + public void setIncludes(Expansions includes) { + this.includes = includes; + } + + public Get2DmEventsResponse meta(Get2TweetsSearchAllResponseMeta meta) { + this.meta = meta; + return this; + } + + public Get2TweetsSearchAllResponseMeta getMeta() { + return meta; + } + + public void setMeta(Get2TweetsSearchAllResponseMeta meta) { + this.meta = meta; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Get2DmEventsResponse get2DmEventsResponse = (Get2DmEventsResponse) o; + return Objects.equals(this.data, get2DmEventsResponse.data) && + Objects.equals(this.errors, get2DmEventsResponse.errors) && + Objects.equals(this.includes, get2DmEventsResponse.includes) && + Objects.equals(this.meta, get2DmEventsResponse.meta); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Get2DmEventsResponse {\n"); + sb.append(" data: ").append(toIndentedString(data)).append("\n"); + sb.append(" errors: ").append(toIndentedString(errors)).append("\n"); + sb.append(" includes: ").append(toIndentedString(includes)).append("\n"); + sb.append(" meta: ").append(toIndentedString(meta)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} From ed48931db93e7e0ac096f862d00f370811aebbda Mon Sep 17 00:00:00 2001 From: BernardoGiordano Date: Tue, 16 May 2023 09:45:16 +0200 Subject: [PATCH 2/5] Allow reply to a conversation --- .../java/com/twitter/clientlib/api/DmApi.java | 107 ++++++++++++++++++ .../com/twitter/clientlib/api/TweetsApi.java | 62 +--------- .../com/twitter/clientlib/model/DmEvent.java | 8 ++ .../twitter/clientlib/model/NewDmEvent.java | 28 +++++ .../model/ReplyToDmConversationResponse.java | 17 +++ 5 files changed, 165 insertions(+), 57 deletions(-) create mode 100644 src/main/java/com/twitter/clientlib/model/NewDmEvent.java create mode 100644 src/main/java/com/twitter/clientlib/model/ReplyToDmConversationResponse.java diff --git a/src/main/java/com/twitter/clientlib/api/DmApi.java b/src/main/java/com/twitter/clientlib/api/DmApi.java index c1afd18..0c4f2b8 100644 --- a/src/main/java/com/twitter/clientlib/api/DmApi.java +++ b/src/main/java/com/twitter/clientlib/api/DmApi.java @@ -5,7 +5,9 @@ import com.twitter.clientlib.ApiException; import com.twitter.clientlib.ApiResponse; import com.twitter.clientlib.Pair; +import com.twitter.clientlib.model.DmEvent; import com.twitter.clientlib.model.Get2DmEventsResponse; +import com.twitter.clientlib.model.ReplyToDmConversationResponse; import okhttp3.Call; import java.lang.reflect.Type; @@ -197,4 +199,109 @@ private okhttp3.Call findDmEventsCallAsync(Set tweetFields, Set public APIfindDmEventsRequest findDmEvents() { return new APIfindDmEventsRequest(); } + + public APIreplyToDmConversationRequest replyToDmConversation(String conversationId, String text) { + return new APIreplyToDmConversationRequest(conversationId, text); + } + + private Call replyToDmConversationValidateBeforeCall(String id, String text, ApiCallback _callback) throws ApiException { + if (id == null) { + throw new ApiException("Missing the required parameter 'id' when calling replyToDmConversation(Async)"); + } + + if (text == null) { + throw new ApiException("Missing the required parameter 'text' when calling replyToDmConversation(Async)"); + } + + okhttp3.Call localVarCall = replyToDmConversationCall(id, text, _callback); + return localVarCall; + } + + private ApiResponse replyToDmConversationWithHttpInfo(String id, String text) throws ApiException { + okhttp3.Call localVarCall = replyToDmConversationValidateBeforeCall(id, text, null); + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } + + private Call replyToDmConversationCallAsync(String id, String text, ApiCallback callback) throws ApiException { + okhttp3.Call localVarCall = replyToDmConversationValidateBeforeCall(id, text, callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, callback); + return localVarCall; + } + + private Call replyToDmConversationCall(String id, String text, ApiCallback _callback) throws ApiException { + Object localVarPostBody = new DmEvent(text); + + String localVarPath = "/2/dm_conversations/{id}/messages" + .replaceAll("\\{" + "id" + "\\}", localVarApiClient.escapeString(id.toString())); + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + final String[] localVarContentTypes = { + "application/json" + }; + final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes); + if (localVarContentType != null) { + localVarHeaderParams.put("Content-Type", localVarContentType); + } + + String[] localVarAuthNames = new String[] { "OAuth2UserToken", "UserToken" }; + return localVarApiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, reduceAuthNames(localVarAuthNames), _callback); + } + + public class APIreplyToDmConversationRequest { + + private final String id; + private final String text; + + public APIreplyToDmConversationRequest(String conversationId, String text) { + this.id = conversationId; + this.text = text; + } + + public okhttp3.Call buildCall(final ApiCallback _callback) throws ApiException { + return replyToDmConversationCall(id, text, _callback); + } + + public ReplyToDmConversationResponse execute() throws ApiException { + ApiResponse localVarResp = replyToDmConversationWithHttpInfo(id, text); + return localVarResp.getData(); + } + + public ReplyToDmConversationResponse execute(Integer retries) throws ApiException { + ReplyToDmConversationResponse localVarResp; + try{ + localVarResp = execute(); + } catch (ApiException e) { + if(handleRateLimit(e, retries)) { + return execute(retries - 1); + } else { + throw e; + } + } + return localVarResp; + } + + public ApiResponse executeWithHttpInfo() throws ApiException { + return replyToDmConversationWithHttpInfo(id, text); + } + + public okhttp3.Call executeAsync(final ApiCallback _callback) throws ApiException { + return replyToDmConversationCallAsync(id, text, _callback); + } + } + } diff --git a/src/main/java/com/twitter/clientlib/api/TweetsApi.java b/src/main/java/com/twitter/clientlib/api/TweetsApi.java index f726eb7..4a8284b 100644 --- a/src/main/java/com/twitter/clientlib/api/TweetsApi.java +++ b/src/main/java/com/twitter/clientlib/api/TweetsApi.java @@ -22,69 +22,17 @@ package com.twitter.clientlib.api; +import com.google.gson.reflect.TypeToken; import com.twitter.clientlib.ApiCallback; -import com.twitter.clientlib.ApiClient; -import com.twitter.clientlib.auth.*; import com.twitter.clientlib.ApiException; import com.twitter.clientlib.ApiResponse; -import com.twitter.clientlib.Configuration; import com.twitter.clientlib.Pair; -import com.twitter.clientlib.ProgressRequestBody; -import com.twitter.clientlib.ProgressResponseBody; - -import com.github.scribejava.core.model.OAuth2AccessToken; -import com.google.gson.reflect.TypeToken; - -import java.io.IOException; -import java.util.HashSet; - - -import com.twitter.clientlib.model.AddOrDeleteRulesRequest; -import com.twitter.clientlib.model.AddOrDeleteRulesResponse; -import com.twitter.clientlib.model.Error; -import com.twitter.clientlib.model.FilteredStreamingTweetResponse; -import com.twitter.clientlib.model.Get2ListsIdTweetsResponse; -import com.twitter.clientlib.model.Get2SpacesIdBuyersResponse; -import com.twitter.clientlib.model.Get2SpacesIdTweetsResponse; -import com.twitter.clientlib.model.Get2TweetsCountsAllResponse; -import com.twitter.clientlib.model.Get2TweetsCountsRecentResponse; -import com.twitter.clientlib.model.Get2TweetsIdQuoteTweetsResponse; -import com.twitter.clientlib.model.Get2TweetsIdResponse; -import com.twitter.clientlib.model.Get2TweetsResponse; -import com.twitter.clientlib.model.Get2TweetsSample10StreamResponse; -import com.twitter.clientlib.model.Get2TweetsSearchAllResponse; -import com.twitter.clientlib.model.Get2TweetsSearchRecentResponse; -import com.twitter.clientlib.model.Get2UsersIdLikedTweetsResponse; -import com.twitter.clientlib.model.Get2UsersIdMentionsResponse; -import com.twitter.clientlib.model.Get2UsersIdTimelinesReverseChronologicalResponse; -import com.twitter.clientlib.model.Get2UsersIdTweetsResponse; -import java.time.OffsetDateTime; -import com.twitter.clientlib.model.Problem; -import com.twitter.clientlib.model.RulesLookupResponse; -import java.util.Set; -import com.twitter.clientlib.model.StreamingTweetResponse; -import com.twitter.clientlib.model.TweetCreateRequest; -import com.twitter.clientlib.model.TweetCreateResponse; -import com.twitter.clientlib.model.TweetDeleteResponse; -import com.twitter.clientlib.model.TweetHideRequest; -import com.twitter.clientlib.model.TweetHideResponse; -import com.twitter.clientlib.model.UsersLikesCreateRequest; -import com.twitter.clientlib.model.UsersLikesCreateResponse; -import com.twitter.clientlib.model.UsersLikesDeleteResponse; -import com.twitter.clientlib.model.UsersRetweetsCreateRequest; -import com.twitter.clientlib.model.UsersRetweetsCreateResponse; -import com.twitter.clientlib.model.UsersRetweetsDeleteResponse; +import com.twitter.clientlib.model.*; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Arrays; import java.io.InputStream; -import javax.ws.rs.core.GenericType; - -import org.apache.commons.lang3.StringUtils; +import java.lang.reflect.Type; +import java.time.OffsetDateTime; +import java.util.*; public class TweetsApi extends ApiCommon { diff --git a/src/main/java/com/twitter/clientlib/model/DmEvent.java b/src/main/java/com/twitter/clientlib/model/DmEvent.java index 737bc7a..61205a5 100644 --- a/src/main/java/com/twitter/clientlib/model/DmEvent.java +++ b/src/main/java/com/twitter/clientlib/model/DmEvent.java @@ -24,6 +24,14 @@ public class DmEvent { @SerializedName("created_at") private OffsetDateTime createdAt; + public DmEvent() { + + } + + public DmEvent(String text) { + this.text = text; + } + public String getId() { return id; } diff --git a/src/main/java/com/twitter/clientlib/model/NewDmEvent.java b/src/main/java/com/twitter/clientlib/model/NewDmEvent.java new file mode 100644 index 0000000..2506bb2 --- /dev/null +++ b/src/main/java/com/twitter/clientlib/model/NewDmEvent.java @@ -0,0 +1,28 @@ +package com.twitter.clientlib.model; + +import com.google.gson.annotations.SerializedName; + +public class NewDmEvent { + + @SerializedName("dm_conversation_id") + private String dmConversationId; + + @SerializedName("dm_event_id") + private String dmEventId; + + public String getDmConversationId() { + return dmConversationId; + } + + public void setDmConversationId(String dmConversationId) { + this.dmConversationId = dmConversationId; + } + + public String getDmEventId() { + return dmEventId; + } + + public void setDmEventId(String dmEventId) { + this.dmEventId = dmEventId; + } +} diff --git a/src/main/java/com/twitter/clientlib/model/ReplyToDmConversationResponse.java b/src/main/java/com/twitter/clientlib/model/ReplyToDmConversationResponse.java new file mode 100644 index 0000000..de00d26 --- /dev/null +++ b/src/main/java/com/twitter/clientlib/model/ReplyToDmConversationResponse.java @@ -0,0 +1,17 @@ +package com.twitter.clientlib.model; + +import com.google.gson.annotations.SerializedName; + +public class ReplyToDmConversationResponse { + + @SerializedName("data") + private NewDmEvent data; + + public NewDmEvent getData() { + return data; + } + + public void setData(NewDmEvent data) { + this.data = data; + } +} From 1a41fbc8b944a2d3662944fe008b5aa71179d221 Mon Sep 17 00:00:00 2001 From: BernardoGiordano Date: Wed, 27 Dec 2023 10:02:02 +0100 Subject: [PATCH 3/5] Remove unsupported authentication --- src/main/java/com/twitter/clientlib/api/DmApi.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/twitter/clientlib/api/DmApi.java b/src/main/java/com/twitter/clientlib/api/DmApi.java index 0c4f2b8..5292e56 100644 --- a/src/main/java/com/twitter/clientlib/api/DmApi.java +++ b/src/main/java/com/twitter/clientlib/api/DmApi.java @@ -168,7 +168,7 @@ private Call findDmEventsCall(Set tweetFields, Set expansions, S localVarHeaderParams.put("Accept", localVarAccept); } - String[] localVarAuthNames = new String[] { "BearerToken", "OAuth2UserToken", "UserToken" }; + String[] localVarAuthNames = new String[] { "OAuth2UserToken" }; return localVarApiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, reduceAuthNames(localVarAuthNames), callback); } From 09116487edcd08fdae1b89078a38f6fe6517e4dc Mon Sep 17 00:00:00 2001 From: BernardoGiordano Date: Wed, 27 Dec 2023 10:03:12 +0100 Subject: [PATCH 4/5] Update version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index edf30f2..c39bd86 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ twitter-api-java-sdk jar twitter-api-java-sdk - 2.0.4-easy + 2.0.4 https://github.com/twitterdev/twitter-api-java-sdk Twitter API v2 available endpoints From 406667d6bde0d89834a0af11a021e56cc0bffecb Mon Sep 17 00:00:00 2001 From: BernardoGiordano Date: Wed, 27 Dec 2023 14:25:46 +0100 Subject: [PATCH 5/5] UserToken authentication --- src/main/java/com/twitter/clientlib/api/DmApi.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/twitter/clientlib/api/DmApi.java b/src/main/java/com/twitter/clientlib/api/DmApi.java index 5292e56..68ad24a 100644 --- a/src/main/java/com/twitter/clientlib/api/DmApi.java +++ b/src/main/java/com/twitter/clientlib/api/DmApi.java @@ -1,10 +1,7 @@ package com.twitter.clientlib.api; import com.google.gson.reflect.TypeToken; -import com.twitter.clientlib.ApiCallback; -import com.twitter.clientlib.ApiException; -import com.twitter.clientlib.ApiResponse; -import com.twitter.clientlib.Pair; +import com.twitter.clientlib.*; import com.twitter.clientlib.model.DmEvent; import com.twitter.clientlib.model.Get2DmEventsResponse; import com.twitter.clientlib.model.ReplyToDmConversationResponse; @@ -168,7 +165,7 @@ private Call findDmEventsCall(Set tweetFields, Set expansions, S localVarHeaderParams.put("Accept", localVarAccept); } - String[] localVarAuthNames = new String[] { "OAuth2UserToken" }; + String[] localVarAuthNames = new String[] { "OAuth2UserToken", "UserToken" }; return localVarApiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, reduceAuthNames(localVarAuthNames), callback); }