API Chatwork trong JAVA
Bạn thường xuyên sử dụng chatwork Gửi thông báo tới 1 người trong danh bạ Gửi thông báo tới 1 người trong 1 group Gửi thông báo tới 1 group Thu nhập thông tin từ service về chatwork Thu nhập các thống kê về chatwork Vậy bạn sẽ làm gì? Để không phải thực hiện thủ công những việc đó, ...
Bạn thường xuyên sử dụng chatwork
- Gửi thông báo tới 1 người trong danh bạ
- Gửi thông báo tới 1 người trong 1 group
- Gửi thông báo tới 1 group
- Thu nhập thông tin từ service về chatwork
- Thu nhập các thống kê về chatwork
Vậy bạn sẽ làm gì? Để không phải thực hiện thủ công những việc đó, chatwork đã có API để thực hiện. Sau đây mình sẽ giới thiệu về các thực hiện với JAVA
Trước hết để lấy TOKEN_KEY account chatwork, bạn click vào tại API key
Sau đó, bạn sẽ nhận đươc 1 email chatwork báo về, nội dung chỉ là thông báo bạn đã kích hoạt thành công việc lấy TOKEN_KEY.
Bây giờ bạn vào chatwork, logout ra nếu đang login. Vào mục Personal Setting -> API để lấy API!
Lưu ý TOKEN_KEY là bảo mật, nếu bị lộ TOKEN_KEY thì người khác hoàn toàn có thể dùng key của bạn để gửi, nếu bị lộ bạn có thể tạo lại key khác bằng cách ấn vào nút Regenarate
Sau khi đã có TOKEN, bạn tiến hành download file ChatworkClient.java của chatwork plugin
package vn.framgia; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.ProxyHost; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.lang3.StringUtils; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.type.TypeReference; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; public class ChatworkClient { private final String apiKey; private final String proxySv; private final String proxyPort; private static final String API_URL = "https://api.chatwork.com/v1"; private static final CachedResponse<List<Room>> CACHED_ROOMS = new CachedResponse<List<Room>>(); private final HttpClient httpClient = new HttpClient(); public ChatworkClient(String apiKey, String proxySv, String proxyPort) { if (StringUtils.isBlank(apiKey)) { throw new IllegalArgumentException("API Key is blank"); } this.apiKey = apiKey; this.proxySv = proxySv; this.proxyPort = proxyPort; } public void sendMessage(String roomId, String message) throws IOException { if (StringUtils.isEmpty(roomId)) { throw new IllegalArgumentException("Room ID is empty"); } Map<String, String> params = new HashMap<String, String>(); params.put("body", message); post("/rooms/" + roomId + "/messages", params); } public List<Room> getRooms() throws IOException { String json = get("/rooms"); ObjectMapper mapper = new ObjectMapper(); return mapper.readValue(json, new TypeReference<List<Room>>() {}); } public List<Room> getCachedRooms() throws IOException { return CACHED_ROOMS.fetch(new CachedResponse.Callback<List<Room>>() { public List<Room> get() throws IOException { return getRooms(); } }); } public static void clearRoomCache(){ CACHED_ROOMS.clear(); } private void post(String path, Map<String, String> params) throws IOException { PostMethod method = new PostMethod(API_URL + path); try { method.addRequestHeader("X-ChatWorkToken", apiKey); method.addRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8"); for(Map.Entry<String, String> entry : params.entrySet()) { method.setParameter(entry.getKey(), entry.getValue()); } if(isEnabledProxy()){ setProxyHost(proxySv, Integer.parseInt(proxyPort)); } int statusCode = httpClient.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { String response = method.getResponseBodyAsString(); throw new ChatworkException("Response is not valid. Check your API Key or Chatwork API status. response_code = " + statusCode + ", message =" + response); } } finally { method.releaseConnection(); } } private String get(String path) throws IOException { GetMethod method = new GetMethod(API_URL + path); try { method.addRequestHeader("X-ChatWorkToken", apiKey); if(isEnabledProxy()){ setProxyHost(proxySv, Integer.parseInt(proxyPort)); } int statusCode = httpClient.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { String response = method.getResponseBodyAsString(); throw new ChatworkException("Response is not valid. Check your API Key or Chatwork API status. response_code = " + statusCode + ", message =" + response); } return method.getResponseBodyAsString(); } finally { method.releaseConnection(); } } public boolean isEnabledProxy(){ if(StringUtils.isBlank(proxySv) || StringUtils.isBlank(proxyPort) || StringUtils.equals(proxySv, "NOPROXY")){ return false; } try { Integer.parseInt(proxyPort); } catch (NumberFormatException e){ // proxyPort is not number return false; } return true; } public void setProxyHost(String hostname, int port){ httpClient.getHostConfiguration().setProxyHost(new ProxyHost(hostname, port)); } }
Ví dụ về lấy toàn bộ thông tin room và gửi message đến room
package vn.framgia; import java.io.IOException; import java.util.List; import java.util.stream.Collectors; /** * Created by ngo.dinh.ngoc on 7/26/16. */ public class MainActivity { // Replace your token private static final String TOKEN_KEY = "2238c0751ddaef806ba25525acfc202a"; public static void main(String[] args) { ChatworkClient chatworkClient = new ChatworkClient(TOKEN_KEY, "", ""); try { // Get list room List<Room> roomList = chatworkClient.getRooms(); for (Room r : roomList) { System.out.println(r.roomId + " : " + r.name); } // Send message String roomId = "30565861"; chatworkClient.sendMessage(roomId, "Hello World"); } catch (IOException e) { e.printStackTrace(); } } }
Để tham khảo thêm các chức năng API chatwork các bạn có thể truy cập địa chỉ Chartwork API Document
Source code ChatworkAPISourceDemo