java - 使用 CalDav API 集成雅虎日历

标签 java google-calendar-api caldav ical4j sardine

如果用户的用户名和密码已知,我将尝试访问该用户的雅虎日历。我找到了一个使用 CalDav api 来完成任务的代码片段。代码使用 2 个库 sardine.jar 和 ical4j.jar。该代码的文档表明该代码适用于谷歌日历和雅虎日历。只是我们必须相应地更改 CalDav 服务器的 url。代码适用于谷歌日历,但当我更改雅虎日历的代码时,它不起作用。 我收到以下错误:

Stacktrace:] 以及根本原因 net.fortuna.ical4j.data.ParserException:第 1 行错误:预期 [-3],读取 [-1]

我认为这是由于google和yahoo的ics文件格式不匹配或者没有创建yahoo的ics文件。当我从浏览器而不是雅虎使用此网址时,我发现了谷歌日历的 ics 文件。

这是我使用的代码:

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/emailid@gmail.com/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);


   }
       }

这些是网址:

谷歌日历:https://www.google.com/calendar/dav/ <>@gmail.com/events/

雅虎!日历:https://caldav.calendar.yahoo.com/dav/ <>@yahoo.es/日历//

请让我知道代码有什么问题,或者我如何以编程方式获取雅虎日历的 ics 文件。

最佳答案

关于java - 使用 CalDav API 集成雅虎日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14848621/

相关文章:

java - 异步 HTTP 客户端加载了太多数据?

java - URL 等于并检查 Internet 访问

android - 如何从 Activity 中添加 Google 日历中的 Activity ?

java - 将应用程序日历与谷歌日历同步

java - 如何跳过循环中的打印语句

java - 主 Hibernate session 自动关闭

python - 使用 Calendar v3 api python 插入事件时出现 HttpError 401 "Login Required"

javascript - 从 Google Calendar API 检索 "All Day"事件时,如何考虑时区偏移?

android - 将我的日历应用程序与其他日历同步

php - iCloud CalDAV 通过 PHP