Estoy escribiendo una aplicación de línea de comandos que accede a linkedin. Estoy usando la API python-linkedin.Acceso sin navegador a LinkedIn con Python
Las cosas funcionan como esperaba, pero tengo una gran queja sobre el proceso de autenticación. Actualmente, necesito:
- Iniciar mi solicitud y esperar a que se imprima una URL de autenticación
- Ir a esa URL con mi navegador
- Dar mi bendición para la aplicación y esperar a que me redirigir a una URL
- Extrae el token de acceso de la dirección URL
- de entrada que token de acceso en mi aplicación
- hacer lo que tengo que ver con linkedin
No me gusta realizar los pasos 2 a 5 manualmente, así que me gustaría automatizarlos. Lo que yo estaba pensando en hacer era:
- utilizar un cliente sin cabeza como mechanize para acceder a la dirección URL del paso 1 anterior
- Raspe la pantalla y darle mi bendición de forma automática (puede ser necesaria para usuario y contraseña de entrada - sé que estos, por lo que está bien)
- esperar a ser redirigido y agarrar el URL de redirección
- Extracto del token de la URL
- beneficio!
tiempo Pregunta:
- Mirando a su alrededor, this guy right here on SO intentó hacer algo similar, pero se le dijo que es imposible. ¿Por qué?
- Luego, this guy here does en Jython y HtmlUnit. Debería ser posible con Python recto y mecanizado, ¿verdad?
- Por último, ¿alguien ha visto una solución con Python y mecanizado directo (o cualquier otra alternativa de navegador sin cabeza)? No quiero reinventar la rueda, pero la codificaré si es necesario.
EDITAR:
código para inicializar fichas (utilizando el enfoque de la respuesta aceptada):
api = linkedin.LinkedIn(KEY, SECRET, RETURN_URL)
result = api.request_token()
if not result:
print 'Initialization error:', api.get_error()
return
print 'Go to URL:', api.get_authorize_url()
print 'Enter verifier: ',
verifier = sys.stdin.readline().strip()
if not result:
print 'Initialization error:', api.get_error()
return
result = api.access_token(verifier=verifier)
if not result:
print 'Initialization error:', api.get_error()
return
fin = open('tokens.pickle', 'w')
for t in (api._request_token, api._request_token_secret,
api._access_token, api._access_token_secret):
pickle.dump(t, fin)
fin.close()
print 'Initialization complete.'
Código de usar tokens:
api = linkedin.LinkedIn(KEY, SECRET, RETURN_URL)
tokens = tokens_fname()
try:
fin = open(tokens)
api._request_token = pickle.load(fin)
api._request_token_secret = pickle.load(fin)
api._access_token = pickle.load(fin)
api._access_token_secret = pickle.load(fin)
except IOError, ioe:
print ioe
print 'Please run `python init_tokens.py\' first'
return
profiles = api.get_search({ 'name' : name })
¿Se está autenticando contra API y luego tirando datos u otras personas? –
@Paul: me estoy autenticando. – misha
¿No podría simplemente hacerlo una vez manualmente y luego almacenar el token localmente (codificarlo en la secuencia de comandos python)? –