auth google usando python

Soy bastante nuevo en la progtwigción para la web. Y quiero empezar desde cero aquí. Intenté buscar en la red pero terminé completamente confundido. Ahora, lo que quiero aprender es cómo autenticar una cuenta de Google a través de un script de python. ¿Alguien puede proporcionarme un fragmento de código o cualquier ejemplo?

Muchas gracias por adelantado.

Pasé todo un día codificando esto, después de varios bashs fallidos en las últimas semanas. Esto solo lo lleva al primer paso, pero lo hace sin bibliotecas externas. Y sí, ya sé que están cerca de dos años después del OP, pero por lo que pude ver, aún tenía que hacerse.

#!/usr/bin/python 'demo Google OAuth' import sys, os, urllib, urllib2, time, httplib import hmac, hashlib, random, re, base64 PARAMETERS = { 'oauth_consumer_key': os.getenv('OAUTH_CONSUMER_KEY') or 'anonymous', 'oauth_signature_method': 'HMAC-SHA1', 'oauth_signature': '', 'oauth_timestamp': os.getenv('OAUTH_TIMESTAMP') or '%d' % time.time(), 'oauth_nonce': os.getenv('OAUTH_NONCE') or '%x' % random.getrandbits(64), 'oauth_version': '1.0', 'oauth_callback': os.getenv('OAUTH_CALLBACK') or 'callback', } SCOPE = {'scope': 'https://www.google.com/calendar/feeds/'} SECRET = os.getenv('OAUTH_CONSUMER_SECRET') or 'anonymous' def google_oauth(): 'OAuthGetRequestToken, OAuthAuthorizeToken, OAuthGetAccessToken' request_token = get_request_token() return request_token def get_request_token(): 'ask Google for a request token' url = 'https://www.google.com/accounts/OAuthGetRequestToken' token_secret = '' # we don't have a token secret yet PARAMETERS['oauth_signature'] = sign('&'.join((SECRET, token_secret)), '&'.join(map(urlencode, ('GET', url, parameters('signing'))))) body = urllib.urlencode(SCOPE) request = urllib2.Request(url + '?' + body) request.add_header('Authorization', 'OAuth ' + parameters('header')) opener = urllib2.build_opener(urllib2.HTTPSHandler(debuglevel = 1)) response = opener.open(request) reply = response.read() response.close() return reply def byte_encode(match): 'for use with re.sub' return '%%%02X' % ord(match.group()) def urlencode(string): "unreserved = ALPHA, DIGIT, '-', '.', '_', '~'" return re.sub(re.compile('[^0-9A-Za-z._~-]'), byte_encode, string.encode('utf8')) def sign(secret, text): print >>sys.stderr, 'signature base string: "%s", secret: %s' % ( repr(text), repr(secret)) digest = hmac.new(secret, text, hashlib.sha1).digest() return urlencode(base64.encodestring(digest).rstrip()) def base64string(hexstring): recoded = urlencode(base64.encodestring(hexstring.decode('hex')).rstrip()) print >>sys.stderr, 'recoded:', recoded return recoded def parameters(format): if format == 'header': formatted = ', '.join(['%s="%s"' % (key, value) for key, value in PARAMETERS.items()]) elif format == 'signing': formatted = '&'.join(sorted(['%s=%s' % (key, urlencode(value.encode('utf8'))) for key, value in (PARAMETERS.items() + SCOPE.items()) if key not in ['oauth_signature']])) #print >>sys.stderr, format, formatted return formatted def hmac_sha1_test(): 'from tools.ietf.org/html/rfc2202' assert sign('\x0b' * 20, 'Hi There') == base64string( 'b617318655057264e28bc0b6fb378c8ef146be00') assert sign('Jefe', 'what do ya want for nothing?') == base64string( 'effcdf6ae5eb2fa2d27416d5f184df9c259a7c79') assert sign('\xaa' * 20, '\xdd' * 50) == base64string( '125d7342b9ac11cd91a39af48aa17b4f63f175d3') # last test from http://sofes.miximages.com/python/%26' + \ 'oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3D' + \ 'kllo9940pd9333jh%26oauth_signature_method%3DHMAC-SHA1%26' + \ 'oauth_timestamp%3D1191242096%26oauth_token%3Dnnch734d00sl2jdk%26' + \ 'oauth_version%3D1.0%26size%3Doriginal') == urlencode( 'tR3+Ty81lMeYAr/Fid0kMTYa/WM=') return True if __name__ == '__main__': command = os.path.splitext(os.path.basename(sys.argv[0]))[0] print eval(command)(*sys.argv[1:]) 

Guárdelo como google_oauth.py, y puede enlazarlo así:

 ln -s google_oauth.py hmac_sha1_test.py 

Para probar cualquiera de las subrutinas. Combinado con el uso de variables de entorno, puede comparar sus resultados con los de OAuth Playground de Google (otras personas aquí proporcionaron el enlace) y ver dónde se equivoca. Encontré muchos problemas con el script de esa manera; Puede que haya muchos más. Pero si invocas ./google_oauth.py, deberías ver algo como esto:

 jcomeau @ intrepid: ~ / rentacoder / marchie $ ./google_oauth.py 
 firma base: "'GET & https% 3A% 2F% 2Fwww.google.com% 2Faccounts% 2FOAuthGetRequestToken & oauth_callback% 3DcallbackComparesPero_AparesApares lo_Por- sas & amp; Fare_como_Agrupos_Pero_Alternas_Pero_Alguna_a_a_a_a_a_a_a_a_a_a_a_a_g_PerciAgrasApuneta_Agrupaciones_Por_Alguna_aPa_aPaPa_a_a_a_a_a_a_a_a_a_a_a_a_a_a_aPaPa & l 3Dhttps% 253A% 252F% 252Fwww.google.com% 252Fcalendar% 252Ffeeds% 252F '", secreto:' anonymous & '
 enviar: 'GET /accounts/OAuthGetRequestToken?scope=https%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2F HTTP / 1.1 \ r \ nAccept-Encoding: identity \ r \ nHost: www.google.com \ r \ nConnection: close \ r \ nAutorización: OAuth oauth_nonce Genuciones de las personas = "1302253695", oauth_asignas de las partes de los juegos: "aPccggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggbw , oauth_callback = "callback" \ r \ nUsuario-Agente: Python-urllib / 2.6 \ r \ n \ r \ n '
 respuesta: 'HTTP / 1.1 200 OK \ r \ n'
 encabezado: Content-Type: text / plain;  conjunto de caracteres = UTF-8
 encabezado: Fecha: viernes, 08 de abril 2011 09:08:20 GMT
 cabecera: Vence: viernes, 08 de abril 2011 09:08:20 GMT
 encabezado: Cache-Control: privado, max-age = 0
 encabezado: X-Content-Type-Options: nosniff
 cabecera: X-XSS-Protección: 1;  modo = bloque
 encabezado: Contenido-Longitud: 118
 encabezado: Servidor: GSE
 cabecera: conexión: cerrar
 oauth_token = 4% 2FfvSIWW9WBHXa_CjInpOf4FdNYhCj & oauth_token_secret = qhB1EGIKjL1pG9POF2ZOcQk3 & oauth_callback_confirmed = true

prueba este ejemplo

Ver el documento en la documentación de Google Data API:

  • Comenzando con la Biblioteca de Google Data Python

Hay una muestra de ClientLogin en “Hello World”.

Algunos buenos enlaces arriba (el patio de recreo es invaluable).

Utilizo una mezcla del código oAuth de Leah Culver (el ejemplo en la publicación de b3rx) y el código Python OAuth de FireEagle . La primera, la última vez que miré, carecía de métodos de scope.

Además, asegúrese de tener claro si está utilizando OAuth de 2 o 3 patas :