0

API Chatwork trong JAVA

Bạn thường xuyên sử dụng chatwork

  1. Gửi thông báo tới 1 người trong danh bạ
  2. Gửi thông báo tới 1 người trong 1 group
  3. Gửi thông báo tới 1 group
  4. Thu nhập thông tin từ service về chatwork
  5. 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

1.Cài đặt

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!

Screen Shot 2016-07-26 at 08.14.57.png

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

2.Sử dụng

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


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí