2013-02-13 183 views
1

我正在嘗試訪問用戶的雅虎日曆,如果他的用戶名和密碼是已知的。我找到了一個使用CalDav API做代碼的代碼片段。代碼使用2個庫sardine.jar和ical4j.jar。該代碼的文檔說該代碼將適用於谷歌日曆和雅虎日曆。只有我們必須相應地將URL更改爲CalDav服務器。代碼適用於谷歌日曆罰款,但當我更改雅虎日曆的代碼,它不工作。 我得到了以下錯誤:使用CalDav API集成雅虎日曆

堆棧跟蹤:]與根源 net.fortuna.ical4j.data.ParserException:錯誤位於第1行:預期[-3],讀[-1]

我想這是由於谷歌和雅虎ics文件格式不匹配或沒有雅虎創建的ics文件。當我從瀏覽器使用這個URL時,我發現了谷歌日曆的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/[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); 


    } 
     } 

這些網址:

谷歌日曆:https://www.google.com/calendar/dav/ <> @ gmail.com /事件/

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

請讓我知道什麼是worng與代碼或如何獲得雅虎日曆編程ics文件。

回答