From c2626e39a2f61d98842ad183d0db01c41662a318 Mon Sep 17 00:00:00 2001 From: Matthew Hague <matthew.hague@rhul.ac.uk> Date: Sat, 19 Oct 2024 17:49:12 +0100 Subject: [PATCH] refactor(ms): streamline cookie handling --- microsoft/getting-forms-responses.md | 33 +++++----------------------- 1 file changed, 6 insertions(+), 27 deletions(-) diff --git a/microsoft/getting-forms-responses.md b/microsoft/getting-forms-responses.md index e64d6a0..5a245b1 100644 --- a/microsoft/getting-forms-responses.md +++ b/microsoft/getting-forms-responses.md @@ -1,7 +1,7 @@ # Getting MS Forms Responses from Python -To save you having to keep going to MS Forms to download the spreadsheet if you have a form you need to check often. +To save you having to keep going to MS Forms to download the spreadsheet if you have a form you need to check often. You might have to point your browser at MS Forms first though, just to get the cookies. ## 1. Get Your Form ID @@ -17,35 +17,14 @@ Let's call this `FORM_ID` from now on If you have logged into MS Forms recently, you'll have some cookies in your browser you can use to get in. You can use these cookies in a Python script using the `browser_cookie3` library. I'll use `browser_cookie3.firefox()` to get FireFox cookies. You might want `browser_cookie3.chrome()` or any of the other ones it supports. -The important cookies are `AADAuth.forms`, `OIDCAuth.forms`, and `FormsWebSessionId` in the domain `forms.office.com` (except `AADAuth.forms` which has domain `.forms.office.com`…). +The important cookies are `AADAuth.forms`, `OIDCAuth.forms`, and `FormsWebSessionId` in the domain `forms.office.com` (except `AADAuth.forms` which has domain `.forms.office.com`…), but you don't need to worry about that. To get the cookies you can use the code below. import browser_cookie3 - - FORMS_DOMAINS = set([ - "forms.office.com", - ".forms.office.com", # oh microsoft - ]) - FORMS_COOKIES = set([ - "AADAuth.forms", - "FormsWebSessionId", - "OIDCAuth.forms" - ]) - cookie_jar = browser_cookie3.firefox() - cookies = { - c.name : c.value - for c in cookie_jar - if c.name in FORMS_COOKIES and c.domain in FORMS_DOMAINS - } - -And check if something went wrong: - if len(cookies) < len(FORMS_COOKIES): - raise Exception( - f"Missing forms cookies, please make sure you are logged in." - ) +You can check the cookie jar contains the cookies above if you want, and raise an error if it does not. ## 3. Getting the Responses @@ -55,13 +34,13 @@ We get the responses from a URL that includes the `FORM_ID`. "https://forms.office.com/formapi/DownloadExcelFile.ashx?formid=" \ + FORM_ID -To get the responses we'll use a GET with the requests library. The response (if successful -- status code 200) will contain an Excel spreadsheet in its content. +To get the responses we'll use a GET with the requests library. The response (if successful -- status code 200) will contain an Excel spreadsheet in its content. If the response is not successful, it's probably because you're not logged into MS Forms. import requests - resp = requests.get(RESPONSES_URL, cookies=cookies) + resp = requests.get(RESPONSES_URL, cookies=cookie_jar) if resp.status_code != 200: - raise Exception("Getting responses failed!") + raise Exception("Getting responses failed, try logging in to MS Forms again") ## 4. Using the Responses -- GitLab