{"id":224,"date":"2020-04-09T18:52:34","date_gmt":"2020-04-09T16:52:34","guid":{"rendered":"https:\/\/jochem.jochemenbianca.nl\/?p=224"},"modified":"2020-04-09T18:52:34","modified_gmt":"2020-04-09T16:52:34","slug":"koppelingen-met-behulp-van-python-deel-1","status":"publish","type":"post","link":"https:\/\/jochem.jochemenbianca.nl\/?p=224","title":{"rendered":"Koppelingen met behulp van Python &#8211; deel 1"},"content":{"rendered":"<p>Een van de projecten waar ik nu mee bezig ben is om data uit een leerlingenadministratiepakket via een zelfgehostte database naar de Google Directory en later de Active Directory te krijgen. Ik heb gekozen om dit te doen op basis van Python. Het eerste script dat ik gemaakt heb is bedoeld om data uit het administratieve pakket te krijgen en in de database te zetten. Dit beschijf ik later. Hieronder mijn eerste stappen om te koppelen met Google.<br \/>\nTen eerste installeren we een CentOS 8 server.<br \/>\nZorg dat je een gebruiker hebt die sudo kan gebruiken (zet hem in de wheel groep). Installeer als root dus sudo en vim, dat is ook altijd handig.<\/p>\n<p><code>yum install sudo vim<\/code><\/p>\n<p>De volgende stappen doen we dus allemaal als gewone user. Als eerste installeren we python en pip<\/p>\n<p><code>sudo yum install python3 python3-pip<\/code><\/p>\n<p><code>sudo pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib autopep8<\/code><\/p>\n<p>Ga naar de website <a href=\"https:\/\/developers.google.com\/admin-sdk\/directory\/v1\/quickstart\/python\">https:\/\/developers.google.com\/admin-sdk\/directory\/v1\/quickstart\/python<\/a> en klik daar op Enable Directory API. Volg de stappen en je krijgt een credentials.json file die je opslaat.<\/p>\n<p>Nu is het belangrijk dat je op een computer werkt waar je de beschikking hebt over een webbrowser. Het creeeren van de token.pickle file die je nog hebt, vereist namelijk een browser met javascript. Ik ga er dus vanuit dat je bovenstaande en onderstaande script uitvoert op een computer met een webbrowser. Als je eenmaal de credentials.json en token.pickle file hebt is een webbrowser niet meer nodig.<br \/>\nIn het volgende script is het belangrijk om goed te kijken naar de SCOPES. Dit zijn namelijk de scopes waar je rechten voor gaat krijgen.<br \/>\nAls je beheer wil doen op de Google Directory zijn dit de belangrijke scopes:<\/p>\n<p>Voor user management: https:\/\/www.googleapis.com\/auth\/admin.directory.user<br \/>\nVoor group management: https:\/\/www.googleapis.com\/auth\/admin.directory.group<br \/>\nVoor Org. Unit. management: https:\/\/www.googleapis.com\/auth\/admin.directory.orgunit<\/p>\n<p>Maak een nieuw bestand aan genaamd quickstart.py<br \/>\n<code>vim quickstart.py<\/code><br \/>\nen kopieer daar het volgende in:<\/p>\n<pre>from __future__ import print_function\r\nimport pickle\r\nimport os.path\r\nfrom googleapiclient.discovery import build\r\nfrom google_auth_oauthlib.flow import InstalledAppFlow\r\nfrom google.auth.transport.requests import Request\r\n\r\n# If modifying these scopes, delete the file token.pickle.\r\nSCOPES = ['https:\/\/www.googleapis.com\/auth\/admin.directory.user']\r\n\r\ndef main():\r\n    \"\"\"Shows basic usage of the Admin SDK Directory API.\r\n    Prints the emails and names of the first 10 users in the domain.\r\n    \"\"\"\r\n    creds = None\r\n    # The file token.pickle stores the user's access and refresh tokens, and is\r\n    # created automatically when the authorization flow completes for the first\r\n    # time.\r\n    if os.path.exists('token.pickle'):\r\n        with open('token.pickle', 'rb') as token:\r\n            creds = pickle.load(token)\r\n    # If there are no (valid) credentials available, let the user log in.\r\n    if not creds or not creds.valid:\r\n        if creds and creds.expired and creds.refresh_token:\r\n            creds.refresh(Request())\r\n        else:\r\n            flow = InstalledAppFlow.from_client_secrets_file(\r\n                'credentials.json', SCOPES)\r\n            creds = flow.run_local_server(port=0)\r\n        # Save the credentials for the next run\r\n        with open('token.pickle', 'wb') as token:\r\n            pickle.dump(creds, token)\r\n\r\n    service = build('admin', 'directory_v1', credentials=creds)\r\n\r\n    # Call the Admin SDK Directory API\r\n    print('Getting the first 10 users in the domain')\r\n    results = service.users().list(customer='my_customer', maxResults=10,\r\n                                orderBy='email').execute()\r\n    users = results.get('users', [])\r\n\r\n    if not users:\r\n        print('No users in the domain.')\r\n    else:\r\n        print('Users:')\r\n        for user in users:\r\n            print(u'{0} ({1})'.format(user['primaryEmail'],\r\n                user['name']['fullName']))\r\n\r\n\r\nif __name__ == '__main__':\r\n    main()\r\n<\/pre>\n<p>We voeren nu dit python script uit.<br \/>\n<code>python3 quickstart.py<\/code><br \/>\nDe eerste keer dat je dit script uitvoert, wordt je naar een website geleid, en wordt er een token.pickle file aangemaakt in de directory waar je het script start. Deze, samen met de credentials.json heb je nodig om te kunnen connecten met de Google API<\/p>\n<p>Na het aanmaken van de token.pickle file wordt ook de rest van het script uitgevoerd en verschijnt een lijst met de eerste 10 accounts in je Google directory. Dit is het begin punt van onze reis in de Google API wereld<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Een van de projecten waar ik nu mee bezig ben is om data uit een leerlingenadministratiepakket via een zelfgehostte database naar de Google Directory en later de Active Directory te krijgen. Ik heb gekozen om dit te doen op basis van Python. Het eerste script dat ik gemaakt heb is [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-224","post","type-post","status-publish","format-standard","hentry","category-python"],"_links":{"self":[{"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/posts\/224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=224"}],"version-history":[{"count":4,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/posts\/224\/revisions"}],"predecessor-version":[{"id":228,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/posts\/224\/revisions\/228"}],"wp:attachment":[{"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}