2010-01-26 6 views
2

Я пытаюсь получить один CalendarEventEntry из Календаря Google по идентификатору события, но я не могу найти способ сделать это. Похоже, что API не предоставляет для этого метода, хотя он предлагает сделать запрос к кадру фида, используя Query. Недостатком этого является то, что идентификатор не является одним из рассмотренных параметров.Как получить единственный календарь Google Calendar CalendarEventEntry по его идентификатору?

Я думаю, что возможный путь для достижения этой цели была бы получить CalendarEventFeed, связанный с нашим календарем, а затем перебрать результирующий список событий следующим образом:

CalendarService service = new CalendarService(applicationName); 
service.setUserCredentials(userName,password); 
CalendarEventFeed myFeed = service.getFeed(feedUrl, CalendarEventFeed.class); 
List <CalendarEventEntry> entries = myFeed.getEntries(); 

for (CalendarEventEntry e : entries){ 
    if (e.getId().equals(id)){ 
     return e; 
    } 
    } 

вы знаете, легче и более прямым ли решение для этого?

Заранее благодарен!

ответ

1

Вы можете получить URL-адрес мероприятия, позвонив по номеру calendarEventEntry.getEditLink().getHref(). На самом деле это URL-адрес календаря плюс идентификатор события.

Посмотрите на Data API Developer Guide для образцов кода.

+0

хорошо, что все в порядке, но это не решает проблему. Я хотел бы запросить канал календаря, передающий идентификатор в качестве параметра, и вернуть связанную с ним CalendarEventEntry. – markitus82

+0

Я должен был быть более явным. Вы можете самостоятельно создать URL-адрес: URL-адрес календаря + косую черту + идентификатор события. Вам не нужен запрос. Взгляните на параграф «Обновление событий» в руководстве разработчика. –

0

Вопрос о парнях имеет основание, не было кода для ответа на этот вопрос. Найдите ниже код, который я использовал для ответа на этот вопрос. Я изменил ваш код слегка

import com.google.gdata.client.*; 
import com.google.gdata.client.calendar.*; 
import com.google.gdata.data.*; 
import com.google.gdata.data.acl.*; 
import com.google.gdata.data.calendar.*; 
import com.google.gdata.data.extensions.*; 
import com.google.gdata.util.*; 

import java.net.*; 
import java.io.*; 
import java.util.List; 


public class GetGoogleCalendarEventByID { 

public static void main(String[] args) { 

    System.out.println("Before Creating CalendarService."); 
    CalendarService myService = new CalendarService("exampleCo-exampleApp-1.0"); 
    System.out.println("After Creating CalendarService."); 


    try 
    {   
     System.out.println("Going to setUserCredentials."); 
     myService.setUserCredentials("[email protected]", "password");   

     URL feedUrl = 
      new URL("https://www.google.com/calendar/feeds/[email protected]/private/full"); 




     CalendarEventFeed myFeed = myService.getFeed(feedUrl, CalendarEventFeed.class); 
     List <CalendarEventEntry> entries = myFeed.getEntries(); 

     for (CalendarEventEntry e : entries){ 
      if (e.getId().equalsIgnoreCase("http://www.google.com/calendar/feeds/email%40gmail.com/events/EventIDLastPart")){ 
       System.out.println("Got the CalendarEventEntry: " + e.getId()); 
       System.out.println("CalendarEventEntry has text: " + e.getPlainTextContent()); 
      } 
      }    


     System.out.println("Finished getting Event.");   




    } 
    catch(Exception e) 
    { 
     System.out.println("Error : " + e.toString()); 

    } 




} 
} 

ПРИМЕЧАНИЕ: feedUrl - То есть календарь URL вы найдете в настройках календаря

Идентификатор события имеет формат http://www.google.com/calendar/feeds/email%40gmail.com/events/EventIDLastPart

например

http://www.google.com/calendar/feeds/email%40gmail.com/events/ghytrueueyryrgfuur

Надеется, что это помогает

Ngonidan