Интеграция календаря Yahoo с помощью CalDav API

Я пытаюсь получить доступ к календарю пользователя Yahoo, если известны его имя пользователя и пароль. Я нашел фрагмент кода, который использует API CalDav для выполнения этой задачи. Код использует 2 библиотеки sardine.jar и ical4j.jar. В документации этого кода говорится, что код будет работать для календаря Google и календаря Yahoo. Только мы должны соответствующим образом изменить URL-адрес сервера CalDav. Код отлично работает для календаря Google, но когда я меняю этот код для календаря Yahoo, он не работает. Я получил следующую ошибку:

Stacktrace:] с первопричиной net.fortuna.ical4j.data.ParserException: ошибка в строке 1: ожидается [-3], прочитано [-1]

Я думаю, это произошло из-за несоответствия форматов файлов ics google и yahoo или не создан файл ics для yahoo. Я нашел файл ics календаря Google, когда я использую этот URL-адрес из браузера, но не из Yahoo.

Это код, который я использовал:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.List;

import net.fortuna.ical4j.data.CalendarBuilder;
import net.fortuna.ical4j.data.ParserException;
import net.fortuna.ical4j.filter.Filter;
import net.fortuna.ical4j.filter.PeriodRule;
import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.Component;
import net.fortuna.ical4j.model.DateTime;
import net.fortuna.ical4j.model.Period;
import net.fortuna.ical4j.model.Property;
import com.googlecode.sardine.Sardine;
import com.googlecode.sardine.SardineFactory;

public class sardineMain {
  @SuppressWarnings("deprecation")



 public static void main(String[] args) throws Exception {  

  Sardine sardine = SardineFactory.begin("Email","password");

  String url= "https://www.google.com/calendar/dav/[email protected]/events/";

   java.util.Calendar start = java.util.Calendar.getInstance();
   java.util.Calendar end = java.util.Calendar.getInstance();
   end.add(java.util.Calendar.MONTH, 1);

   //Fri May 25 08:56:36 KST 2012==Mon Jun 25 08:56:36 KST 2012

   Period period = new Period(new DateTime(start.getTime()),new DateTime(end.getTime()) );
   Filter filter = new Filter(new PeriodRule(period));


   //Collection<CalanderQueryOutput> results = new ArrayList<CalanderQueryOutput>();


   InputStream EventStream = sardine.get(url);
   BufferedReader br = new BufferedReader(new InputStreamReader(EventStream));
   CalendarBuilder builder = new CalendarBuilder();
   Calendar calendar = builder.build(br);


        List eventsToday = (List) filter.filter(calendar.getComponents(Component.VEVENT));
        CalanderQueryOutput caldavOutput = new CalanderQueryOutput();

   for (Iterator i = eventsToday.iterator(); i.hasNext();) {

     Component component = (Component) i.next();


     String CreatedS = component.getProperty(Property.CREATED).toString().trim();
 String SummaryS = component.getProperty(Property.SUMMARY).toString().trim();
 String StatusS = component.getProperty(Property.STATUS).toString().trim();
 String StartDateS = component.getProperty(Property.DTSTART).toString().trim();
 String EndDateS = component.getProperty(Property.DTEND).toString().trim(); 

 /*System.out.println(CreatedS);
 System.out.println(SummaryS);
 System.out.println(StatusS);
 System.out.println(StartDateS);
 System.out.println(EndDateS);*/
 System.out.println(component);


   }
       }

это URL:

Календарь Google: https://www.google.com/calendar/dav/‹>@ gmail.com/события/

Яху! Календарь: https://caldav.calendar.yahoo.com/dav/‹>@yahoo .es/Календарь//

пожалуйста, дайте мне знать, что не так с кодом или как я могу программно получить файл ics календаря Yahoo.


person Nishad K Ahamed    schedule 13.02.2013    source источник


Ответы (1)


Используйте следующий формат URL:

https://caldav.calendar.yahoo.com/dav/YOUR_USERNAME/Calendar/YOUR_CALENDAR_NAME

Ссылки

person Community    schedule 13.01.2015
comment
1 голос за правильный формат, хотя для моей конфигурации с использованием скрипта calcurse-caldav.py формат без https://. - person Tony Barganski; 09.11.2019