Moim zadaniem było umożliwić studentom eksportowanie planu zajęć do prywatnego kalendarza.
Poniżej przedstawiam wam czego się nauczyłem.
Co będzie nam potrzebne?
- lista niezbędnych rzeczy znajduje się tutaj,
- biblioteki samego kalendarza pobieramy stąd.
1. Logowanie
Google API zapewnia nam kilka sposobów logowania się do naszego konta - ja korzystam z podawania loginu i hasła - ogranicza się to do dwóch linii kodu.
service = new CalendarService("isod-export");
service.setUserCredentials(login, password);
Powyższy kod tworzy service o nazwie "isod-export" - Jest to nazwa którą sam stworzyłem, nie ma ona żadnego znaczenia. Uwierzytelnienie znajduje się w drugiej linii.Po nawiązaniu połączenia możemy zacząć zabawę. Zaczynamy od pobrania listy kalendarzy - interesują nas tylko te, których właścicielem jest nasz student. Robimy to zgodnie z tym co sugeruje Google w swoim przewodniku.public void connect(String login, String password) throws // Create a CalenderService and authenticate
CalendarService myService = new CalendarService("exampleCo-exampleApp-1");
myService.setUserCredentials("jo@gmail.com", "mypassword");
// Send the request and print the response
URL feedUrl = new URL("https://www.google.com/calendar/feeds/default/owncalendars/full");
CalendarFeed resultFeed = myService.getFeed(feedUrl, CalendarFeed.class);
System.out.println("Calendars you own:");
System.out.println();
for (int i = 0; i < resultFeed.getEntries().size(); i++) {
CalendarEntry entry = resultFeed.getEntries().get(i);
System.out.println("\t" + entry.getTitle().getPlainText());
}
Praktycznie wszystko co dotyczy kalendarza da się wyczytać z przewodnika - problem jest z tymi magicznymi odnośnikami:"https://www.google.com/calendar/feeds/default/owncalendars/full" "https://www.google.com/calendar/feeds/jo@gmail.com/private/full"Pierwszy z nich, jak zdążyliście zauważyć, daje nam dostęp do kalendarzy użytkownika. Natomiast drugi - pobiera wszystkie wydarzenia z kalendarza. I tu pada pytanie: Którego kalendarza?
Odpowiedzią jest - kalendarz domyślny. "jo@gmail.com" jest nie tylko loginem i mailem właściciela konta, nazwą kalendarza domyślnego, ale również jego 'adresem'.
Sporo problemów sprawiło mi zrozumienie jak odbierać/dodawać/usuwać zdarzenia z konkretnego kalendarza. Wystarczy posiadać odpowiednie URL. Tylko skąd je wziąć? CalendarEntry nie ma metody getUrl, ale ma getId() różnica między jednym a drugim wygląda następująco:
id = "http://www.google.com/calendar/feeds/default/calendars/joe%40gmail.com"; url = "https://www.google.com/calendar/feeds/joe@gmail.com/private/full";Czyli wystarczyło
url = id.replace("%40", "@").replace("http", "https").replace("default/calendars/", "") + "/private/full";I mamy wszystko co potrzeba :)Dalsza praca była przyjemnością - wszystko zgodnie z przewodnikiem... Kolejne schody zaczęły się dopiero gdy trzeba było nadać zdarzeniom cykliczność... W przewodniku znajdziemy tylko taki przykład:
String recurData = "DTSTART;VALUE=DATE:20070501\r\n"
+ "DTEND;VALUE=DATE:20070502\r\n"
+ "RRULE:FREQ=WEEKLY;BYDAY=Tu;UNTIL=20070904\r\n";
CalendarEventEntry myEntry = new CalendarEventEntry();
Recurrence recur = new Recurrence();
recur.setValue(recurData);
myEntry.setRecurrence(recur);I odnośnik do dokumentacji specyfikacji. Jak tworzyć wydarzenia co dwa tygodnie? Jak ustawić godzinę? Jak ustawić strefę czasową? Szybki research i wszystko jasne :) a więc:
DTSTART;TZID=Europe/Warsaw:20110110T081500; DTEND;TZID=Europe/Warsaw:20110110T100000; RRULE:FREQ=WEEKLY;INTERVAL=2;BYDAY=Mo;COUNT=15Tworzy nam zdarzenie które rozpoczyna się (DTSTART) 10.01.2010 o godzinie 8:15 a kończy (DTEND) o godzinie 10:00 w strefie czasowej - warszawskiej (TZID). Wydarzenie odbywa się 15 razy (COUNT) - regularnie co 2 (INTERVAL) tygodnie (FREQ) - w poniedziałki (BYDAY).
I to chyba wszystko z czym mogą występować problemy.
Teraz wystarczy zapoznać się dobrze z przewodnikiem i ewentualnie specyfikacją tworzenia cyklicznych wydarzeń i można się bawić :)
Brak komentarzy:
Prześlij komentarz