ZCH-20 更新 Post 的方法
This commit is contained in:
parent
223d951d62
commit
259050ba8d
|
@ -13,7 +13,8 @@ public abstract class DiscourseClient {
|
||||||
public static String site_url = "https://www.zchub.net/";// base url. e.g. http://your_discourse_domain.com
|
public static String site_url = "https://www.zchub.net/";// base url. e.g. http://your_discourse_domain.com
|
||||||
public static String api_key = "";
|
public static String api_key = "";
|
||||||
public static String api_username = "";
|
public static String api_username = "";
|
||||||
public ObjectMapper objectMapper = new ObjectMapper();
|
public ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
|
||||||
public Request getRequest(String path) {
|
public Request getRequest(String path) {
|
||||||
HttpUrl.Builder urlBuilder = HttpUrl.parse(site_url + path).newBuilder();
|
HttpUrl.Builder urlBuilder = HttpUrl.parse(site_url + path).newBuilder();
|
||||||
Request request = new Request.Builder().url(urlBuilder.build().toString())
|
Request request = new Request.Builder().url(urlBuilder.build().toString())
|
||||||
|
@ -34,4 +35,14 @@ public abstract class DiscourseClient {
|
||||||
return request;
|
return request;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Request putRequest(String path, RequestBody body) {
|
||||||
|
HttpUrl.Builder urlBuilder = HttpUrl.parse(site_url + path).newBuilder();
|
||||||
|
Request request = new Request.Builder().url(urlBuilder.build().toString())
|
||||||
|
.addHeader("api-username", api_username)
|
||||||
|
.addHeader("api-key", api_key)
|
||||||
|
.put(body)
|
||||||
|
.build();
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,17 @@
|
||||||
package com.ossez.discourse.client.service;
|
package com.ossez.discourse.client.service;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
|
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
|
||||||
import com.ossez.discourse.client.DiscourseClient;
|
import com.ossez.discourse.client.DiscourseClient;
|
||||||
import com.ossez.discourse.common.model.dto.Post;
|
import com.ossez.discourse.common.model.dto.Post;
|
||||||
|
import com.ossez.discourse.common.model.dto.PostUpdate;
|
||||||
|
import okhttp3.MediaType;
|
||||||
import okhttp3.OkHttpClient;
|
import okhttp3.OkHttpClient;
|
||||||
|
import okhttp3.RequestBody;
|
||||||
import okhttp3.Response;
|
import okhttp3.Response;
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.apache.commons.lang3.math.NumberUtils;
|
||||||
import org.apache.http.HttpStatus;
|
import org.apache.http.HttpStatus;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -55,4 +61,34 @@ public class PostsService extends DiscourseClient {
|
||||||
}
|
}
|
||||||
return post;
|
return post;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Optional<Post> updatePost(PostUpdate postUpdate) {
|
||||||
|
if (ObjectUtils.isEmpty(postUpdate.getId()))
|
||||||
|
throw new RuntimeException("Post Id is empty, not able to update a post.");
|
||||||
|
|
||||||
|
String path = "posts/" + String.valueOf(postUpdate.getId()) + ".json";
|
||||||
|
|
||||||
|
Optional<Post> post = Optional.ofNullable(new Post());
|
||||||
|
try {
|
||||||
|
RequestBody body = RequestBody.create(
|
||||||
|
MediaType.parse("application/json"), objectMapper.writeValueAsString(postUpdate));
|
||||||
|
Response response = client.newCall(putRequest(path, body)).execute();
|
||||||
|
String responseStr = response.body().string();
|
||||||
|
JsonNode jsonNode = objectMapper.readTree(responseStr);
|
||||||
|
|
||||||
|
if (response.code() == HttpStatus.SC_OK) {
|
||||||
|
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||||
|
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
|
||||||
|
|
||||||
|
if (ObjectUtils.isNotEmpty(jsonNode.get("post"))) {
|
||||||
|
post = Optional.of(objectMapper.treeToValue(jsonNode.get("post"), Post.class));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
return post;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ import com.ossez.discourse.common.model.WeChatStatus;
|
||||||
import com.ossez.discourse.common.model.req.CustomMessage;
|
import com.ossez.discourse.common.model.req.CustomMessage;
|
||||||
import com.ossez.discourse.common.model.req.DataCubeRequest;
|
import com.ossez.discourse.common.model.req.DataCubeRequest;
|
||||||
import com.ossez.discourse.common.model.req.NetworkCheck;
|
import com.ossez.discourse.common.model.req.NetworkCheck;
|
||||||
import com.ossez.discourse.common.model.req.QueryQuota;
|
import com.ossez.discourse.common.model.dto.PostUpdate;
|
||||||
import com.ossez.discourse.common.model.res.DataCubeArticle;
|
import com.ossez.discourse.common.model.res.DataCubeArticle;
|
||||||
import com.ossez.discourse.common.model.res.DataCubeUser;
|
import com.ossez.discourse.common.model.res.DataCubeUser;
|
||||||
import com.ossez.discourse.common.model.res.NetworkCheckResponse;
|
import com.ossez.discourse.common.model.res.NetworkCheckResponse;
|
||||||
|
@ -27,7 +27,7 @@ public interface WeChatOfficialAccountApi {
|
||||||
Single<NetworkCheckResponse> clearQuota(@Body NetworkCheck request);
|
Single<NetworkCheckResponse> clearQuota(@Body NetworkCheck request);
|
||||||
|
|
||||||
@POST("/cgi-bin/openapi/quota/get")
|
@POST("/cgi-bin/openapi/quota/get")
|
||||||
Single<QueryQuotaResponse> queryQuota(@Body QueryQuota request);
|
Single<QueryQuotaResponse> queryQuota(@Body PostUpdate request);
|
||||||
|
|
||||||
@POST("/cgi-bin/message/custom/send")
|
@POST("/cgi-bin/message/custom/send")
|
||||||
Single<WeChatStatus> sendMessage(@Body CustomMessage customMessage);
|
Single<WeChatStatus> sendMessage(@Body CustomMessage customMessage);
|
||||||
|
|
|
@ -1,14 +1,19 @@
|
||||||
package com.ossez.discourse.client.test;
|
package com.ossez.discourse.client.test;
|
||||||
|
|
||||||
|
import org.apache.commons.io.StandardLineSeparator;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.ossez.discourse.client.service.PostsService;
|
import com.ossez.discourse.client.service.PostsService;
|
||||||
import com.ossez.discourse.common.exception.DiscourseErrorException;
|
import com.ossez.discourse.common.exception.DiscourseErrorException;
|
||||||
|
import com.ossez.discourse.common.model.dto.PostUpdate;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.TestInstance;
|
import org.junit.jupiter.api.TestInstance;
|
||||||
import org.junit.jupiter.api.TestInstance.Lifecycle;
|
import org.junit.jupiter.api.TestInstance.Lifecycle;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test for datacube API
|
* Test for datacube API
|
||||||
*
|
*
|
||||||
|
@ -26,11 +31,24 @@ public class PostsServiceTest extends TestBase {
|
||||||
* @throws DiscourseErrorException
|
* @throws DiscourseErrorException
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testCreate() throws DiscourseErrorException {
|
public void testCreatePost() throws DiscourseErrorException {
|
||||||
log.debug("Create WeChat Offical Account Menun Test");
|
log.debug("Create WeChat Offical Account Menun Test");
|
||||||
log.debug("{}", postsService.getPost(Long.valueOf("1245")).get().getRaw());
|
log.debug("{}", postsService.getPost(Long.valueOf("1245")).get().getRaw());
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUpdatePost() throws DiscourseErrorException {
|
||||||
|
log.debug("Discourse Update Post Test");
|
||||||
|
PostUpdate postUpdate = new PostUpdate();
|
||||||
|
postUpdate.setId(DISCOURSE_POST_ID);
|
||||||
|
|
||||||
|
StringBuilder rawBuilder = new StringBuilder().append(DISCOURSE_TOPIC_CONTENT);
|
||||||
|
rawBuilder.append(StandardLineSeparator.CRLF.getString());
|
||||||
|
rawBuilder.append(UUID.randomUUID().toString());
|
||||||
|
postUpdate.setRaw(rawBuilder.toString());
|
||||||
|
|
||||||
|
log.debug("{}", postsService.updatePost(postUpdate).get().getRaw());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ public class TestBase {
|
||||||
public static final Long DISCOURSE_POST_ID = 594L;
|
public static final Long DISCOURSE_POST_ID = 594L;
|
||||||
public static final Long DISCOURSE_TOPIC_ID = 570L;
|
public static final Long DISCOURSE_TOPIC_ID = 570L;
|
||||||
public static final String DISCOURSE_TOPIC_TITLE = "ZCHub Discourse API Test";
|
public static final String DISCOURSE_TOPIC_TITLE = "ZCHub Discourse API Test";
|
||||||
|
public static final String DISCOURSE_TOPIC_CONTENT = "ZCHub Discourse API Test";
|
||||||
public static final String DISCOURSE_TOPIC_TITLE_CREATE = "ZCHub Discourse API Test - CREATE";
|
public static final String DISCOURSE_TOPIC_TITLE_CREATE = "ZCHub Discourse API Test - CREATE";
|
||||||
|
|
||||||
@BeforeAll
|
@BeforeAll
|
||||||
|
|
|
@ -77,18 +77,21 @@
|
||||||
<groupId>com.google.code.gson</groupId>
|
<groupId>com.google.code.gson</groupId>
|
||||||
<artifactId>gson</artifactId>
|
<artifactId>gson</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-codec</groupId>
|
<groupId>org.apache.commons</groupId>
|
||||||
<artifactId>commons-codec</artifactId>
|
<artifactId>commons-lang3</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-io</groupId>
|
<groupId>commons-io</groupId>
|
||||||
<artifactId>commons-io</artifactId>
|
<artifactId>commons-io</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.commons</groupId>
|
<groupId>commons-codec</groupId>
|
||||||
<artifactId>commons-lang3</artifactId>
|
<artifactId>commons-codec</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.guava</groupId>
|
<groupId>com.google.guava</groupId>
|
||||||
<artifactId>guava</artifactId>
|
<artifactId>guava</artifactId>
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
package com.ossez.discourse.common.model.dto;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PostUpdate Data Object
|
||||||
|
*
|
||||||
|
* @author YuCheng Hu
|
||||||
|
*/
|
||||||
|
public class PostUpdate implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -227183546475863573L;
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
private String raw;
|
||||||
|
private String editReason;
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRaw() {
|
||||||
|
return raw;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRaw(String raw) {
|
||||||
|
this.raw = raw;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEditReason() {
|
||||||
|
return editReason;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEditReason(String editReason) {
|
||||||
|
this.editReason = editReason;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,22 +0,0 @@
|
||||||
package com.ossez.discourse.common.model.req;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* WeChatAccessToken Response Object
|
|
||||||
*
|
|
||||||
* @author YuCheng Hu
|
|
||||||
*/
|
|
||||||
public class QueryQuota {
|
|
||||||
@JsonProperty("cgi_path")
|
|
||||||
private String cgiPath = "/cgi-bin/message/custom/send";
|
|
||||||
|
|
||||||
public String getCgiPath() {
|
|
||||||
return cgiPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCgiPath(String cgiPath) {
|
|
||||||
this.cgiPath = cgiPath;
|
|
||||||
}
|
|
||||||
}
|
|
4
pom.xml
4
pom.xml
|
@ -96,6 +96,8 @@
|
||||||
<artifactId>httpmime</artifactId>
|
<artifactId>httpmime</artifactId>
|
||||||
<version>${httpclient.version}</version>
|
<version>${httpclient.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- APACHE COMMONS -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-codec</groupId>
|
<groupId>commons-codec</groupId>
|
||||||
<artifactId>commons-codec</artifactId>
|
<artifactId>commons-codec</artifactId>
|
||||||
|
@ -104,7 +106,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-io</groupId>
|
<groupId>commons-io</groupId>
|
||||||
<artifactId>commons-io</artifactId>
|
<artifactId>commons-io</artifactId>
|
||||||
<version>2.7</version>
|
<version>2.14.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.commons</groupId>
|
<groupId>org.apache.commons</groupId>
|
||||||
|
|
Loading…
Reference in New Issue