Guest User

Untitled

a guest
Jun 8th, 2019
393
0
Never
10
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.14 KB | None | 0 0
  1. import requests
  2. from http.server import BaseHTTPRequestHandler, HTTPServer
  3. import webbrowser
  4.  
  5. # Dla ułatwienia, definiujemy domyślne wartości (tak zwane stałe), są one uniwersalne
  6. DEFAULT_OAUTH_URL = 'https://allegro.pl/auth/oauth'
  7. DEFAULT_REDIRECT_URI = 'http://localhost:8000'
  8.  
  9.  
  10.  
  11.  
  12. # Implementujemy funkcję, której parametry przyjmują kolejno:
  13. # - client_id (ClientID), api_key (API Key) oraz opcjonalnie redirect_uri i oauth_url
  14. # (jeżeli ich nie podamy, zostaną użyte domyślne zdefiniowane wyżej)
  15. def get_access_code(client_id, api_key, redirect_uri=DEFAULT_REDIRECT_URI, oauth_url=DEFAULT_OAUTH_URL):
  16. # zmienna auth_url zawierać będzie zbudowany na podstawie podanych parametrów URL do zdobycia kodu
  17. auth_url = '{}/authorize' \
  18. '?response_type=code' \
  19. '&client_id={}' \
  20. '&api-key={}' \
  21. '&redirect_uri={}'.format(oauth_url, client_id, api_key, redirect_uri)
  22.  
  23. # uzywamy narzędzia z modułu requests - urlparse - służy do spardowania podanego url
  24. # (oddzieli hostname od portu)
  25. parsed_redirect_uri = requests.utils.urlparse(redirect_uri)
  26.  
  27. # definiujemy nasz serwer - który obsłuży odpowiedź allegro (redirect_uri)
  28. server_address = parsed_redirect_uri.hostname, parsed_redirect_uri.port
  29.  
  30. # Ta klasa pomoże obsłużyć zdarzenie GET na naszym lokalnym serwerze
  31. # - odbierze żądanie (odpowiedź) z serwisu allegro
  32. class AllegroAuthHandler(BaseHTTPRequestHandler):
  33. def __init__(self, request, address, server):
  34. super().__init__(request, address, server)
  35.  
  36. def do_GET(self):
  37. self.send_response(200, 'OK')
  38. self.send_header('Content-Type', 'text/html')
  39. self.end_headers()
  40.  
  41. self.server.path = self.path
  42. self.server.access_code = self.path.rsplit('?code=', 1)[-1]
  43.  
  44. # Wyświetli nam adres uruchomionego lokalnego serwera
  45. print('server_address:', server_address)
  46.  
  47. # Uruchamiamy przeglądarkę, przechodząc na adres zdefiniowany do uzyskania kodu dostępu
  48. # wyświetlić się powinien formularz logowania do serwisu Allegro.pl
  49. webbrowser.open(auth_url)
  50.  
  51. # Uruchamiamy nasz lokalny web server na maszynie na której uruchomiony zostanie skrypt
  52. # taki serwer dostępny będzie pod adresem http://localhost:8000 (server_address)
  53. httpd = HTTPServer(server_address, AllegroAuthHandler)
  54. print('Waiting for response with access_code from Allegro.pl (user authorization in progress)...')
  55.  
  56. # Oczekujemy tylko jednego żądania
  57. httpd.handle_request()
  58.  
  59. # Po jego otrzymaniu zamykamy nasz serwer (nie obsługujemy już żadnych żądań)
  60. httpd.server_close()
  61.  
  62. # Klasa HTTPServer przechowuje teraz nasz access_code - wyciągamy go
  63. _access_code = httpd.access_code
  64.  
  65. # Dla jasności co się dzieje - wyświetlamy go na ekranie
  66. print('Got an authorize code: ', _access_code)
  67.  
  68. # i zwracamy jako rezultat działania naszej funkcji
  69. return _access_code
  70.  
  71.  
  72. access_code=get_access_code('moje id', 'password')
Advertisement
Comments
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
Add Comment
Please, Sign In to add comment