Java'da Google Takvimi Oluşturun, Güncelleyin veya Silin

Google Takvim, toplantılar gibi etkinlikleri oluşturmanıza ve takip etmenize olanak tanıyan bir planlama hizmetidir. Etkinlikleri takvime kaydedebilir ve yaklaşan etkinliklerle ilgili hatırlatıcılar alabilirsiniz. Google, takvim hizmetini programlı olarak kullanmanıza da izin verir. Böylece Google Takvimleri kullanarak etkinliklerinizi uygulamalarınız içinden yönetebilirsiniz. Bu makalede, Google Takvim’i Java’da programlı olarak nasıl oluşturacağınızı, güncelleyeceğinizi ve sileceğinizi öğreneceksiniz.

Google Takvimini Oluşturmak ve Yönetmek için Java API

Google Takvim hizmetiyle çalışmak için Aspose.Email for Java kullanacağız. E-postaları işlemek, e-posta istemcileriyle çalışmak ve Google’ın işbirliği hizmetlerini kullanmak için bir dizi özellik sağlayan güçlü bir API’dir. API’yi indirebilir veya aşağıdaki Maven yapılandırmalarını kullanarak yükleyebilirsiniz.

Depo:

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

Bağımlılık:

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

Java’da bir Google Takvimi oluşturun

Başlamadan önce, uygulamanızın Google hizmetleriyle iletişim kurabilmesi için Google Developer Console’da bir proje oluşturmanız gerekir. Bir tane oluşturmak için [bu kılavuzu] takip edebilirsiniz]4.

Şimdi, bir Google hesabının kimlik doğrulamasıyla ilgilenmek için GoogleOAuthHelper adlı bir yardımcı sınıf oluşturun. Ayrıca, kullanıcı bilgilerini depolamak için OAuthUser adlı bir sınıf oluşturun. Aşağıdakiler, her iki sınıfın da tam uygulamasıdır.

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>
 * Geliştirici konsolu https://console.developers.google.com/projectselector/apis/credentials?pli=1 
 * Belgeler 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) {
            // aldırmamak
        }
        return result.toString();
    }
}

Yukarıdaki yapılandırmayı yaptıktan sonra, Google Takvim hizmetiyle çalışmaya devam edebilirsiniz. Java’da bir Google Takvimi oluşturma ve güncelleme adımları aşağıdadır.

Aşağıdaki kod örneği, Java’da bir Google Takviminin nasıl oluşturulacağını gösterir.

OAuthUser user = new OAuthUser();

// clientId, clientSecret ve e-postayı ayarlayın 
user.clientId = "<<clientID>>"; 
user.clientSecret = "<<clientSecret>>"; 
user.email = "<<email>>";

// AuthorizationCode'u, oluşturulan AuthorizationCodeUrl ile manuel olarak almanız gerekir.
// Yetkilendirme kodunu ayarla
String authorizationCode = "<<authCode>>";

// Kod Doğrulayıcıyı önceki adım çıktısından kopyala
// codeVerifier'ı ayarla
String codeVerifier = "<<codeVerifier>>";

// Yenileme Simgesini Alın
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;

// Erişim izni almak
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);

// Gmail istemcisi oluştur
try (IGmailClient client = GmailClient.getInstance(accessToken, user.email)) {
    // Takvim ekleyin, alın ve güncelleyin
    Calendar calendar = new Calendar("Summary", "Description", "Location", "America/Los_Angeles");

    // Kimliği kullanarak takvim ekle ve aynı takvimi al
    String id = client.createCalendar(calendar);
}

Java’da bir Google Takvimini güncelleyin

Aşağıda, bir Google Takvimini Java’da programlı olarak güncelleme adımları yer almaktadır.

Aşağıdaki kod örneği, Java’da bir Google takviminin nasıl güncelleneceğini gösterir.

// Gmail istemcisi oluştur
try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
    // Takvim kimliğini belirtin
    String id ="<<calendar ID>>"
      
    // takvimi getir
    Calendar cal = client.fetchCalendar(id);

    // Alınan takvimdeki bilgileri değiştirin ve takvimi güncelleyin
    cal.setDescription("New Description");
    cal.setLocation("New Location");
  
    // Takvimi güncelle
    client.updateCalendar(cal);
}

Java’da bir Google Takvimini silme

Aspose.Email for Java’yı kullanarak da belirli bir takvimi silebilirsiniz. Bu işlemi gerçekleştirmek için adımlar aşağıdadır.

Aşağıdaki kod örneği, Java’da bir Google Takviminin nasıl silineceğini gösterir.

// Gmail istemcisi oluştur
try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
    // "Takvim özeti"nden başlayarak özet içeren takvime erişin ve silin
    String summary = "Calendar summary";

    // Takvim listesini al
    ExtendedCalendar[] lst = client.listCalendars();

   for (ExtendedCalendar extCal : lst) {
        // Seçilen takvimleri sil
        if (extCal.getSummary().startsWith(summary))
            client.deleteCalendar(extCal.getId());
    }
}

Ücretsiz API Lisansı Alın

Aspose.Email for Java’yı değerlendirme sınırlamaları olmaksızın kullanmak için ücretsiz geçici lisans alabilirsiniz.

Çözüm

Bu makalede, Java’da programlı olarak Google Takvim oluşturmayı öğrendiniz. Ayrıca, Java’da belirli bir Google Takviminin nasıl güncelleneceğini ve silineceğini gördünüz. Ayrıca Aspose.Email for Java hakkında daha fazlasını okumak için belgeleri inceleyebilirsiniz. Ayrıca sorularınızı forumumuz aracılığıyla da sorabilirsiniz.

Ayrıca bakınız