2011-11-21 12 views
8

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ę:

  1. Zacznij mój wniosek i czekać na to, aby wydrukować adres URL uwierzytelniania
  2. Przejdź do tego adresu URL w przeglądarce
  3. Daj moje błogosławieństwo dla aplikacji i czekać na to, żeby mnie przekierować do adresu URL
  4. Extract tokenu dostępu z adresu URL
  5. Wejście że token dostępu do mojej aplikacji
  6. 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 }) 
+0

Czy uwierzytelniasz się przeciwko API, a następnie wyciągasz dane lub inne osoby? –

+0

@Paul: Uwierzytelniam siebie. – misha

+0

Nie można zrobić tego po prostu ręcznie, a następnie zapisać token lokalnie (zakodować go w skrypcie Pythona)? –

Odpowiedz

2

Planując autoryzację tylko raz, a następnie nawiązywanie połączeń z API w celu uzyskania własnych informacji, po prostu ręcznie odzyskałem token dostępu, zamiast martwić się o jego automatyzację.

Żeton dostępu użytkownika wygenerowany przez LinkedIn podczas autoryzacji danej aplikacji jest stały, chyba że na ekranie autoryzacji określono inaczej. Wszystko, co musisz zrobić, to wygenerować ekran autoryzacji z aplikacją, przejść przez proces, a po powodzeniu odezwać się i przechowywać token dostępu użytkownika (token i sekret). Gdy już to zrobisz, możesz je zakodować w pliku, bazie danych itp. I podczas nawiązywania połączeń z interfejsem API, użyj ich.

Jest w PHP, ale w zasadzie to robi this demo. Wystarczy zmodyfikować skrypt demo.php, aby w razie potrzeby wygenerować token.

Powiązane problemy