Piszę aplikację wiersza polecenia, która uzyskuje dostęp do linkedin. Korzystam z interfejsu API python-linkedin.Bez przeglądarki dostępu do LinkedIn z Python
Rzeczy działają zgodnie z oczekiwaniami, ale mam ogromny problem z procesem uwierzytelniania. Obecnie muszę:
- Zacznij mój wniosek i czekać na to, aby wydrukować adres URL uwierzytelniania
- Przejdź do tego adresu URL w przeglądarce
- Daj moje błogosławieństwo dla aplikacji i czekać na to, żeby mnie przekierować do adresu URL
- Extract tokenu dostępu z adresu URL
- Wejście że token dostępu do mojej aplikacji
- Rób, co należy zrobić z LinkedIn
Nie lubię robić kroków od 2 do 5 ręcznie, więc chciałbym je zautomatyzować. Co myślałem o robi to:
- Użyj bezgłowy klient jak mechanize dostęp do adresu URL z kroku 1 powyżej
- zeskrobać ekranu i dać moje błogosławieństwo automatycznie (może być wymagana do wprowadzania nazwy użytkownika i hasła - znam tych, więc jest OK)
- doczekać, aby zostać przekierowane i chwycić przekierowanie
- Extract token z adresu URL
- zysk!
czas Pytanie:
- Rozglądając, this guy right here on SO próbował zrobić coś podobnego, ale powiedziano mi, że to niemożliwe. Czemu?
- Następnie, this guy here does to w Jython i HtmlUnit. Powinien być możliwy z prostym Pythonem i zmechanizować, prawda?
- Wreszcie, czy ktoś widział rozwiązanie z prostym pythonem i mechanizacją (lub inną alternatywną przeglądarką bezgłową)? Nie chcę odkrywać koła na nowo, ale w razie potrzeby zakodowuję.
EDIT:
Kod do inicjalizacji tokenów (za pomocą podejścia przyjętego odpowiedź):
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.'
kod używać znaczników:
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 })
Czy uwierzytelniasz się przeciwko API, a następnie wyciągasz dane lub inne osoby? –
@Paul: Uwierzytelniam siebie. – misha
Nie można zrobić tego po prostu ręcznie, a następnie zapisać token lokalnie (zakodować go w skrypcie Pythona)? –