برنامه نویسی

هزینه های خود را با Splitwired پیگیری کنید

برای خواندن مقاله به زبان های دیگر به آن در وب سایت من بروید: هزینه های خود را با Splitwired پیگیری کنید


آیا از Splitwise استفاده می کنید؟ نظارت بر هزینه‌ها و باز کردن Premium رایگان با APIهای Splitwise!


حدود یک سال پیش، شروع به دنبال کردن برخی وبلاگ‌ها کردم که در مورد امور مالی شخصی صحبت می‌کردند. من بلافاصله به موضوع علاقه مند شدم و پس از خواندن مطالب زیاد، احساس کردم باید آنچه را که از تمام آن مقاله ها آموخته بودم، در عمل به کار ببرم. اولین مانع این بود که نه اطلاعاتی در مورد هزینه هایم داشتم، نه برگه اکسل، نه پایگاه داده… یا شاید هم داشتم. در واقع، بله، زیرا عملا من و همسرم از این برنامه فوق العاده به نام استفاده کرده ایم تقسیم به سمت به صورت روزانه. زندگی ما را بسیار ساده می کند.

بسیار خوب، من داده ها را دارم، اما (موانع دوم) نمی توانم آن را به صورت پویا بخوانم. تنها چیزی که Splitwise با یک حساب رایگان به من ارائه می دهد، توانایی دانلود یک فایل CSV است که شامل تمام هزینه های یک گروه است. ایجاد نمودار، اعمال فرمول و غیره برای من کافی نیست.

بلافاصله به فکر استفاده از API های Splitwise افتادم که به صورت رایگان در دسترس هستند: https://dev.splitwise.com/ ❤️ … و به همین ترتیب Splitwired پروژه آغاز شد

Backend

در صفحه رسمی Splitwise API، لیستی از SDKهای ایجاد شده توسط انجمن وجود دارد. در حالی که استفاده از این کیت ها اجباری نیست زیرا Splitwise همه چیز لازم را فراهم می کند، من استفاده از کتابخانه @namaggarwa را انتخاب کردم. SDK به زبان پایتون نوشته شده است، مستندات خوبی دارد، به طور مداوم به روز می شود، و بنابراین، من آن را بهترین در لیست می دانم.

این پروژه با Flask ساخته شد و با Gunicorn در Render ارائه شد. قسمت Backend به طور کامل در داخل قرار دارد /app پوشه

این auth.py فایل برای ایجاد سیستم احراز هویت کاربر در Flask با استفاده از Flask-Login استفاده می شود. یک نمونه از LoginManager مقداردهی اولیه شده و به برنامه Flask اضافه می شود. این Authentication کلاس تعریف شده است که شامل دیکشنری از کاربران تأیید شده و دو روش کلاس برای تأیید حضور کاربر و مطابقت با نام کاربری و رمز عبور است. تابع user_loader داده های کاربر احراز هویت شده را بارگیری می کند، در حالی که تابع غیرمجاز کنترل می کند. unauthorized کاربران را با هدایت آنها به صفحه ورود به سیستم.

این config.py فایل حاوی Config کلاس برای مقداردهی اولیه چهار ویژگی استفاده می شود: api_key، environment، consumer_key، و consumer_secret. این ویژگی ها برای احراز هویت نمونه Splitwise مورد نیاز هستند.

این data.py فایل روش های اساسی برای دسترسی به داده های هزینه مشترک با استفاده از splitwise کتابخانه پس از ایجاد یک نمونه از Splitwise با استفاده از مقادیر فوق config ویژگی ها، دو تابع برای بازیابی داده ها وجود دارد: data_groups تابع برای دریافت داده های گروه هایی که کاربر به آنها تعلق دارد و data_expenses تابعی برای برگرداندن داده های هزینه مشترک.

این utils.py فایل حاوی توابع مربوط به دستکاری داده ها و ایجاد نهایی لیست هزینه است. این generate_expense روش در خدمت این هدف است. بر اساس یک سری از پارامترها، یک جدول هزینه، نمودارها و یک فایل CSV با داده های هزینه تولید می کند.

پارامترهای تابع عبارتند از:

  • csv: یک مقدار بولی که نشان می دهد فایل CSV تولید شود یا نه.

  • expenses: لیستی از اشیاء “هزینه” به دست آمده از getExpenses عملکرد Splitwise

  • filename: رشته ای که نام فایل CSV را برای ایجاد if نشان می دهد csv درست است.

  • category: یک مقدار صحیح نشان‌دهنده شناسه دسته برای فیلتر کردن هزینه‌ها برای گنجاندن در جدول (فقط برای جدول فایل CSV اعمال می‌شود، زیرا در برنامه، ترجیح می‌دهم فیلتر کردن دسته را در سمت مشتری انجام دهم).

  • personal: یک مقدار بولی که نشان می‌دهد جدول و نمودار فقط برای هزینه‌های شخصی تولید شود (یعنی تمام هزینه‌ها از همه گروه‌هایی که کاربر انتخابی در آن شرکت دارد).

  • chart: رشته یا لیستی که نشان دهنده انواع نمودارهایی است که باید تولید شوند.

توجه به این نکته مهم است که هزینه محاسباتی برای اجرای تابع با personal پارامتر فعال شده بسیار بالا خواهد بود. این به این دلیل است که این پارامتر با بررسی تمام گروه هایی که شناسه کاربری مشخص شده در آن وجود دارد، فرآیند ایجاد جدول هزینه را آغاز می کند، بنابراین تمام هزینه هایی را که آن کاربر در آن مشارکت داشته است به دست می آورد.

یکی از ویژگی هایی که اخیراً اضافه شده است، تبدیل ارز است. من اغلب به ایالات متحده می روم و زمانی که آنجا هستم، ترجیح می دهم به جای یورو، دلار را پرداخت کنم تا از پرداخت هزینه مبادله ارز جلوگیری کنم. بنابراین، من را اضافه کردم costs_conversions عملکردی که به من امکان می دهد هزینه های خود را به یورو که ساخته و به Splitwise به دلار اضافه کرده ام تبدیل و ثبت کنم. این تبدیل با پاک کردن پورتال Yahoo Finance با استفاده از کتابخانه yfinance انجام می‌شود که مقادیر ارز را در یک لحظه تاریخی خاص ارائه می‌کند. با ارائه تاریخ هزینه می توانم به نتیجه دلخواه برسم. امکان تبدیل هر ارز به یورو وجود دارد. اگر می خواهید هزینه ای را به ارزی غیر از یورو تبدیل کنید، فقط باید آن را تغییر دهید ticker متغیر در set_currency_conversion تابع.

import yfinance as yf

def set_currency_conversion(
    amount: float,
    curr_from: str,
    conv_date: date,
):
    ticker = f"{curr_from}EUR=X"
    currency_data = yf.Ticker(ticker).history(
        period="1d", start=conv_date, end=conv_date + timedelta(days=1)
    )
    if currency_data.empty or currency_data["Close"].size == 0:
        return set_currency_conversion(
            amount, curr_from, conv_date=conv_date - timedelta(days=1)
        )
    exchange_rate = currency_data["Close"][-1]
    return str(exchange_rate * amount)```
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خوب، در پایان، generate_expense تابع یک فرهنگ لغت را با سه کلید برمی گرداند: جدول برای میز، داده ها برای داده ها، و چارت سازمانی برای نمودار (اگر chart مشخص شده است). اگر csv روی True تنظیم شده است generate_csv تابع اجرا می شود و یک فایل CSV حاوی داده های هزینه تولید می کند. فایل را می توان از قسمت دانلود در بالای صفحه دانلود کرد.

Frontend

از منظر ظاهری، چیز زیادی برای گفتن وجود ندارد، فقط چند یادداشت.

من با پیکربندی Webpack و راه اندازی React شروع کردم. سپس، TanStack Table را برای مدیریت جدول و Plotly را برای ایجاد نمودار نصب کردم.

در نهایت، من یک سرویس کار و یک فایل manifest.json را برای فعال کردن نصب برنامه پیشرو وب (PWA) در تلفن هوشمند اضافه کردم.

نتیجه

Splitwise واقعاً یک برنامه ارزشمند است. طی چند سال گذشته، با انجام تمام محاسبات بدهی ها و اعتبارات برای من، زندگی من را آسان کرده است. اکنون، با این “افزونه” کوچک جدیدی که ایجاد کردم، به کنترل بسیار جامع تری بر امور مالی خود دست یافته ام.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا