Greg,
Si ya está utilizando la biblioteca gdata-python-client, esto es relativamente fácil de hacer si usted es el único usuario que la aplicación se autoriza.
Los mecanismos generales se detallaron en un blog post en septiembre de 2011, pero los describiré aquí para completarlos.
Parte 1: vaya al APIs console y comience un nuevo proyecto.
Parte 2: Desde el proyecto, vaya a "Servicios" y permitir "Analytics API"
Parte 3: Desde el proyecto, vaya a "Acceso a la API" y haga clic en "Crear una OAuth 2.0 ID de cliente ... "(deberá proporcionar un nombre de producto, aunque el valor que proporcione no importará). Cuando se le solicite el tipo de aplicación, seleccione "Aplicación instalada" y luego "Crear ID de cliente". Como usted será el único usuario, solo necesitará un token de actualización, y puede obtenerlo autorizando desde una aplicación de escritorio una sola vez.
Parte 4: Obtenga su ID de cliente y el secreto de cliente de la consola de las API y luego crear un token vacío:
import gdata.gauth
CLIENT_ID = 'id-from-apis-console'
CLIENT_SECRET = 'secret-from-apis-console'
SCOPE = 'https://www.google.com/analytics/feeds/' # Default scope for analytics
token = gdata.gauth.OAuth2Token(
client_id=CLIENT_ID,
client_secret=CLIENT_SECRET,
scope=SCOPE,
user_agent='application-name-goes-here')
llegué el alcance de GData FAQ, aunque no estoy seguro de si es correcto.
Parte 5: utilizar el token para crear URL de autorización para visitar:
url = token.generate_authorize_url(redirect_uri='urn:ietf:wg:oauth:2.0:oob')
Debido a que su aplicación es una "aplicación instalada", el URI de redireccionamiento es el valor predeterminado 'urn:ietf:wg:oauth:2.0:oob'
. (También tenga en cuenta que la publicación del blog tenía un error tipográfico y utilizó la palabra clave argumento redirect_url
.)
Parte 6: Visite la url y autorice su solicitud para realizar solicitudes en nombre de su cuenta. Después de autorizar, serás redirigido a una página con un código. Este código se usará para intercambiar por un token de acceso y un token de actualización de larga duración. El código tiene una vida útil de 10 minutos y el token de acceso tiene una duración de una hora. El token de actualización le permitirá obtener nuevos tokens de acceso para firmar solicitudes a perpetuidad (o hasta que revoke el permiso de su cuenta).
Parte 7: Utilice el código para obtener un token de acceso:
code = 'random-string-from-redirected-page'
token.get_access_token(code) # This returns the token, but also changes the state
De nuevo, esto difiere ligeramente de la entrada del blog, porque estamos usando una aplicación instalada.
Parte 8: Con el token que ahora puede hacer que todas las solicitudes que desee realizar en el cliente de análisis:
import gdata.analytics.client
client = gdata.analytics.client.AnalyticsClient()
token.authorize(client)
Este es el gran dinero aquí. Cuando un token de acceso caduca, las solicitudes de API firmadas con ese token son rechazadas. Sin embargo, al autorizar al cliente como se indica anteriormente, cuando dichas solicitudes fallan, el token
intenta utilizar el token de actualización para obtener un nuevo token de acceso. Si obtiene con éxito un nuevo token de acceso, el cliente reenvía la solicitud original de la API, firmada con el nuevo token de acceso.
No sé nada sobre la API de Analytics, así que no proporcionaré más detalles allí.
Uso futuro Nota 1: Guardando información para usos futuros. Puede volver a utilizar esto desde diferentes lugares y después de este uso muy fácilmente. Hay métodos llamados token_to_blob
y token_from_blob
proporcionados por la biblioteca que permite convertir un token en una cadena y la conversión de una cadena:
saved_blob_string = gdata.gauth.token_to_blob(token)
Una vez hecho esto, se puede almacenar la cadena en un archivo y matar a su ejecutando el proceso de Python. Cuando desea volver a utilizarlo:
saved_blob_string = retrieve_string_from_file() # You'll need to implement this
token = gdata.gauth.token_from_blob(saved_blob_string)
Uso Futuro Nota 2: Esta señal podrá ser utilizado para autorizar a un cliente y llevar a cabo toda su magia una y otra vez, siempre y cuando tenga el token de actualización alrededor. Si por alguna razón usted desea obtener un nuevo token de acceso sin llamar token.generate_authorize_url
, tendrá que configurar manualmente esta en el objeto:
token.redirect_uri = 'urn:ietf:wg:oauth:2.0:oob'
Uso Futuro Nota 3: También, si pierde su actualización token y le gustaría conseguir otro sin tener que ir al navegador para revoke el original, puede utilizar el parámetro approval_prompt
para obtener un nuevo token de actualización en la siguiente URL generada por:
url = token.generate_authorize_url(
redirect_uri='urn:ietf:wg:oauth:2.0:oob',
approval_prompt='force')
Estoy de acuerdo que esto es realmente frustrante, estoy en el mismo barco ahora. El caso de uso de OAuth2 realmente no tiene sentido si solo está utilizando sus propios datos y no necesita autenticarse con cuentas de usuario. Así que estoy confundido también sobre por qué están moviendo muchas apis. Por lo que entiendo OAuth1 funciona sin esta idea de una url de devolución de llamada? Preferiría usar también la clave simple de la API, pero no está claro si esto ha quedado obsoleto y en qué api.Esperemos que Google lo arregle pronto! –
Han pasado 6 meses desde esta pregunta, ¿alguien ha encontrado una respuesta? Acabo de hacer 2 preguntas muy similares aquí http://stackoverflow.com/questions/8263776/how-to-use-oauth-with-google-calendar-to-access-only-one-calendar y aquí http: // stackoverflow .com/questions/8270994/how-do-i-use-googles-simple-api-access-key-to-access-google-calendar-info-ph y mi problema es el mismo: no necesito acceder calendario de otra persona, necesito acceder solo a UNA. Entonces, la clave de desarrollador debería ser el camino a seguir, pero no puedo encontrar ningún tutorial en línea o ejemplos. ¿Alguien puede ayudar? – Joel
También probé la simple https://www.googleapis.com/analytics/v3/management/accounts/XXXXX/webproperties/UA-XXXXX-1/profiles?pp=1&key={YOUR-KEY-HERE} con cero éxito. Creo que necesitas OAuth incluso si son tus propios datos = (. Me encantaría ver una solución a esta pregunta – DougA