Hier ist ein Beispiel, das die API des Cloud-Dienstes "BOX" für die Dateifreigabe von Python verwendet.
Verschiedene Personen haben die Verwendung der API vorgestellt, einschließlich des Dokuments "BOX". Ich hatte keine Informationen in der Nähe von dem, was ich tun wollte, also schrieb ich einen Artikel.
https://github.com/box/box-python-sdk/blob/master/docs/usage/authentication.md Zunächst wollte ich den folgenden Beispielcode auf dieser SDK-Site schnell ausführen.
client = Client(auth)
user = client.user().get()
print('User ID is {0}'.format(user.id))
Wenn Sie es nur verschieben möchten, können Sie die OAuth-Authentifizierung manuell übergeben. Diesmal habe ich jedoch versucht, OAuth mit einer einfachen Methode zu realisieren.
Mac 10.14.6
Python 3.7.4
boxsdk 2.6.1
Bitte installieren Sie mit Pip oder anderen Werkzeugen entsprechend Ihrer Umgebung.
pip install boxsdk
https://developer.box.com
Kopieren Sie die hier angezeigte Client-ID und den Client-sensitiven Code in die Quelle.
Geben Sie "http: // localhost: 8080" als Umleitungs-URI ein.
sample.py
from boxsdk import OAuth2, Client
import webbrowser
import http.server
import socketserver
from urllib.parse import urlparse, parse_qs
#Rufen Sie den BOX-Verwaltungsbildschirm auf
CLIENT_ID = 'Kunden ID'
CLIENT_SECRET = 'Client-sensibler Code'
#Stellen Sie dies auf dem BOX-Verwaltungsbildschirm ein
REDIRECT_URI = 'http://localhost:8080'
HOST = '127.0.0.1'
PORT = 8080
#Variable zum Einfügen des von BOX ausgegebenen Authentifizierungscodes
global auth_code
auth_code = None
oauth = OAuth2(
client_id = CLIENT_ID,
client_secret = CLIENT_SECRET,
store_tokens = None #Der Token-Speicher entfällt diesmal
)
#Starten Sie OAuth
auth_url, csrf_token = oauth.get_authorization_url(REDIRECT_URI)
#Starten Sie den Browser und geben Sie die BOX-ID und das Passwort ein
#Bei Eingabe umleiten_Auf URI umgeleitet
webbrowser.open(auth_url)
# REDIRECT_Verarbeitung, wenn URI getroffen wird
class ServerHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
global auth_code
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(b"<h1>Authenticated</h1>")
parsed_path = urlparse(self.path)
query = parse_qs(parsed_path.query)
auth_code = query['code'][0]
with socketserver.TCPServer((HOST, PORT), ServerHandler) as server:
print('http server start')
# server.serve_forever() # Ctrl+Setzen Sie die Verarbeitung fort, bis ein Interrupt auftritt, z. B. Drücken von C.
server.handle_request() #Beenden Sie nach Bearbeitung einer Anfrage
print('http server shutdown')
# auth_Nachdem Sie den Code haben, können Sie die API von hier aus verwenden
access_token, refresh_token = oauth.authenticate(auth_code)
client = Client(oauth)
me = client.user().get()
print('My user ID is {0}'.format(me.id))
Ich wollte es auf JupyterLab ausführen, also habe ich es in einer Datei geschrieben.
Es ist einfach, einen einfachen Webserver mit Python zu starten. Diesmal gefällt mir die Tatsache, dass der Webserver nach der Verarbeitung einer Anfrage beendet wird.
Im Gegenteil, ich mag es nicht, dass die Methode do_GET direkt der globalen Variablen zugewiesen wird. Gibt es eine schöne Möglichkeit, es zu schreiben?
Ich denke nicht, dass es seltsam funktioniert, aber ich bin noch nicht mit Python vertraut, daher würde ich es begrüßen, wenn Sie auf merkwürdige Punkte oder Verbesserungen hinweisen könnten.
Recommended Posts