문제

따라서 스케줄링 관리자가 일정을 게시/업데이트 할 때 작업 캘린더가 각 직원의 Google 캘린더와 자동으로 동기화되기를 원합니다. 사용자는 처음에 Authsub 토큰을 사용하여 선택하지만 그 후에 자동이어야합니다. 예정된 다른 이벤트와의 충돌을 피하기 위해 "작업 앱"이라는 새 캘린더 또는 다른 독특한 것을 만들고 싶습니다. 그런 다음 업데이트의 경우 새 이벤트를 작성하기 전에 해당 범위에서 모든 이벤트를 삭제합니다. 그래서 몇 가지 질문이 있습니다 ...

  1. API를 사용하려는 특정 캘린더를 어떻게 선택합니까? (Zend 프레임 워크를 사용하여 PHP의 모든 것이). 캘린더 목록에 대해 쿼리 할 수있는 곳이 있지만 문서는 해당 캘린더에 추가하는 방법을 보여주지 않습니다.

  2. 캘린더를 만들 수 있습니까? 그러한 캘린더를 만들기 위해 선택한 사용자 만 있으면 되나요? 그렇다면 이벤트를 추가하는 것처럼 생성 할 수있는 URL이 있습니까? (간단하고 일관성을 만들기 위해 무엇이든?)

  3. 사용자가 자격 증명을 저장하기를 원하지 않지만 분명히 각 업데이트에 대한 액세스를 요청하고 싶지 않습니다. 지속적으로 액세스하기 위해서는 Oauth 토큰이 필요합니까? URL 토큰이 한 번 사용된다는 것을 알고 있지만 세션 토큰을 저장하고 일주일 후에 재사용 할 수 있습니까?

  4. 복제를 피하기 위해 각 이벤트를 쿼리하는 것 외에 다른 방법이 있습니까? 나는 지난 밤에 테스트하고 있었고 이제 같은 50 개의 이벤트의 7 가지 인스턴스가 있습니다. 각 추가 전에 확인하여 서버 시간에 추가하고 싶지 않습니다.

  5. 마지막으로 여러 이벤트를 추가하거나 ICS 파일을 캘린더로 단순히 푸시하는 방법이 있습니까? 지금은 스크립트에 SQL 쿼리를 수행하고 결과를 통해 루프 할 때 각 이벤트를 추가합니다. 예상보다 훨씬 오래 걸리는 것처럼 보이므로 ICS 파일을 구축하거나 한 객체에 모든 이벤트를 추가하고 한 번에 추가하는 것이 좋습니다. 감사!

도움이 되었습니까?

해결책

아무도 대답하지 않았기 때문에, 나는 Google Calendar API의 비 -PHP 문서, 특히 .NET 물건과 RAW 프로토콜에서 약간의 포크를 시작하기로 결정했습니다. 그리고 당신은 그것을 몰라 ...

.NET 문서로 이동하면 Cool이 언급됩니다. 새로운 특징, 특히 인증 된 사용자를위한 새로운 비발적 캘린더를 만드는 방법 및 비야 캘린더에 이벤트를 추가하는 방법.

물론,이 문서는 PHP 영역에서 어디에도 나타나지 않으며 일대일 상관 관계가없는 것 같습니다. 새로운 캘린더를 만들기 위해, 나는 먼저 분명한 것들을 시도한 다음, 부러지기 위해 노력하고, 그다지 불쾌하지 않은 것을 시도했습니다. 라디오 침묵의 이유는 아무도 그 대답을 알지 못했지만 확실히 원하는 이유가 있기 때문에 공유 할 것이라고 생각했습니다.

새 캘린더를 만들려면 :

여기에는 두 가지 열쇠가 있습니다.

  1. 달력 이벤트를 추가하기 위해 동일한 방법을 사용해야합니다. insertEvent()

  2. 메소드에서 Post 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을 얻는 것입니다. "소유 캘린더"경로와는 달리 특정 캘린더에는 사용자 사례 정보가있을뿐만 아니라 어떤 종류의 해시 모양의 ID도 있습니다.

코드는 다음과 같습니다.

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

내 질문을 읽고 그것에 대해 생각한 사람에게 감사합니다. 위의 코드를 조이는 방법을 알고 있다면 (두 개의 루프가 필요하지 않습니까?) 피드백을 받고 싶습니다.

다른 팁

Anthony는 Google Calendar API 사이트의 V1 문서 또는 V2 문서를 언급하고 있다고 생각합니다. 나는 Perl에서 이것을 쉽게 관리했다. V2 프로토콜 안내서.

열쇠는 게시하는 URL을 변경하는 것입니다. 기본 "/calendar/feeds/default/private/full"대신 먼저 사용 가능한 캘린더 목록을 가져온 다음 원하는 캘린더에서 내용/@SRC 값을 가져오고, 예로/calendar/feeds/에 게시합니다. 1234567890ABCDEFEG%40GROUP.CALENDAR.google.com/private/full

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top