Skip to content

Instantly share code, notes, and snippets.

@gammaglitch
Created May 24, 2024 10:58
Show Gist options
  • Select an option

  • Save gammaglitch/4671fa6be004f042573df0ac14ea4c0b to your computer and use it in GitHub Desktop.

Select an option

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.
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