curl - google - wget drive files
lista archivos de Google Drive con rizo (2)
Para futuros usuarios de Google:
Si quieres ahorrarte una tarde de dolor, olvídate de la documentación de Google y dirígete aquí
La esencia de esto, ya que sé que stackoverflow prefiere citar el contenido a la vinculación:
En tu navegador:
https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fanalytics&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&client_id=1234567890.apps.googleusercontent.com
Permita el acceso, por supuesto, y copie el código que debería verse como 4 / v6xr77ewYqjkslsdUOKwAzu
curl -H "Content-Type: application/x-www-form-urlencoded" -d ''code=4/v6xr77ewYqjkslsdUOKwAzu&client_id=1234567890.apps.googleusercontent.com&client_secret=xywzxywzxywzxywzxywz&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code'' https://accounts.google.com/o/oauth2/token
Obtendrás un JSON como este:
{
"access_token" : "ya29.AHES6Zkjhkjhahskjhskkskjh",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "1/HH9E7k5D0jakjhsd7askdjh7899a8sd989"
}
Si te rizas:
curl ''https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.AHES6Zkjhkjhahskjhskkskjh''
obtendrás algo como:
{
"issued_to": "562211803675.apps.googleusercontent.com",
"audience": "562211803675.apps.googleusercontent.com",
"scope": "https://www.googleapis.com/auth/analytics",
"expires_in": 3556
}
Hecho
curl ''https://www.googleapis.com/analytics/v3/management/accounts?access_token=ya29.AHES6Zkjhkjhahskjhskkskjh
Renovar el token
Debes usar el "refresh_token" recibido anteriormente
curl -d "client_id=562211803675.apps.googleusercontent.com&client_secret=ZQxoOBGbvMGnZOYUrVIDXrgl&refresh_token=1/HH9E7k5D0jakjhsd7askdjh7899a8sd989&grant_type=refresh_token" https://accounts.google.com/o/oauth2/token
y obtendrás un nuevo access_token.
Intento obtener la lista de archivos en Google Drive con curl, pero OAuth 2 está obteniendo lo mejor de mí.
Estas son algunas de las cosas que probé:
curl -H "Authorization: Bearer $token" https://www.googleapis.com/drive/v2/files
Donde $ token es una cadena de 460 caracteres que obtuve usando:
https://www.google.com/accounts/ClientLogin
y este script de carga (que funciona muy bien). Este es el error que recibí:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Invalid Credentials"
}
}
También probado:
curl https://www.googleapis.com/drive/v2/files?key=apiKey
Error:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "required",
"message": "Login Required",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Login Required"
}
}
Y:
curl -H "Authorization: GoogleLogin auth=${token}" "https://www.googleapis.com/drive/v2/files"
Error:
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "dailyLimitExceededUnreg",
"message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
"extendedHelp": "https://code.google.com/apis/console"
}
],
"code": 403,
"message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
}
}
Tuve poco éxito con las bibliotecas de cliente de JavaScript y PHP, ambas parecen optimizadas para la situación en la que el usuario proporciona el registro / pase para autorizar la aplicación. Lo que necesito es una forma de listar los archivos de una sola cuenta, todo el tiempo.
Acabo de pasar como 30 minutos para resolver esto yo mismo para acceder a la API de contactos y redividé los pasos para la API de la unidad y los documenté para referencia futura. Hay 5 pasos y los primeros 4 son una configuración de tiempo.
Paso 1 : crea nuevas credenciales de OAuth2
Anote la client ID
del client ID
y client secret
.
Paso 2 : Solicitar autorización con unidad como ámbito.
Usando el client ID
del client ID
y https://docs.google.com/feeds
como scope
, construya el siguiente comando curl:
$ curl -d "client_id=413437979384-05efiod756k5hp2eji5tsn2lmlg0qslc.apps.googleusercontent.com&scope=https://docs.google.com/feeds" https://accounts.google.com/o/oauth2/device/code
{
"device_code" : "KRYU-NTVW4/qi6ysOpK2AtsmtZz4MB9LAthlYGGgAepxpBnGQLvhqo",
"user_code" : "KRYU-NTVW",
"verification_url" : "https://www.google.com/device",
"expires_in" : 1800,
"interval" : 5
}
Copia el user_code
.
Paso 3 : autoriza la solicitud.
Visite la URL de verificación https://www.google.com/device e ingrese el código copiado.
Paso 4 : obtener access_token
.
Agregue el device_code
obtenido de la solicitud de autenticación al client ID
del client ID
y al client secret
y construya el siguiente comando curl:
$ curl -d "client_id=413437979384-05efiod756k5hp2eji5tsn2lmlg0qslc.apps.googleusercontent.com&client_secret=0zWNribRJ4PcYWH-rDkCpCcm&grant_type=http://oauth.net/grant_type/device/1.0&code=KRYU-NTVW4/qi6ysOpK2AtsmtZz4MB9LAthlYGGgAepxpBnGQLvhqo" https://www.googleapis.com/oauth2/v4/token
{
"access_token": "ya29.kgKW4Z4IDqK7lCjUQw-u5VT2uAx19MtgdoKeAC9ikKYGwKh7Nh46pY8nQsANQ5lRwA",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "1/qinFVaMPYvhWtUtmjb1qCpnQt48XyvQhB_ILZJ4H1Uw"
}
Ahora tenemos el access_token
requerido, guárdelo y access_token
con todas las solicitudes de la API REST del disco.
Paso 5 : solicitud de Drive API.
$ curl -H ''GData-Version: 3.0'' -H ''Authorization: Bearer ya29.kgKW4Z4IDqK7lCjUQw-u5VT2uAx19MtgdoKeAC9ikKYGwKh7Nh46pY8nQsANQ5lRwA'' https://www.googleapis.com/drive/v2/files
{
"kind": "drive#fileList",
...