Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Interfejs API kalendarza Google:wybieranie/tworzenie kalendarzy?

Cóż, ponieważ nikt nie odpowiedział, postanowiłem zacząć grzebać w dokumentacji innej niż PHP dla API Kalendarza Google, w szczególności w sprawie .NET i tylko trochę w surowym protokole. I czy nie wiesz o tym...

Jeśli przejdziesz do dokumentacji .NET, jest tam mowa o fajnych nowych funkcje, w szczególności jak tworzyć nowe kalendarze inne niż podstawowe dla uwierzytelnionych użytkowników i jak dodawać wydarzenia do kalendarzy innych niż podstawowe.

Oczywiście ta dokumentacja nie pojawia się nigdzie w obszarze PHP i nie wydaje się, aby istniała korelacja jeden do jednego. Podczas tworzenia nowego kalendarza najpierw spróbowałem kilku oczywistych rzeczy, a następnie spróbowałem czegoś nie tak oczywistego, co zadziałało. Pomyślałem, że podzielę się na wypadek, gdyby przyczyną ciszy radiowej było to, że nikt nie znał odpowiedzi, ale na pewno by chciał.

Aby utworzyć nowy kalendarz:

Są do tego dwa klucze:

  1. Musisz użyć tej samej metody dodawania wydarzeń do kalendarza, czyli insertEvent()

  2. Musisz ustawić adres URL posta w metodzie, który w przeciwnym razie przejdzie do domyślnego adresu URL kanału.

Ten przykład sprawdza, czy kalendarz aplikacji już istnieje, a jeśli nie, tworzy go:

 //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);
 }

I masz to. Następnym celem jest wstawianie wydarzeń do tego kalendarza, a nie do kalendarza domyślnego.

Dodawanie wydarzeń do kalendarza innego niż podstawowy

Najłatwiejszą częścią, którą prawdopodobnie możesz się domyślić, jest to, że musisz ponownie ustawić ten opcjonalny adres URL, na przykład:insertEvent($newEvent, $calURL) , trudną częścią jest uzyskanie adresu URL kalendarza. W przeciwieństwie do ścieżki „własnych kalendarzy”, określone kalendarze nie tylko zawierają informacje specyficzne dla użytkownika, ale także mają w sobie coś w rodzaju identyfikatora haszującego.

Oto kod:

 //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>";

Dziękuję każdemu, kto przeczytał moje pytanie i pomyślał o nim. Jeśli ktoś zna sposób na zaostrzenie powyższego kodu (może nie potrzebuję dwóch pętli?), chciałbym otrzymać informację zwrotną.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DAYOFMONTH() Przykłady – MySQL

  2. Znajdź długie/łatwe wewnątrz wielokąta za pomocą MySQL 5.6

  3. Jak wyświetlić ostatnie zapytania wykonane na MySQL?

  4. mysql - tworzenie mechanizmu podobnego do sekwencji Oracle

  5. Aktualizacje pola MySQL CURRENT_TIMESTAMP przy każdej aktualizacji