php - sheets - sheet google doc
Recibir notificaciones automáticas de Google Drive (2)
Es posible que desee verificar la documentación: Notificaciones Push , esto describe cómo usar las notificaciones push que informan a su aplicación cuando cambia un recurso.
Ver respuesta
Si la solicitud de vigilancia crea con éxito un canal de notificación, devuelve un código de estado HTTP
200 OK
.El cuerpo del mensaje de la respuesta del reloj proporciona información sobre el canal de notificación que acaba de crear, como se muestra en el siguiente ejemplo.
{
"kind": "api#channel",
"id": "01234567-89ab-cdef-0123456789ab"", // ID you specified for this channel.
"resourceId": "o3hgv1538sdjfh", // ID of the watched resource.
"resourceUri": "https://www.googleapis.com/drive/v3/files/o3hgv1538sdjfh", // Version-specific ID of the watched resource.
"token": "target=myApp-myFilesChannelDest", // Present only if one was provided.
"expiration": 1426325213000, // Actual expiration time as Unix timestamp (in ms), if applicable.
}
Y si va a verificar el formato del mensaje de notificación:
Los mensajes de notificación para Archivos y Cambios están vacíos.
Los documentos también proporcionaron muestras:
Cambiar mensaje de notificación para recursos de Archivos, que no incluye un cuerpo de solicitud:
POST https://example.com/notifications // Your receiving URL.
Content-Type: application/json; utf-8
Content-Length: 0
X-Goog-Channel-ID: 4ba78bf0-6a47-11e2-bcfd-0800200c9a66
X-Goog-Channel-Token: 398348u3tu83ut8uu38
X-Goog-Channel-Expiration: Tue, 19 Nov 2013 01:13:52 GMT
X-Goog-Resource-ID: ret08u3rv24htgh289g
X-Goog-Resource-URI: https://www.googleapis.com/drive/v3/files/ret08u3rv24htgh289g
X-Goog-Resource-State: update
X-Goog-Changed: content,properties
X-Goog-Message-Number: 10
Cambiar mensaje de notificación para recursos de Cambios, que incluye un cuerpo de solicitud:
POST https://example.com/notifications // Your receiving URL.
Content-Type: application/json; utf-8
Content-Length: 118
X-Goog-Channel-ID: 8bd90be9-3a58-3122-ab43-9823188a5b43
X-Goog-Channel-Token: 245t1234tt83trrt333
X-Goog-Channel-Expiration: Tue, 19 Nov 2013 01:13:52 GMT
X-Goog-Resource-ID: ret987df98743md8g
X-Goog-Resource-URI: https://www.googleapis.com/drive/v3/changes
X-Goog-Resource-State: changed
X-Goog-Message-Number: 23
{
"kind": "drive#changes"
}
Descripción de los eventos de notificación de Drive API
Esta sección proporciona detalles sobre los mensajes de notificación que puede recibir al usar notificaciones automáticas con Drive API.
Puede probar cualquiera de los siguientes eventos en el área de juegos de notificaciones Push o descargar la fuente de GitHub .
Espero que esta información ayude.
He podido establecer un canal para recibir notificaciones automáticas de Google Drive utilizando el método que se describe aquí. No recibir notificaciones de webhook desde la unidad, ¿por qué? . Recibo notificaciones y todo funciona bien. Mi problema es que cuando recibo las notificaciones automáticas, solo obtengo esta información:
Content-Length: 0
Accept: */*
Accept-Encoding: gzip,deflate,br
Connection: Keep-alive
Host: www.domain.com
User-Agent: APIs-Google; (+https://developers.google.com/webmasters/APIs-Google.html)
X-Goog-Channel-Expiration: Thu, 29 Dec 2016 00:00:00 GMT
X-Goog-Channel-Id: 01ecb23c-e718-8674-6ab3-623931741334
X-Goog-Message-Number: 2745870
X-Goog-Resource-Id: hw75x654x56jYhRNkfU5CFEXXXhtlj8
X-Goog-Resource-State: change
X-Goog-Resource-Uri: https://www.googleapis.com/drive/v3/changes?includeRemoved=true&pageSize=100&pageToken=658&restrictToMyDrive=false&spaces=drive&alt=json
De acuerdo con esta documentación , hay algunos mensajes de notificaciones de "Cambio" que incluyen un cuerpo de solicitud . Lamentablemente, no he podido obtener el cuerpo de la solicitud.
El script que maneja las notificaciones push tiene la siguiente lógica:
$oldcontent = file_get_contents(''notifications.txt'');
$newnotsfile = fopen("notifications.txt", "w");
$post = file_get_contents(''php://input'');
$requestBody = json_decode($post , TRUE); //convert JSON into array
$time = date("Y-M-d H:i:s", time());
fwrite($newnotsfile , "<br><br>---------------- │ Time: ".$time."<br><br>");
foreach (getallheaders() as $name => $value) {
fwrite($newnotsfile , $name.": ".$value."<br>");
}
fwrite($newnotsfile , $requestBody );
fwrite($newnotsfile , "<br><br>");
fwrite($newnotsfile , $oldcontent);
fclose($newnotsfile );
?>
Pensé que usando $post = file_get_contents(''php://input'');
Capturaría el cuerpo de la solicitud, pero la verdad es que no está capturando nada. Si entiendo correcto, debería recibir un recurso de cambio con la estructura detallada aquí . ¿Hay algo mal que estoy haciendo o he entendido mal? Aprecio cualquier idea que se pueda dar y ¡gracias de antemano!
En realidad, no hay un cuerpo de solicitud que se envíe en la notificación webhook. De modo que tan pronto como lleguen los cambios a la url de devolución de llamada, los cambios deben obtenerse realizando una solicitud de obtención de cambios uri de recursos como a continuación
Resource URI : https://www.googleapis.com/drive/v3/changes?includeRemoved=true&pageSize=100&pageToken=895&restrictToMyDrive=false&spaces=drive&alt=json
O los cambios programaticos se pueden obtener usando el siguiente codigo
String pageToken = channelInfo.getCurrPageToken();
List<Change> changes = service.changes().list(pageToken)
.execute().getChanges();
El documento de notificaciones automáticas de Google podría haber mencionado esto claramente en lugar de mencionar que los cambios aparecen en el cuerpo de la solicitud, que es el motivo de la confusión.