สร้าง อัปเดต หรือลบ Google ปฏิทินใน Java

Google ปฏิทิน คือบริการจัดตารางเวลาที่ให้คุณสร้างและติดตามกิจกรรมต่างๆ เช่น การประชุม คุณสามารถบันทึกกิจกรรมในปฏิทินและรับการแจ้งเตือนเกี่ยวกับกิจกรรมที่จะเกิดขึ้น Google ยังอนุญาตให้คุณใช้บริการปฏิทินโดยทางโปรแกรม ดังนั้น คุณสามารถจัดการกิจกรรมของคุณโดยใช้ Google ปฏิทินจากภายในแอปพลิเคชันของคุณ ในบทความนี้ คุณจะได้เรียนรู้วิธีสร้าง อัปเดต และลบ Google ปฏิทินทางโปรแกรมใน Java

Java API เพื่อสร้างและจัดการ Google ปฏิทิน

ในการทำงานร่วมกับบริการ Google ปฏิทิน เราจะใช้ Aspose.Email for Java เป็น API ที่มีประสิทธิภาพซึ่งมีคุณลักษณะต่างๆ สำหรับการประมวลผลอีเมล ทำงานกับอีเมลไคลเอ็นต์ และใช้บริการการทำงานร่วมกันของ Google คุณสามารถ ดาวน์โหลด API หรือติดตั้งโดยใช้การกำหนดค่า Maven ต่อไปนี้

พื้นที่เก็บข้อมูล:

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>http://repository.aspose.com/repo/</url>
</repository>

การพึ่งพา:

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-email</artifactId>
    <version>22.3</version>
    <classifier>jdk16</classifier>
</dependency>

สร้าง Google ปฏิทินใน Java

ก่อนเริ่ม คุณต้องสร้างโครงการบน Google Developer Console เพื่อให้แอปพลิเคชันของคุณสื่อสารกับบริการของ Google หากต้องการสร้าง คุณสามารถทำตาม คู่มือนี้

ตอนนี้ สร้างคลาสผู้ช่วยเหลือชื่อ GoogleOAuthHelper เพื่อดูแลการรับรองความถูกต้องของบัญชี Google สร้างคลาสชื่อ OAuthUser เพื่อเก็บข้อมูลผู้ใช้ ต่อไปนี้คือการใช้งานทั้งสองคลาสอย่างสมบูรณ์

public class OAuthUser {
        String email;
        String clientId;
        String clientSecret;
        String refreshToken;
    }
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import javax.xml.bind.DatatypeConverter;

/**
 * <p>
 * คอนโซลนักพัฒนา https://console.developers.google.com/projectselector/apis/credentials?pli=1 
 * เอกสาร https://developers.google.com/identity/protocols/OAuth2InstalledApp
 * </p>
 */
class GoogleOAuthHelper {
    public static final String AUTHORIZATION_URL = "https://accounts.google.com/o/oauth2/v2/auth";
    public static final String TOKEN_REQUEST_URL = "https://oauth2.googleapis.com/token";
    public static final String REDIRECT_URI = "urn:ietf:wg:oauth:2.0:oob";
    public static final String REDIRECT_TYPE = "code";
    public static final String SCOPE = "https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar" // Calendar
            + "+https%3A%2F%2Fwww.google.com%2Fm8%2Ffeeds%2F" // Contacts
            + "+https%3A%2F%2Fmail.google.com%2F"; // IMAP & SMTP

    static String createCodeChalange() {
        String verifierStr = UUID.randomUUID().toString() + "-" + UUID.randomUUID().toString();
        System.out.println("Code Verifier: " + verifierStr);

        MessageDigest digest;
        try {
            digest = MessageDigest.getInstance("SHA-256");
        } catch (NoSuchAlgorithmException e) {
            throw new IllegalAccessError(e.getMessage());
        }
        byte[] hash = digest.digest(verifierStr.getBytes(StandardCharsets.UTF_8));
        String base64Hash = DatatypeConverter.printBase64Binary(hash);

        base64Hash = base64Hash.split("=")[0];
        base64Hash = base64Hash.replace('+', '-').replace('/', '_');
        return base64Hash;
    }

    static String getAuthorizationCodeUrl(OAuthUser acc) {
        return getAuthorizationCodeUrl(acc, SCOPE, REDIRECT_URI, REDIRECT_TYPE);
    }

    static String getAuthorizationCodeUrl(OAuthUser acc, String scope, String redirectUri, String responseType) {
        System.out.println("---------------------------------------------------------");
        System.out.println("------------- OAuth 2.0 AuthorizationCodeUrl -------------");
        System.out.println("---------------------------------------------------------");
        System.out.println("Login: " + acc.email);
        String codeChallenge = createCodeChalange();

        String state = urlEncode(UUID.randomUUID().toString());
        String approveUrl = AUTHORIZATION_URL + "?client_id=" + acc.clientId + "&redirect_uri=" + redirectUri + "&response_type=" + responseType + "&scope=" + scope
                + "&code_challenge=" + codeChallenge + "&code_challenge_method=S256&state=" + state;

        System.out.println("Approve Url: " + approveUrl);
        return approveUrl;
    }

    static String urlEncode(String value) {
        try {
            return URLEncoder.encode(value, StandardCharsets.UTF_8.toString());
        } catch (UnsupportedEncodingException e) {
            throw new IllegalAccessError(e.getMessage());
        }
    }

    static String urlDecode(String value) {
        try {
            return URLDecoder.decode(value, StandardCharsets.UTF_8.toString());
        } catch (UnsupportedEncodingException e) {
            throw new IllegalAccessError(e.getMessage());
        }
    }

    static String getAccessTokenByAuthCode(String authorizationCode, String codeVerifier, OAuthUser user) {
        String encodedParameters = "client_id=" + urlEncode(user.clientId) + "&client_secret=" + urlEncode(user.clientSecret) + "&code=" + urlEncode(authorizationCode)
                + "&code_verifier=" + codeVerifier + "&redirect_uri=" + urlEncode(REDIRECT_URI) + "&grant_type=authorization_code";
        System.out.println("---------------------------------------------------------");
        System.out.println("------------- OAuth 2.0 AccessTokenByAuthCode -------------");
        System.out.println("---------------------------------------------------------");
        System.out.println("Authorization code: " + authorizationCode);

        String result = "";
        Map<String, String> token = geToken(encodedParameters);
       for (String key : token.keySet()) {
            System.out.println(key + ": " + token.get(key));
            if (key.equals("refresh_token")) {
                result = token.get(key);
            }
        }

        System.out.println("---------------------------------------------------------");

        return result;
    }

    static String getAccessTokenByRefreshToken(OAuthUser user) {
        String encodedParameters = "client_id=" + urlEncode(user.clientId) + "&client_secret=" + urlEncode(user.clientSecret) + "&refresh_token=" + urlEncode(user.refreshToken)
                + "&grant_type=refresh_token";
        System.out.println("---------------------------------------------------------");
        System.out.println("----------- OAuth 2.0 AccessTokenByRefreshToken -----------");
        System.out.println("---------------------------------------------------------");
        System.out.println("Login: " + user.email);

        String result = "";
        Map<String, String> token = geToken(encodedParameters);
       for (String key : token.keySet()) {
            System.out.println(key + ": " + token.get(key));
            if (key.equals("access_token")) {
                result = token.get(key);
            }
        }

        System.out.println("---------------------------------------------------------");

        return result;
    }

    static Map<String, String> geToken(String encodedParameters) {
        try {
            HttpURLConnection connection = (HttpURLConnection) new URL(TOKEN_REQUEST_URL).openConnection();
            connection.setRequestMethod("POST");

            byte[] requestData = encodedParameters.getBytes(StandardCharsets.UTF_8);

            connection.setUseCaches(false);
            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            connection.setRequestProperty("Content-Length", "" + requestData.length);

            final OutputStream st = connection.getOutputStream();
            try {
                st.write(requestData, 0, requestData.length);
            } finally {
                st.flush();
                st.close();
            }

            connection.connect();

            if (connection.getResponseCode() >= HttpURLConnection.HTTP_BAD_REQUEST) {
                throw new IllegalAccessError("Operation failed: " + connection.getResponseCode() + "/" + connection.getResponseMessage() + "\r\nDetails:\r\n{2}"
                        + readInputStream(connection.getErrorStream()));
            }

            String responseText = readInputStream(connection.getInputStream());

            Map<String, String> result = new HashMap<String, String>();
            System.out.println(responseText);
            String[] strs = responseText.replace("{", "").replace("}", "").replace("\"", "").replace("\r", "").replace("\n", "").split(",");
           for (String sPair : strs) {
                String[] pair = sPair.split(":");
                String name = pair[0].trim().toLowerCase();
                String value = urlDecode(pair[1].trim());
                result.put(name, value);
            }

            return result;
        } catch (IOException e) {
            throw new IllegalAccessError(e.getMessage());
        }
    }

    static String readInputStream(InputStream is) {
        if (is == null)
            return "";

        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder result = new StringBuilder();
        String line;
        try {
            while ((line = reader.readLine()) != null) {
                result.append(line);
            }
        } catch (IOException e) {
            // ไม่สนใจ
        }
        return result.toString();
    }
}

เมื่อคุณกำหนดค่าข้างต้นเสร็จแล้ว คุณสามารถดำเนินการกับบริการ Google ปฏิทินได้ ต่อไปนี้เป็นขั้นตอนในการสร้างและอัปเดต Google ปฏิทินใน Java

  • รับอินสแตนซ์ของคลาส GmailClient ลงในวัตถุ IGmailClient โดยใช้เมธอด GmailClient.getInstance(String, String)
  • สร้างอินสแตนซ์ของคลาส Calendar และเริ่มต้นด้วยชื่อ คำอธิบาย และคุณสมบัติอื่นๆ
  • เรียกเมธอด IGmailClient.createCalendar(Calendar) เพื่อสร้าง Google ปฏิทิน
  • รับ ID ที่ส่งคืนของปฏิทิน

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีสร้าง Google ปฏิทินใน Java

OAuthUser user = new OAuthUser();

// ตั้งค่ารหัสไคลเอนต์, ไคลเอ็นต์ซีเคร็ต และอีเมล 
user.clientId = "<<clientID>>"; 
user.clientSecret = "<<clientSecret>>"; 
user.email = "<<email>>";

// คุณต้องดึง AuthorizationCode ด้วยตนเองด้วย AuthorizationCodeUrl ที่สร้างขึ้น
// ตั้งรหัสการให้สิทธิ์
String authorizationCode = "<<authCode>>";

// คัดลอก Code Verifier จากเอาต์พุตขั้นตอนก่อนหน้า
// ตั้งรหัสVerifier
String codeVerifier = "<<codeVerifier>>";

// รับโทเค็นการรีเฟรช
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;

// รับโทเค็นการเข้าถึง
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);

// สร้างไคลเอนต์ Gmail
try (IGmailClient client = GmailClient.getInstance(accessToken, user.email)) {
    // แทรก รับ และอัปเดตปฏิทิน
    Calendar calendar = new Calendar("Summary", "Description", "Location", "America/Los_Angeles");

    // แทรกปฏิทินและดึงปฏิทินเดียวกันโดยใช้ id
    String id = client.createCalendar(calendar);
}

อัปเดต Google ปฏิทินใน Java

ต่อไปนี้เป็นขั้นตอนในการอัปเดต Google ปฏิทินโดยทางโปรแกรมใน Java

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีอัปเดตปฏิทิน Google ใน Java

// สร้างไคลเอนต์ Gmail
try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
    // ระบุรหัสปฏิทิน
    String id ="<<calendar ID>>"
      
    // เรียกปฏิทิน
    Calendar cal = client.fetchCalendar(id);

    // เปลี่ยนข้อมูลในปฏิทินที่ดึงมาและอัปเดตปฏิทิน
    cal.setDescription("New Description");
    cal.setLocation("New Location");
  
    // อัพเดทปฏิทิน
    client.updateCalendar(cal);
}

ลบ Google ปฏิทินใน Java

คุณยังสามารถลบปฏิทินที่ต้องการได้โดยใช้ Aspose.Email for Java ต่อไปนี้เป็นขั้นตอนในการดำเนินการนี้

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการลบ Google ปฏิทินใน Java

// สร้างไคลเอนต์ Gmail
try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
    // เข้าถึงและลบปฏิทินพร้อมสรุปโดยเริ่มจาก "สรุปปฏิทิน"
    String summary = "Calendar summary";

    // รับรายการปฏิทิน
    ExtendedCalendar[] lst = client.listCalendars();

   for (ExtendedCalendar extCal : lst) {
        // ลบปฏิทินที่เลือก
        if (extCal.getSummary().startsWith(summary))
            client.deleteCalendar(extCal.getId());
    }
}

รับใบอนุญาต API ฟรี

คุณสามารถรับ ใบอนุญาตชั่วคราวฟรี เพื่อใช้ Aspose.Email for Java โดยไม่มีข้อจำกัดในการประเมิน

บทสรุป

ในบทความนี้ คุณได้เรียนรู้วิธีสร้าง Google ปฏิทินแบบเป็นโปรแกรมใน Java นอกจากนี้ คุณได้เห็นวิธีอัปเดตและลบ Google ปฏิทินเฉพาะใน Java นอกจากนี้ คุณสามารถสำรวจ เอกสารประกอบ เพื่ออ่านเพิ่มเติมเกี่ยวกับ Aspose.Email for Java นอกจากนี้ คุณสามารถถามคำถามผ่าน ฟอรัม ของเรา

ดูสิ่งนี้ด้วย