Základy API s Pythonem a Todoist API
V tomto článku se naučíme, co je API a jak s ní pracovat pomocí příkazové řádky a Pythonu.
Tento článek navazuje na mé video “Jak na API pomocí praktického projektu s Todoist API” a poskytuje stručný návod pro práci s Todoist API pomocí příkazové řádky a Pythonu.
Pro ucelenou představu se prvně podívejte na video a poté si přečtěte tento článek, který obsahuje všechny důležité odkazy, příkazy do cmd a program v Pythonu.
Krok 1: Získání tokenu
Vytvořte si účet na Todoistu, pokud jej ještě nemáte. Navštivte www.todoist.com.
Získejte svůj token v nastavení vašeho Todoist účtu v záložce "Integrace", v části "Pro Vývojáře".
Krok 2: Instalace cURL
Ve Windows 10 a novějších je již cURL součástí operačního systému.
Pokud máte starší verzi Windows nebo jiný operační systém, nainstalujte si cURL podle tohoto odkazu.
Krok 3: Získání seznamu projektů pomocí GET metody
Navštivte dokumentaci Todoist API na stránce https://developer.todoist.com/
v části REST API.
Zkopírujte příklad požadavku pro získání seznamu vašich projektů v části cURL.
Pokud máte windows použijte tento upravený příkaz:
curl -X GET ^
https://api.todoist.com/rest/v2/projects ^
-H "Authorization: Bearer zde-vlozte-vas-token"
Vložte svůj token místo "zde-vlozte-vas-token".
Spusťte tento příkaz v příkazové řádce.
Krok 4: Vytvoření nového projektu pomocí POST metody
Najděte v dokumentaci část pro přidání nového projektu.
Zkopírujte příklad požadavku pro vytvoření nového projektu v části cURL.
Pokud máte windows použijte tento upravený příkaz:
curl "https://api.todoist.com/rest/v2/projects" ^
-X POST ^
--data "{\"name\": \"Shopping List\"}" ^
-H "Content-Type: application/json" ^
-H "X-Request-Id: $(uuidgen)" ^
-H "Authorization: Bearer zde-vlozte-vas-token"
Vložte svůj token místo "zde-vlozte-vas-token".
Spusťte tento příkaz v příkazové řádce.
Výsledkem by měl být nově vytvořený projekt s názvem "Shopping List" ve vašem Todoist účtu.
Krok 5: Vytvoření GET požadavku pomocí Pythonu
Příkazová řádka je skvělá pro jednoduché požadavky na API, ale co když chcete napsat komplexnější program, který pracuje s API? V takovém případě je nejlepší použít jazyk jako Python.
Python má mnoho knihoven, které usnadňují práci s API. Jednou z nejpoužívanějších je Requests.
Pokud nemáte Requests nainstalovánu, můžete to udělat pomocí pip. Otevřete příkazovou řádku a napište:
pip install requests
Nyní můžeme vytvořit funkci, která bude odesílat GET požadavek na získání všech projektů na Todoist API, podobně jako jsme to dělali v příkazové řádce:
import requests
import json
API_KEY = "zde-vlozte-vas-token"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
projects_url = "https://api.todoist.com/rest/v2/projects"
projects_response = requests.get(projects_url, headers=headers)
print(projects_response.status_code)
projects = projects_response.json()
first_project_name = projects[0]["name"]
print(first_project_name)
second_project_id = projects[1]["id"]
second_project_color = projects[1]["color"]
print(second_project_id)
print(second_project_color)
Stejně jako v předchozím příkladě, musíte nahradit 'zde-vlozte-vas-token'
svým skutečným API tokenem.
Krok 6: Vytvoření nového úkolu
Stejně jako jsme v příkazové řádce odeslali POST požadavek na vytvoření nového projektu, můžeme to udělat i v Pythonu. Vytvoříme další funkci, která odesílá POST požadavek.
Pokračování programu:
task_url = "https://api.todoist.com/rest/v2/tasks"
data = {"content": "Muj první úkol pomocí API", "project_id": projects[1]["id"]}
json_data = json.dumps(data)
task_response = requests.post(task_url, headers=headers, data=json_data)
task = task_response.json()
print(task_response.status_code)
print(task["content"])
Krok 7: Vylepšení programu
Nyní můžeme skript vylepšit například přidáním funkcí či argparse knihovnou.
import requests
import json
import argparse
API_KEY = "zde-vlozte-vas-token"
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
def get_last_project_id():
projects_url = "https://api.todoist.com/rest/v2/projects"
try:
projects_response = requests.get(projects_url, headers=HEADERS)
# Raises a HTTPError if one occurred.
projects_response.raise_for_status()
except requests.exceptions.HTTPError as err:
raise Exception(f"Chyba při získávání projektů: {err}")
projects = projects_response.json()
last_project_id = projects[-1]["id"]
return last_project_id
def create_task(project_id, task_name):
task_url = "https://api.todoist.com/rest/v2/tasks"
data = {"content": task_name, "project_id": project_id}
json_data = json.dumps(data)
try:
task_response = requests.post(task_url, headers=HEADERS, data=json_data)
# Raises a HTTPError if one occurred.
task_response.raise_for_status()
except requests.exceptions.HTTPError as err:
raise Exception(f"Chyba při vytváření úkolu: {err}")
task = task_response.json()
return task["id"]
def parse_arguments():
parser = argparse.ArgumentParser()
parser.add_argument("task_name", help="Název úkolu k vytvoření")
args = parser.parse_args()
return args.task_name
if __name__ == "__main__":
task_name = parse_arguments()
try:
last_project_id = get_last_project_id()
task_id = create_task(last_project_id, task_name)
print(f"Úkol '{task_name}' byl úspěšně vytvořen v projektu s ID {last_project_id}. ID nového úkolu je {task_id}.")
except Exception as e:
print(f"Došlo k chybě: {e}")