{"id":13605859,"url":"https://github.com/mobeigi/fb2cal","last_synced_at":"2025-05-16T19:04:21.616Z","repository":{"id":35527435,"uuid":"195992667","full_name":"mobeigi/fb2cal","owner":"mobeigi","description":"Fetch Facebook Birthdays events and create an ICS file for use with calendar apps","archived":false,"fork":false,"pushed_at":"2024-08-21T16:43:53.000Z","size":243,"stargazers_count":429,"open_issues_count":4,"forks_count":70,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-05-13T06:11:16.309Z","etag":null,"topics":["birthday","birthday-reminder","birthdays","calendar","events","export","facebook","facebook-graph-api","google-calendar","google-drive","ics","python"],"latest_commit_sha":null,"homepage":"https://go.mobeigi.com/fb2cal","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mobeigi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-09T11:09:59.000Z","updated_at":"2025-05-09T17:40:52.000Z","dependencies_parsed_at":"2024-01-19T10:12:26.053Z","dependency_job_id":"79162c0a-98e7-4aa7-8b13-93ba383dc1d8","html_url":"https://github.com/mobeigi/fb2cal","commit_stats":{"total_commits":124,"total_committers":11,"mean_commits":"11.272727272727273","dds":"0.10483870967741937","last_synced_commit":"388bd564a1e40c497f0a9ada21ca49f14a541b1e"},"previous_names":["mobeigi/fb2ics"],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mobeigi%2Ffb2cal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mobeigi%2Ffb2cal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mobeigi%2Ffb2cal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mobeigi%2Ffb2cal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mobeigi","download_url":"https://codeload.github.com/mobeigi/fb2cal/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254592368,"owners_count":22097011,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["birthday","birthday-reminder","birthdays","calendar","events","export","facebook","facebook-graph-api","google-calendar","google-drive","ics","python"],"created_at":"2024-08-01T19:01:03.633Z","updated_at":"2025-05-16T19:04:21.585Z","avatar_url":"https://github.com/mobeigi.png","language":"Python","readme":"\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://i.imgur.com/ToHPLjD.png\" height=\"110px\" width=\"auto\"/\u003e\n\u003cbr/\u003e\n\u003ch3 align=\"center\"\u003efb2cal\u003c/h3\u003e\n\u003cp align=\"center\"\u003eFacebook Birthday Events to ICS file converter\u003c/p\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003c/p\u003e\n\u003cbr /\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"../../releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release/mobeigi/fb2cal.svg?style=flat-square\" /\u003e\u003c/a\u003e\n\u003ca href=\"../../actions\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/mobeigi/fb2cal/test-fb2cal.yml?style=flat-square\" /\u003e\u003c/a\u003e\n\u003ca href=\"../../issues\"\u003e\u003cimg src=\"https://img.shields.io/github/issues/mobeigi/fb2cal.svg?style=flat-square\" /\u003e\u003c/a\u003e\n\u003ca href=\"../../pulls\"\u003e\u003cimg src=\"https://img.shields.io/github/issues-pr/mobeigi/fb2cal.svg?style=flat-square\" /\u003e\u003c/a\u003e \n\u003ca href=\"LICENSE.md\"\u003e\u003cimg src=\"https://img.shields.io/github/license/mobeigi/fb2cal.svg?style=flat-square\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## Description\nAround 20 June 2019, Facebook removed their Facebook Birthday ICS export option.  \nThis change was unannounced and no reason was ever released.  \n\nfb2cal is a tool which restores this functionality.  \nIt works by calling endpoints that power the https://www.facebook.com/events/birthdays/ page.  \nAfter gathering a list of birthdays for all the users friends for a full year, it creates a ICS calendar file. This ICS file can then be imported into third party tools (such as Google Calendar or Apple Calendar).\n\n## Caveats\n* Facebook accounts secured with 2FA are currently not supported (see [#9](../../issues/9))\n* During Facebook authentication, a security checkpoint may trigger that will force you to change your Facebook password.\n\n## Requirements\n* Facebook account\n* Python 3.9+\n* pipenv\n* Scheduler tool to automatically run script periodically (optional)\n\n## PyPi Project\nhttps://pypi.org/project/fb2cal/\n\n## Instructions\n\n### PyPi (Recommended)\n1. In an empty folder of your choice, set up pipenv environment  \n`pipenv install`\n2. Install `fb2cal` module:  \n`pipenv run pip install fb2cal`\n3. Download [config/config-template.ini](https://raw.githubusercontent.com/mobeigi/fb2cal/main/config/config-template.ini) file and store it in `config/config.ini`.\n4. Update the `config/config.ini` file and enter your Facebook email and password (no quotes).\n5. Run the `fb2cal` module  \n`pipenv run python -m fb2cal`\n6. Check the output folder (`out` by default) for the created `birthdays.ics` file\n\n### Local\n1. Clone repo  \n`git clone git@github.com:mobeigi/fb2cal.git`\n2. Copy `config/config-template.ini` to `config/config.ini`.\n3. Update the `config/config.ini` file and enter your Facebook email and password (no quotes).\n4. Set up pipenv environment  \n`pipenv install`\n5. Run the `fb2cal` module  \n`pipenv run python -m fb2cal`\n6. Check the output folder (`out` by default) for the created `birthdays.ics` file\n\n## Configuration\nThis tool can be configured by editing the `config/config.ini` configuration file.\n\n\u003ctable\u003e \u003cthead\u003e \u003ctr\u003e \u003cth\u003eSection\u003c/th\u003e \u003cth\u003eKey\u003c/th\u003e \u003cth\u003eValid Values\u003c/th\u003e \u003cth\u003eDescription\u003c/th\u003e \u003c/tr\u003e\u003c/thead\u003e \u003ctbody\u003e \u003ctr\u003e \u003ctd rowspan=2\u003eAUTH\u003c/td\u003e\u003ctd\u003efb_email\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd\u003eYour Facebook login email\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e \u003ctd\u003efb_password\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd\u003eYour Facebook login password\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e \u003ctd rowspan=2\u003eFILESYSTEM\u003c/td\u003e\u003ctd\u003esave_to_file\u003c/td\u003e\u003ctd\u003eTrue, False\u003c/td\u003e\u003ctd\u003eIf tool should save ICS file to the local file system\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e \u003ctd\u003eics_file_path\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003ctd\u003ePath to save ICS file to (including file name)\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e \u003ctd\u003eLOGGING\u003c/td\u003e\u003ctd\u003elevel\u003c/td\u003e\u003ctd\u003eDEBUG, INFO, WARNING, ERROR, CRITICAL\u003c/td\u003e\u003ctd\u003eLogging level to use. Default: INFO\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\n\n## Scheduled Task Frequency\nIt is recommended to run the script **once every 24 hours** to update the ICS file to ensure it is synchronized with the latest Facebook changes (due to friend addition/removal) and to respect the privacy of users who decide to hide their birthday later on. Facebook originally recommended polling for birthday updates **once every 12 hours** based on the `X-PUBLISHED-TTL:PT12H` header included in their ICS files.\n\n## Testing\n1. Set up pipenv environment  \n`pipenv install`\n2. Install the `fb2cal` module  \n`pipenv run python -m pip install .`\n3. Run the `unittests` module on the `tests` folder  \n`pipenv run python -m unittest discover tests`\n\n## Troubleshooting\nIf you encounter any issues, please open the `config/config.ini` configuration file and set the `LOGGING` `level` to `DEBUG` (it is `INFO` by default). Include these logs when asking for help.\n\n## Contributions\nContributions are always welcome!\nJust make a [pull request](../../pulls).\n\n## Licence\nGNU General Public License v3.0\n","funding_links":[],"categories":["Python"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmobeigi%2Ffb2cal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmobeigi%2Ffb2cal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmobeigi%2Ffb2cal/lists"}