Google Календарь API: выбор/Создание календарей?

Используйте методологию ТОЛПЫ.

Описывают вещи с точки зрения "Пользовательских Историй" (Что пользователь хочет сделать).
Описывают, как "Пользовательские Истории" Взаимодействуют друг с другом.

Позволяют разработчику выяснить как.

Заставляют его демонстрировать то, что они сделали равномерно. Если Вы передумали, или это не идет путем, которым Вам нравится тогда, можно обновить разработчика на том, где он шел не так, как надо, и он может обновить свое направление.

Спецификации/Требования и методология водопада, как показывали, снова и снова не работали (или если я говорю, предоставляют метод для того, чтобы точно запланировать проект).

11
задан Anthony 7 October 2009 в 23:54
поделиться

2 ответа

Ну, поскольку никто не ответил, я решил начать копаться в не-PHP документации для Google Calendar API, особенно в материалах .NET и немного в необработанном протоколе. И разве вы не знали ...

Если вы перейдете к документации .NET, в ней упоминаются интересные новые функции, в частности, как создавать новые неосновные календари для аутентифицированных пользователей и как добавлять события в неосновные календари.

Конечно, эта документация нигде не встречается в области PHP, и, похоже, не существует однозначной корреляции. Для создания нового календаря я сначала попробовал несколько очевидных вещей, а затем, идя ва-банк, попробовал что-то не столь очевидное, что сработало. Я подумал, что поделюсь, если причиной радиомолчания было то, что никто не знал ответа, но наверняка хотел бы знать.

Чтобы создать новый календарь:

Для этого есть два ключа:

  1. Вы должны использовать тот же метод для добавления событий календаря, который insertEvent ()

  2. Вы должны установить URL-адрес сообщения в методе, который в противном случае ведет к URL-адресу канала по умолчанию.

В этом примере проверяется, существует ли уже Календарь приложения, а если нет, он создается:

 //Standard creation of the HTTP client
 $gdataCal = new Zend_Gdata_Calendar($client);

 //Get list of existing calendars
 $calFeed = $gdataCal->getCalendarListFeed();

 //Set this to true by default, only gets set to false if calendar is found
 $noAppCal = true;

 //Loop through calendars and check name which is ->title->text
 foreach ($calFeed as $calendar) {
  if($calendar -> title -> text == "App Calendar") {
   $noAppCal = false;
  }
 }

 //If name not found, create the calendar
 if($noAppCal) {

  // I actually had to guess this method based on Google API's "magic" factory
  $appCal = $gdataCal -> newListEntry();
  // I only set the title, other options like color are available.
  $appCal -> title = $gdataCal-> newTitle("App Calendar"); 

  //This is the right URL to post to for new calendars...
  //Notice that the user's info is nowhere in there
  $own_cal = "http://www.google.com/calendar/feeds/default/owncalendars/full";

  //And here's the payoff. 
  //Use the insertEvent method, set the second optional var to the right URL
  $gdataCal->insertEvent($appCal, $own_cal);
 }

И вот он. Следующая цель - вставить события в этот календарь, а не в календарь по умолчанию.

Добавление событий в неосновной календарь

Легкая часть, о которой вы, вероятно, догадываетесь, заключается в том, что вам нужно снова установить этот необязательный URL, например: insertEvent ($ newEvent, $ calURL) , сложная часть - получить URL-адрес календаря. В отличие от пути «собственные календари», определенные календари содержат не только информацию, указанную пользователем, у них тоже есть какой-то хэш-идентификатор.

Вот код:

 //Set up  that loop again to find the new calendar:
 $calFeed = $gdataCal->getCalendarListFeed();
 foreach ($calFeed as $calendar) {
  if($calendar->title->text == "App Calendar")
   //This is the money, you need to use '->content-src'
   //Anything else and you have to manipulate it to get it right. 
   $appCalUrl = $calendar->content->src;
 }

 //.......... Some Assumed MySQL query and results .............

      while ($event = $result->fetch_assoc()) {
   $title = $event['description'];

   //Quick heads up
   //This is a handy way of getting the date/time in one expression.
   $eventStart = date('Y-m-d\TH:i:sP', strtotime($event['start']));
   $eventEnd = date('Y-m-d\TH:i:sP', strtotime($event['end']));

   $newEvent = $gdataCal->newEventEntry();
   $newEvent->title = $gdataCal->newTitle($title);
   $when = $gdataCal->newWhen();
   $when->startTime = $eventStart;
   $when->endTime = $eventEnd;

   $newEvent->when = array($when);

   //And at last, the insert is set to the calendar URL found above
   $createdEvent = $gdataCal->insertEvent($newEvent, $appCalUrl);
  }
  echo "<p>".$result->num_rows." added to your Google calendar.</p>";

Спасибо всем, кто прочитал мой вопрос и подумал над ним. Если кто-нибудь знает, как усилить приведенный выше код (может, мне не нужны два цикла?), Я бы хотел получить обратную связь.

26
ответ дан 3 December 2019 в 03:35
поделиться

Я считаю, что Энтони имеет в виду либо документы версии 1, либо документы версии 2 на сайте API Календаря Google. Я довольно легко справился с этим в Perl, следуя руководству по протоколу v2 .

Ключ состоит в том, чтобы изменить URL-адрес, на который вы отправляете POST-сообщение. Вместо значения по умолчанию «/ calendar / feeds / default / private / full» сначала выберите список доступных календарей, затем получите значение content / @ src из нужного вам календаря и опубликуйте его, например /calendar/feeds/1234567890abcdefeg%40group.calendar.google.com/private/full

1
ответ дан 3 December 2019 в 03:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: