<p align="center">
<img src="https://i.imgur.com/ToHPLjD.png" height="110px" width="auto"/>
<br/>
<h3 align="center">fb2cal</h3>
<p align="center">Facebook Birthday Events to ICS file converter</p>
<h2></h2>
</p>
<br />
<p align="center">
<a href="../../releases"><img src="https://img.shields.io/github/release/mobeigi/fb2cal.svg?style=flat-square" /></a>
<a href="../../actions"><img src="https://img.shields.io/github/actions/workflow/status/mobeigi/fb2cal/test-fb2cal.yml?style=flat-square" /></a>
<a href="../../issues"><img src="https://img.shields.io/github/issues/mobeigi/fb2cal.svg?style=flat-square" /></a>
<a href="../../pulls"><img src="https://img.shields.io/github/issues-pr/mobeigi/fb2cal.svg?style=flat-square" /></a>
<a href="LICENSE.md"><img src="https://img.shields.io/github/license/mobeigi/fb2cal.svg?style=flat-square" /></a>
</p>
## Description
Around 20 June 2019, Facebook removed their Facebook Birthday ICS export option.
This change was unannounced and no reason was ever released.
fb2cal is a tool which restores this functionality.
It works by calling endpoints that power the https://www.facebook.com/events/birthdays/ page.
After 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).
## Caveats
* Facebook accounts secured with 2FA are currently not supported (see [#9](../../issues/9))
* During Facebook authentication, a security checkpoint may trigger that will force you to change your Facebook password.
## Requirements
* Facebook account
* Python 3.9+
* pipenv
* Scheduler tool to automatically run script periodically (optional)
## PyPi Project
https://pypi.org/project/fb2cal/
## Instructions
### PyPi (Recommended)
1. In an empty folder of your choice, set up pipenv environment
`pipenv install`
2. Install `fb2cal` module:
`pipenv run pip install fb2cal`
3. Download [config/config-template.ini](https://raw.githubusercontent.com/mobeigi/fb2cal/master/config/config-template.ini) file and store it in `config/config.ini`.
4. Update the `config/config.ini` file and enter your Facebook email and password (no quotes).
5. Run the `fb2cal` module
`pipenv run python -m fb2cal`
6. Check the output folder (`out` by default) for the created `birthdays.ics` file
### Local
1. Clone repo
`git clone git@github.com:mobeigi/fb2cal.git`
2. Copy `config/config-template.ini` to `config/config.ini`.
3. Update the `config/config.ini` file and enter your Facebook email and password (no quotes).
4. Set up pipenv environment
`pipenv install`
5. Run the `fb2cal` module
`pipenv run python -m fb2cal`
6. Check the output folder (`out` by default) for the created `birthdays.ics` file
## Configuration
This tool can be configured by editing the `config/config.ini` configuration file.
<table> <thead> <tr> <th>Section</th> <th>Key</th> <th>Valid Values</th> <th>Description</th> </tr></thead> <tbody> <tr> <td rowspan=2>AUTH</td><td>fb_email</td><td></td><td>Your Facebook login email</td></tr><tr> <td>fb_password</td><td></td><td>Your Facebook login password</td></tr><tr> <td rowspan=2>FILESYSTEM</td><td>save_to_file</td><td>True, False</td><td>If tool should save ICS file to the local file system</td></tr><tr> <td>ics_file_path</td><td></td><td>Path to save ICS file to (including file name)</td></tr><tr> <td>LOGGING</td><td>level</td><td>DEBUG, INFO, WARNING, ERROR, CRITICAL</td><td>Logging level to use. Default: INFO</td></tr></tbody></table>
## Scheduled Task Frequency
It 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.
## Testing
1. Set up pipenv environment
`pipenv install`
2. Install the `fb2cal` module
`pipenv run python -m pip install .`
3. Run the `unittests` module on the `tests` folder
`pipenv run python -m unittest discover tests`
## Troubleshooting
If 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.
## Contributions
Contributions are always welcome!
Just make a [pull request](../../pulls).
## Licence
GNU General Public License v3.0
Raw data
{
"_id": null,
"home_page": "https://git.io/fjMwr",
"name": "fb2cal",
"maintainer": null,
"docs_url": null,
"requires_python": ">3.9",
"maintainer_email": null,
"keywords": "facebook, birthday, calendar, export, ics",
"author": "Mo Beigi",
"author_email": "me@mobeigi.com",
"download_url": "https://files.pythonhosted.org/packages/91/61/e3245f801d9f6f3cfba3f36b697a561f46bb597890fb0c74ea838da4df31/fb2cal-1.3.1.tar.gz",
"platform": null,
"description": "<p align=\"center\">\r\n<img src=\"https://i.imgur.com/ToHPLjD.png\" height=\"110px\" width=\"auto\"/>\r\n<br/>\r\n<h3 align=\"center\">fb2cal</h3>\r\n<p align=\"center\">Facebook Birthday Events to ICS file converter</p>\r\n<h2></h2>\r\n</p>\r\n<br />\r\n\r\n<p align=\"center\">\r\n<a href=\"../../releases\"><img src=\"https://img.shields.io/github/release/mobeigi/fb2cal.svg?style=flat-square\" /></a>\r\n<a href=\"../../actions\"><img src=\"https://img.shields.io/github/actions/workflow/status/mobeigi/fb2cal/test-fb2cal.yml?style=flat-square\" /></a>\r\n<a href=\"../../issues\"><img src=\"https://img.shields.io/github/issues/mobeigi/fb2cal.svg?style=flat-square\" /></a>\r\n<a href=\"../../pulls\"><img src=\"https://img.shields.io/github/issues-pr/mobeigi/fb2cal.svg?style=flat-square\" /></a> \r\n<a href=\"LICENSE.md\"><img src=\"https://img.shields.io/github/license/mobeigi/fb2cal.svg?style=flat-square\" /></a>\r\n</p>\r\n\r\n## Description\r\nAround 20 June 2019, Facebook removed their Facebook Birthday ICS export option. \r\nThis change was unannounced and no reason was ever released. \r\n\r\nfb2cal is a tool which restores this functionality. \r\nIt works by calling endpoints that power the https://www.facebook.com/events/birthdays/ page. \r\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).\r\n\r\n## Caveats\r\n* Facebook accounts secured with 2FA are currently not supported (see [#9](../../issues/9))\r\n* During Facebook authentication, a security checkpoint may trigger that will force you to change your Facebook password.\r\n\r\n## Requirements\r\n* Facebook account\r\n* Python 3.9+\r\n* pipenv\r\n* Scheduler tool to automatically run script periodically (optional)\r\n\r\n## PyPi Project\r\nhttps://pypi.org/project/fb2cal/\r\n\r\n## Instructions\r\n\r\n### PyPi (Recommended)\r\n1. In an empty folder of your choice, set up pipenv environment \r\n`pipenv install`\r\n2. Install `fb2cal` module: \r\n`pipenv run pip install fb2cal`\r\n3. Download [config/config-template.ini](https://raw.githubusercontent.com/mobeigi/fb2cal/master/config/config-template.ini) file and store it in `config/config.ini`.\r\n4. Update the `config/config.ini` file and enter your Facebook email and password (no quotes).\r\n5. Run the `fb2cal` module \r\n`pipenv run python -m fb2cal`\r\n6. Check the output folder (`out` by default) for the created `birthdays.ics` file\r\n\r\n### Local\r\n1. Clone repo \r\n`git clone git@github.com:mobeigi/fb2cal.git`\r\n2. Copy `config/config-template.ini` to `config/config.ini`.\r\n3. Update the `config/config.ini` file and enter your Facebook email and password (no quotes).\r\n4. Set up pipenv environment \r\n`pipenv install`\r\n5. Run the `fb2cal` module \r\n`pipenv run python -m fb2cal`\r\n6. Check the output folder (`out` by default) for the created `birthdays.ics` file\r\n\r\n## Configuration\r\nThis tool can be configured by editing the `config/config.ini` configuration file.\r\n\r\n<table> <thead> <tr> <th>Section</th> <th>Key</th> <th>Valid Values</th> <th>Description</th> </tr></thead> <tbody> <tr> <td rowspan=2>AUTH</td><td>fb_email</td><td></td><td>Your Facebook login email</td></tr><tr> <td>fb_password</td><td></td><td>Your Facebook login password</td></tr><tr> <td rowspan=2>FILESYSTEM</td><td>save_to_file</td><td>True, False</td><td>If tool should save ICS file to the local file system</td></tr><tr> <td>ics_file_path</td><td></td><td>Path to save ICS file to (including file name)</td></tr><tr> <td>LOGGING</td><td>level</td><td>DEBUG, INFO, WARNING, ERROR, CRITICAL</td><td>Logging level to use. Default: INFO</td></tr></tbody></table>\r\n\r\n## Scheduled Task Frequency\r\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.\r\n\r\n## Testing\r\n1. Set up pipenv environment \r\n`pipenv install`\r\n2. Install the `fb2cal` module \r\n`pipenv run python -m pip install .`\r\n3. Run the `unittests` module on the `tests` folder \r\n`pipenv run python -m unittest discover tests`\r\n\r\n## Troubleshooting\r\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.\r\n\r\n## Contributions\r\nContributions are always welcome!\r\nJust make a [pull request](../../pulls).\r\n\r\n## Licence\r\nGNU General Public License v3.0\r\n",
"bugtrack_url": null,
"license": "GPLv3",
"summary": "Facebook Birthday Events to ICS file converter",
"version": "1.3.1",
"project_urls": {
"Download": "https://github.com/mobeigi/fb2cal/archive/v1.3.1.tar.gz",
"Homepage": "https://git.io/fjMwr"
},
"split_keywords": [
"facebook",
" birthday",
" calendar",
" export",
" ics"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "c7a1467260554d6cd3c7ff8ad790ae1f326ce56d7ca17ec104e8904bbce0b48a",
"md5": "334ee25d618b70ae460f087f699ad767",
"sha256": "f7508bc19388135215953eb7f43689a8c6c573f02e75b7816661dcdf257a95bd"
},
"downloads": -1,
"filename": "fb2cal-1.3.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "334ee25d618b70ae460f087f699ad767",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">3.9",
"size": 25702,
"upload_time": "2024-08-21T16:17:56",
"upload_time_iso_8601": "2024-08-21T16:17:56.906933Z",
"url": "https://files.pythonhosted.org/packages/c7/a1/467260554d6cd3c7ff8ad790ae1f326ce56d7ca17ec104e8904bbce0b48a/fb2cal-1.3.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9161e3245f801d9f6f3cfba3f36b697a561f46bb597890fb0c74ea838da4df31",
"md5": "87f1413b4d5fd92ca204631403226c39",
"sha256": "3c0a27fff47361120ea02834af693e76a9641c04b94fb5714ebac249039df2b8"
},
"downloads": -1,
"filename": "fb2cal-1.3.1.tar.gz",
"has_sig": false,
"md5_digest": "87f1413b4d5fd92ca204631403226c39",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">3.9",
"size": 27030,
"upload_time": "2024-08-21T16:17:58",
"upload_time_iso_8601": "2024-08-21T16:17:58.237221Z",
"url": "https://files.pythonhosted.org/packages/91/61/e3245f801d9f6f3cfba3f36b697a561f46bb597890fb0c74ea838da4df31/fb2cal-1.3.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-08-21 16:17:58",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "mobeigi",
"github_project": "fb2cal",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "fb2cal"
}