2016-04-28 21 views
0

Ich versuche, auf einen Kalender zuzugreifen, der von meiner Anwendung über Cron erstellt wurde, und ich bekomme einen Kalender mit dem gleichen Namen, den der Kalender erstellt, aber die ID ist absolut anders ... Das ist mein Code:Google API Kalender mit Cron

public function cronTest() 
{ 
    $this->g_client = new Google_Client(); 
    $this->g_client->setApplicationName($this->config->item("APPLICATION_NAME")); 
    $service = $this->getCronService("CalendarTest-46bde015a16.p12"); 
    $calendar = $this->getCalendar($service); 
} 
private function getCronService($file) 
{ 
    $key = file_get_contents(CREDENTIALS_PATH.$file); 
    $cred = new Google_Auth_AssertionCredentials($this->config->item("google_service_id"), SCOPES, $key); 
    $this->g_client->setAssertionCredentials($cred); 
    if($this->g_client->getAuth()->isAccessTokenExpired()) 
     $this->g_client->getAuth()->refreshTokenWithAssertion($cred); 
    return new Google_Service_Calendar($this->g_client); 
} 
private function getCalendar($service) 
{ 
    $calendarList = $service->calendarList->listCalendarList(); 
    echo "getCalendar<br>"; 
    foreach ($calendarList->getItems() as $calendarListEntry) 
    { 
     echo $calendarListEntry->getSummary()." with id:".$calendarListEntry->getId()."<br>"; 
     echo "<br>"; 
     if($calendarListEntry->getSummary()=="Auto-Citas") 
      echo "found"; 
      //return $calendarListEntry->getId(); 
    } 
    die; 
} 

Wenn ich es von der Kommandozeile (simulieren des cron) ausführen:

wget www.domain.com/prototipo/alien/cronTest 

ich dieses:

Calendar 
Auto-Citas with id:[email protected] 
found 

Aber die ID des Kalenders erstellt mit dieser Anwendung nicht mit dieser ID übereinstimmt ...
Bevor dieser Versuch mit Ron, musste ich lernen, wie die API zu verwenden, auf diese Weise musste ich manchmal das gleiche entfernen Kalender. Also was ich mache, war noch einmal die Auto-Citas in meinem Kalender zu entfernen, und die Funktion meiner App anzurufen, um einen neuen Kalender mit einem anderen Namen zu erstellen, dann habe ich nochmal die Anfrage vom "simulierten Cron" (wget www .domain.com/prototipo/alien/cronTest) und das Ergebnis ist das gleiche wie zuvor: nur ein Kalender namens Auto-Citas, aber nichts über den neuen Kalender.
Die Funktionalität ist ein Modul Anti-Abwesenheit zu erstellen, senden Sie eine E-Mail oder SMS an den Benutzer zwei Stunden vor dem Termin (cita = Termin)
Für diese Aufgaben muss ich mehr funktionieren ... aber sie sind nicht wichtig für den Fall:

$events  = $this->getDates($service,$calendar,$min,$max); 
$this->transformDates($events, $service, ",phone"); 

Antwort

0

Ok ... ich finde Lösung nur here (die offiziellen Dokumente google). Ich muss die Option user_to_impersonate verwenden.

$client_email = '[email protected]'; 
$private_key = file_get_contents('MyProject.p12'); 
$scopes = implode(' ', array(Google_Service_Calendar::CALENDAR)); 
$user_to_impersonate = '[email protected]'; 
$credentials = new Google_Auth_AssertionCredentials(
    $client_email, 
    $scopes, 
    $private_key, 
    'notasecret',         // Default P12 password 
    'http://oauth.net/grant_type/jwt/1.0/bearer', // Default grant type 
    $user_to_impersonate, 
);