Created
May 24, 2024 10:58
-
-
Save gammaglitch/4671fa6be004f042573df0ac14ea4c0b to your computer and use it in GitHub Desktop.
Todoist API: Get all completed tasks. This script makes use of the pagination of the endpoint to aggregate all items before storing them in a CSV file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import requests | |
| import os | |
| import csv | |
| def get_completed_tasks(offset=0, access_token=None): | |
| url = "https://api.todoist.com/sync/v9/completed/get_all" | |
| headers = { | |
| "Authorization": f"Bearer {access_token}" | |
| } | |
| params = { | |
| "limit": 200, | |
| "offset": offset | |
| } | |
| response = requests.get(url, params=params, headers=headers) | |
| if response.status_code == 200: | |
| data = response.json() | |
| items = data.get("items", []) | |
| print(f"Fetched {len(items)} items.") | |
| return data | |
| else: | |
| print(f"Error: {response.status_code}") | |
| return {"items": [], "error": f"Error: {response.status_code}"} | |
| def get_all_completed_tasks(access_token): | |
| all_items = [] | |
| offset = 0 | |
| while True: | |
| result = get_completed_tasks(offset, access_token) | |
| if "error" in result: | |
| print(result["error"]) | |
| break | |
| items = result.get("items", []) | |
| all_items.extend(items) | |
| if len(items) == 0: | |
| break | |
| else: | |
| offset += 200 | |
| return all_items | |
| def save_to_csv(items, filename="completed_tasks.csv"): | |
| with open(filename, mode='w', newline='') as file: | |
| writer = csv.writer(file) | |
| writer.writerow(["id", "task_id", "completed_at", "content"]) | |
| for item in items: | |
| writer.writerow([item["id"], item["task_id"], item["completed_at"], item["content"]]) | |
| access_token = os.getenv('API_TOKEN') | |
| if not access_token: | |
| access_token = input("Enter your Todoist API token: ") | |
| default_filename = "completed_tasks.csv" | |
| filename_input = input(f"Enter the CSV file location [default: {default_filename}]: ") | |
| if filename_input == "": | |
| filename = default_filename | |
| else: | |
| filename = filename_input | |
| all_completed_tasks = get_all_completed_tasks(access_token) | |
| save_to_csv(all_completed_tasks, filename) | |
| print(f"Saved {len(all_completed_tasks)} tasks to {filename}") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment