Python-скрипт для импорта банковских расходов в Splitwise

Kate

Administrator
Команда форума
Если для вас важен вопрос ведения личного или семейного бюджета, или если вы часто ездите в совместные поездки с друзьями, то вы либо уже слышали про Splitwise, либо вам может быть полезно про него услышать. Splitwise - это довольно удобный сайт + приложения для iOS и Андроид, которые позволяют вести учёт совместных расходов. Имеется также полезная функция минимизации количества взаиморасчётов (пример: если все должны Саше по 100 рублей, Петя должен саше еще +20 рублей, а Вася должен Пете 80 рублей, то в итоге Вася отдаст сразу 200 рублей Саше, и все рады). Впервые я пользовался Splitwise пару лет назад в поездке с друзьями в Италию, и с тех пор мы довольно часто используем его для разных целей - покупки подарков, совместных поездок на пикники, и т.д.

Пользоваться Splitwise довольно просто - создаёте группу, приглашаете в неё друзей, каждый добавляет туда сколько потратил, и в какой пропорции эти траты нужно разделить (по дефолту - поровну). Вы можете вести расчёт всех ваших взаимных расходов в одной группе, а можете создавать отдельную группу для каждой поездки/подарка/ и тд.

ebeb7974f728ed5b15ba127f5de723e2.png

Если вы, допустим, хотите вести в Splitwise семейный бюджет - записывать туда общие расходы на аренду, покупки, ЖКХ, веб версия также показывает диаграмму ваших затрат по категориям (правда эти категории для каждого платежа еще нужно назначить). В приложении эта функция платная, однако в веб версии, которую я чаще всего использую, диаграммы можно смотреть и без подписки. В общем, основной юскейс для меня - это именно ведение бюджета, поэтому когда мне очередной раз в напоминают, что пора бы заполнить сплитвайз, обычно я, тяжело вздыхая, открывал приложение своего банка, и начинал методично ручками перебивать туда все траты. Если вам важна история платежей и вы хотите смотреть на диаграммки, то кроме суммы и разбивки вам придётся заполнить: дату, выбрать из меню категорию платежа, написать более-менее понятное название, по которому можно будет адекватно идентифицировать платёж.

Так выглядит форма ввода в веб-версии.
Так выглядит форма ввода в веб-версии.
В общем, в определенный момент, когда я откладывал это дело целый месяц, я понял, что вносить пару десятков платежей ручками для меня просто неприемлемо, так что я решил наговнокодить что-нибудь для этого дела на питончике. Так за пару выходных появился мой монстр Франкенштейна под названием splitwise_importer (ссылка на гитхаб).

splitwise_importer​

Splitwise_importer - программа с TUI интерфейсом (форк библиотеки npyscreen, про неё могли слышать те, кто ковырял Telegram TUI), написанa на Python, работает из консоли, и использует Python-API сплитвайза (на самом деле форк, потому что мэйнтейнер не мерджит полезный PR). Программа максимально костыльно-доморощенная, так что user experience может быть сильно на любителя, впрочем, главная задача спасения от монотонных действий - выполнена. Протестировано на MacOS и Ubuntu 20.04 WSL с Python 3.7.1+.

Чтобы начать использовать splitwise_importer нужно:

  • зарегистрироваться в Splitwise, получить ключи для приложения и вставить их в конфиг
  • скачать выгрузку операций из интернет банка в формате CSV.
  • в конфиге заполнить секцию с расположениями полей в CSV (колонка суммы, колонка даты, и т.д.). В дефолтном конфиге у меня заполнены колонки для Тинькофф-банка, так что можете сразу пользоваться.
  • (опционально) во втором конфиге прописать соответствие категорий платежа из выгрузки вашего банка категориям сплитвайза (они все есть в файле). Если лень, то все траты будут вноситься по дефолту как General expenses.
Запускаем в консоли скрипт importer.py, открывается диалог выбора файла. По идее, если вызывать скрипт сразу из нужной директории, то выбор файла стартует в ней же, при этом ничего не ломается, так что можно прописать его в alias.

Окно выбора операций. Отображается тестовый CSV с повторяющейся одной и той же строчкой.
Окно выбора операций. Отображается тестовый CSV с повторяющейся одной и той же строчкой.
Появится основное окно выбора операций, стрелочками двигаем курсор, пробелом отмечаем операции к отправке. Жмём "ОК", в окошке 'log' наблюдаем результат отправки каждой операции (либо ОК, либо ошибка, которую вернул сервер Splitwise). Вот и всё. Надеюсь кому-то ещё софтинка пригодится. Подробная инструкция в репозитории.

Источник статьи: https://habr.com/ru/post/563896/
 

yinsushi

Active member
http://audiobookkeeper.ruhttp://cottagenet.ruhttp://eyesvision.ruhttp://eyesvisions.comhttp://factoringfee.ruhttp://filmzones.ruhttp://gadwall.ruhttp://gaffertape.ruhttp://gageboard.ruhttp://gagrule.ruhttp://gallduct.ruhttp://galvanometric.ruhttp://gangforeman.ruhttp://gangwayplatform.ruhttp://garbagechute.ruhttp://gardeningleave.ruhttp://gascautery.ruhttp://gashbucket.ruhttp://gasreturn.ruhttp://gatedsweep.ruhttp://gaugemodel.ruhttp://gaussianfilter.ruhttp://gearpitchdiameter.ruhttp://geartreating.ruhttp://generalizedanalysis.ru http://generalprovisions.ruhttp://geophysicalprobe.ruhttp://geriatricnurse.ruhttp://getintoaflap.ruhttp://getthebounce.ruhttp://habeascorpus.ruhttp://habituate.ruhttp://hackedbolt.ruhttp://hackworker.ruhttp://hadronicannihilation.ruhttp://haemagglutinin.ruhttp://hailsquall.ruhttp://hairysphere.ruhttp://halforderfringe.ruhttp://halfsiblings.ruhttp://hallofresidence.ruhttp://haltstate.ruhttp://handcoding.ruhttp://handportedhead.ruhttp://handradar.ruhttp://handsfreetelephone.ruhttp://hangonpart.ruhttp://haphazardwinding.ruhttp://hardalloyteeth.ruhttp://hardasiron.ru http://hardenedconcrete.ruhttp://harmonicinteraction.ruhttp://hartlaubgoose.ruhttp://hatchholddown.ruhttp://haveafinetime.ruhttp://hazardousatmosphere.ruhttp://headregulator.ruhttp://heartofgold.ruhttp://heatageingresistance.ruhttp://heatinggas.ruhttp://heavydutymetalcutting.ruhttp://jacketedwall.ruhttp://japanesecedar.ruhttp://jibtypecrane.ruhttp://jobabandonment.ruhttp://jobstress.ruhttp://jogformation.ruhttp://jointcapsule.ruhttp://jointsealingmaterial.ruhttp://journallubricator.ruhttp://juicecatcher.ruhttp://junctionofchannels.ruhttp://justiciablehomicide.ruhttp://juxtapositiontwin.ruhttp://kaposidisease.ru http://keepagoodoffing.ruhttp://keepsmthinhand.ruhttp://kentishglory.ruhttp://kerbweight.ruhttp://kerrrotation.ruhttp://keymanassurance.ruhttp://keyserum.ruhttp://kickplate.ruhttp://killthefattedcalf.ruhttp://kilowattsecond.ruhttp://kingweakfish.ruhttp://kinozones.ruhttp://kleinbottle.ruhttp://kneejoint.ruhttp://knifesethouse.ruhttp://knockonatom.ruhttp://knowledgestate.ruhttp://kondoferromagnet.ruhttp://labeledgraph.ruhttp://laborracket.ruhttp://labourearnings.ruhttp://labourleasing.ruhttp://laburnumtree.ruhttp://lacingcourse.ruhttp://lacrimalpoint.ru http://lactogenicfactor.ruhttp://lacunarycoefficient.ruhttp://ladletreatediron.ruhttp://laggingload.ruhttp://laissezaller.ruhttp://lambdatransition.ruhttp://laminatedmaterial.ruhttp://lammasshoot.ruhttp://lamphouse.ruhttp://lancecorporal.ruhttp://lancingdie.ruhttp://landingdoor.ruhttp://landmarksensor.ruhttp://landreform.ruhttp://landuseratio.ruhttp://languagelaboratory.ruhttp://largeheart.ruhttp://lasercalibration.ruhttp://laserlens.ruhttp://laserpulse.ruhttp://laterevent.ruhttp://latrinesergeant.ruhttp://layabout.ruhttp://leadcoating.ruhttp://leadingfirm.ru http://learningcurve.ruhttp://leaveword.ruhttp://machinesensible.ruhttp://magneticequator.ruhttp://magnetotelluricfield.ruhttp://mailinghouse.ruhttp://majorconcern.ruhttp://mammasdarling.ruhttp://managerialstaff.ruhttp://manipulatinghand.ruhttp://manualchoke.ruhttp://medinfobooks.ruhttp://mp3lists.ruhttp://nameresolution.ruhttp://naphtheneseries.ruhttp://narrowmouthed.ruhttp://nationalcensus.ruhttp://naturalfunctor.ruhttp://navelseed.ruhttp://neatplaster.ruhttp://necroticcaries.ruhttp://negativefibration.ruhttp://neighbouringrights.ruhttp://objectmodule.ruhttp://observationballoon.ru http://obstructivepatent.ruhttp://oceanmining.ruhttp://octupolephonon.ruhttp://offlinesystem.ruhttp://offsetholder.ruhttp://olibanumresinoid.ruhttp://onesticket.ruhttp://packedspheres.ruhttp://pagingterminal.ruhttp://palatinebones.ruhttp://palmberry.ruhttp://papercoating.ruhttp://paraconvexgroup.ruhttp://parasolmonoplane.ruhttp://parkingbrake.ruhttp://partfamily.ruhttp://partialmajorant.ruhttp://quadrupleworm.ruhttp://qualitybooster.ruhttp://quasimoney.ruhttp://quenchedspark.ruhttp://quodrecuperet.ruhttp://rabbetledge.ruhttp://radialchaser.ruhttp://radiationestimator.ru http://railwaybridge.ruhttp://randomcoloration.ruhttp://rapidgrowth.ruhttp://rattlesnakemaster.ruhttp://reachthroughregion.ruhttp://readingmagnifier.ruhttp://rearchain.ruhttp://recessioncone.ruhttp://recordedassignment.ruhttp://rectifiersubstation.ruhttp://redemptionvalue.ruhttp://reducingflange.ruhttp://referenceantigen.ruhttp://regeneratedprotein.ruhttp://reinvestmentplan.ruhttp://safedrilling.ruhttp://sagprofile.ruhttp://salestypelease.ruhttp://samplinginterval.ruhttp://satellitehydrology.ruhttp://scarcecommodity.ruhttp://scrapermat.ruhttp://screwingunit.ruhttp://seawaterpump.ruhttp://secondaryblock.ru http://secularclergy.ruhttp://seismicefficiency.ruhttp://selectivediffuser.ruhttp://semiasphalticflux.ruhttp://semifinishmachining.ruhttp://spicetrade.ruhttp://spysale.ruhttp://stungun.ruhttp://tacticaldiameter.ruhttp://tailstockcenter.ruhttp://tamecurve.ruhttp://tapecorrection.ruhttp://tappingchuck.ruhttp://taskreasoning.ruhttp://technicalgrade.ruhttp://telangiectaticlipoma.ruhttp://telescopicdamper.ruhttp://temperateclimate.ruhttp://temperedmeasure.ruhttp://tenementbuilding.rutuchkashttp://ultramaficrock.ruhttp://ultraviolettesting.ru
 
Сверху