I. Pendahuluan

Laporan pengembangan ini bertujuan untuk menunjukkan bagaimana menggunakan Notion API untuk mengotomatisasi jadwal latihan. Notion adalah alat produktivitas all-in-one yang memungkinkan pengguna untuk membuat dan mengorganisir database, catatan, tugas, dan banyak lagi. Notion API menyediakan akses programatik bagi pengembang ke fitur-fitur Notion, memungkinkan otomatisasi berbagai tugas.

Potongan kode yang disediakan menunjukkan bagaimana menggunakan Notion API untuk membuat acara latihan dalam database berdasarkan jadwal yang telah ditentukan sebelumnya. Script mengambil acara yang ada dalam rentang tanggal tertentu dan membuat acara baru untuk hari-hari yang tidak memiliki acara terjadwal. Jadwal latihan didefinisikan dalam kamus days_of_week, yang memetakan setiap hari dalam seminggu ke nama latihan dan daftar tag.

Dengan mengotomatisasi proses penjadwalan latihan dengan Notion API, pengembang dapat menghemat waktu dan mengurangi kesalahan manual. Laporan ini akan memberikan panduan langkah demi langkah untuk membantu Anda menyiapkan Notion API dan memahami berbagai komponen potongan kode.

II. Menyiapkan Notion API

Untuk menggunakan Notion API, Anda memerlukan akun Notion dan integrasi yang telah disiapkan. Berikut adalah panduan langkah demi langkah untuk melakukan autentikasi ke Notion API:

  1. Buat integrasi di Notion

    • Masuk ke Notion dan navigasikan ke halaman Integrations dengan mengklik ikon profil Anda di pojok kiri bawah layar dan kemudian mengklik “Integrations”.
    • Klik tombol “Create a new integration”.
    • Beri nama integrasi Anda dan pilih workspace tempat Anda ingin menggunakannya.
    • Klik tombol “Submit” untuk membuat integrasi.
  2. Dapatkan token integrasi Anda

    • Setelah integrasi Anda dibuat, Anda dapat mendapatkan token integrasi Anda dengan mengklik nama integrasi tersebut.
    • Salin token integrasi Anda untuk digunakan dalam kode Anda.
  3. Pasang paket Notion API

    • Buka terminal atau command prompt Anda.

    • Jalankan perintah berikut untuk memasang paket Notion API:

      pip install notion-client
      
  4. Menyiapkan klien Notion API

    • Impor klien Notion API ke dalam kode Anda dengan menambahkan baris berikut di bagian atas:

      from notion_client import Client
      
    • Autentikasi klien dengan menambahkan baris berikut dan mengganti <API Key> dengan token integrasi Anda:

      notion = Client(auth="<API Key>")
      
  5. Menyiapkan detail database

    • Dapatkan ID database dari database di mana Anda ingin menambahkan acara.
    • Ganti variabel database_id pada potongan kode dengan ID database Anda.

Potongan kode yang disediakan menggunakan objek notion_client.Client untuk berinteraksi dengan Notion API. Objek Client digunakan untuk mengautentikasi klien API dan memberikan akses ke berbagai sumber daya Notion, seperti database dan halaman.

Variabel database_id diatur ke ID database Notion di mana acara latihan akan ditambahkan. ID dapat ditemukan dalam URL database.

III. Menentukan Jadwal Latihan

Jadwal latihan didefinisikan dalam potongan kode menggunakan variabel-variabel berikut:

  • start_days_ago: jumlah hari sebelum tanggal hari ini untuk memulai jadwal
  • end_days_after: jumlah hari setelah tanggal hari ini untuk mengakhiri jadwal
  • days_of_week: sebuah kamus yang memetakan setiap hari dalam seminggu ke nama latihan dan daftar tag.

Kamus days_of_week digunakan untuk menentukan rencana latihan untuk setiap hari dalam seminggu. Setiap hari dalam seminggu adalah kunci di dalam kamus, dan nilai yang sesuai adalah kamus lain yang berisi nama latihan dan daftar tag yang terkait dengan latihan tersebut. Contohnya:

days_of_week = {
    "Monday": {"name": "DAY 1", "tag": ["chest", "triceps"]},
    "Tuesday": {"name": "DAY 2", "tag": ["back", "biceps"]},
    "Wednesday": {"name": "DAY 3", "tag": ["lower body", "shoulder"]},
    "Thursday": {"name": "DAY 1", "tag": ["chest", "triceps"]},
    "Friday": {"name": "DAY 2", "tag": ["back", "biceps"]},
    "Saturday": {"name": "DAY 3", "tag": ["lower body", "shoulder"]},
}

Dalam contoh ini, jadwal dibagi menjadi tiga hari, dan setiap hari memiliki latihan tertentu dan tag yang terkait dengannya.

Variabel start_days_ago dan end_days_after digunakan untuk menentukan rentang tanggal untuk jadwal latihan. start_days_ago menentukan berapa banyak hari sebelum tanggal hari ini untuk memulai jadwal, dan end_days_after menentukan berapa banyak hari setelah tanggal hari ini untuk mengakhiri jadwal.

Potongan kode menggunakan modul datetime untuk mendapatkan tanggal hari ini dan menghitung tanggal mulai dan akhir untuk jadwal latihan. Tanggal mulai diperoleh dengan mengurangi start_days_ago dari tanggal hari ini, dan tanggal akhir diperoleh dengan menambahkan end_days_after ke tanggal hari ini. Tanggal diformat sebagai string dalam format %Y-%m-%d.

IV. Memperoleh Acara yang Sudah Ada

Sebelum membuat acara latihan baru, potongan kode mengambil acara yang sudah ada dalam rentang tanggal yang telah ditentukan. Ini dilakukan untuk menghindari membuat acara duplikat pada tanggal yang sama.

Metode notion.databases.query() digunakan untuk melakukan kueri ke database Notion dan mengambil acara yang sudah ada. Parameter filter digunakan untuk menentukan kondisi filter untuk kueri. Dalam hal ini, filter diatur untuk mengambil acara yang berada dalam rentang tanggal mulai dan akhir yang telah ditentukan dalam potongan kode. Berikut contoh filter yang digunakan dalam kueri:

{
    "and": [
        {"property": "Date", "date": {"on_or_after": start_date}},
        {"property": "Date", "date": {"on_or_before": end_date}}
    ]
}

Filter ini mengembalikan acara yang memiliki properti Date yang berada antara start_date dan end_date.

Atribut results dari respons kueri digunakan untuk memperoleh acara yang sudah ada dalam rentang tanggal. Hasilnya disimpan dalam variabel existing_events untuk digunakan nanti dalam potongan kode.

existing_events = notion.databases.query(
    **{
        "database_id": database_id,
        "filter": {
            "and": [
                {"property": "Date", "date": {"on_or_after": start_date}},
                {"property": "Date", "date": {"on_or_before": end_date}}
            ]
        },
    }
).get("results")

V. Membuat Acara Baru

Setelah acara yang sudah ada dalam rentang tanggal diperoleh, potongan kode kemudian membuat acara latihan baru untuk setiap hari dalam rentang tanggal jadwal.

Potongan kode menggunakan for loop untuk mengulang setiap tanggal dalam rentang tanggal. Acara baru dibuat untuk setiap hari yang bukan hari Minggu:

for date in (datetime.now() + timedelta(days=n) for n in range(-start_days_ago, end_days_after + 1)):
    # skip Sundays
    if date.strftime("%A") == "Sunday":
        continue

Metode strftime() digunakan untuk memperoleh nama hari dalam seminggu dari tanggal, dan jika nama hari adalah “Minggu”, loop akan melewati hari itu dan melanjutkan ke hari berikutnya.

Potongan kode kemudian memeriksa apakah acara sudah ada pada tanggal tersebut:

if any(event.get("properties").get("Date").get("date").get("start") == date.strftime("%Y-%m-%d") for event in existing_events):
    print(f"Event already exists for {date.strftime('%Y-%m-%d')}. Skipping.")
    continue

Jika acara sudah ada pada tanggal tersebut, loop akan melewati hari itu dan melanjutkan ke hari berikutnya.

Jika tidak ada acara pada tanggal tersebut, acara baru akan dibuat dengan nama latihan dan tag yang terkait dengan hari itu dalam seminggu:

day_of_week = date.strftime("%A")
event_name = days_of_week[day_of_week]["name"]
event_tag = days_of_week[day_of_week]["tag"]
new_event = {
    "Name": {"title": [{"text": {"content": event_name}}]},
    "Date": {"date": {"start": date.strftime("%Y-%m-%d")}},
    "Tag": {"multi_select": [{"name": tag} for tag in event_tag]},
}
notion.pages.create(parent={"database_id": database_id}, properties=new_event)

Nama latihan dan tag yang terkait dengan hari itu dalam seminggu diperoleh dari kamus days_of_week. Kamus new_event digunakan untuk menentukan properti acara baru, yang mencakup nama acara, tanggal, dan tag. Metode notion.pages.create() digunakan untuk membuat acara baru di database Notion.

Dengan membuat acara baru untuk setiap hari dalam seminggu dalam rentang tanggal jadwal, pengembang dapat mengotomatisasi proses penjadwalan latihan dan memastikan bahwa rencana latihan selalu terbaru dan akurat.

VI. Kesimpulan

Dalam proyek ini, kami telah menunjukkan bagaimana menggunakan Notion API untuk mengotomatisasi proses membuat jadwal latihan dalam database Notion. Potongan kode yang kami berikan dapat digunakan untuk membuat jadwal latihan untuk rentang tanggal tertentu dan secara otomatis menambahkan acara baru ke database berdasarkan rencana latihan yang telah ditentukan.

Notion API dapat digunakan untuk mengotomatisasi berbagai tugas, seperti mengelola daftar tugas, melacak pengeluaran, atau mengorganisir tugas proyek. Dengan Notion API, pengembang dapat membangun integrasi khusus dan mengotomatisasi tugas yang berulang, menghemat waktu dan meningkatkan produktivitas.

Secara keseluruhan, Notion API menyediakan alat yang kuat bagi pengembang untuk mengintegrasikan Notion ke dalam alur kerja mereka dan mengotomatisasi tugas mereka. Seiring Notion terus tumbuh dalam popularitas, kita dapat mengharapkan untuk melihat lebih banyak pengembang membangun integrasi dan mengotomatisasi tugas dengan Notion API.

Di masa depan, kami berencana untuk mengembangkan proyek ini dengan menambahkan fitur dan integrasi dengan alat lain. Kami juga berencana untuk menjelajahi kasus penggunaan lain untuk Notion API dan melihat bagaimana dapat digunakan untuk mengotomatisasi tugas lain dalam alur kerja kami.


Source code : https://github.com/hobbyworker/notion-workout-scheduler