Skip to main content

No project description provided

Project description

Facebook Event Aggregator

The coverage badge

A Facebook event scraper & aggregator, that fetches multiple pages' events and exports them to a static website and .ics file, automatically pushing it to Git(Hub Pages).

If you're looking for the original script-based version, check out the archive-before-rework branch

How-to guides

Prerequisites

Prerequisites: >= py3.10, pip, git

Installing prerequisites

  • If running on a distro supporting rpm/yum, use
    • yum install google-chrome (keep note of what version is installed)
    • cd /usr/local/bin/
    • npx @puppeteer/browsers install chromedriver@121 (ensure the @VERSION is the same major version as yum installed)
  • If running on a platform without an official Chromium distrubition (e.g. Raspberry Pi 3b, Linux32...): apt-get install chromium-chromedriver

Run locally

python3.10 -m pip install --upgrade facebook-event-aggregator

echo "Optionally, add the following line to crontab to automatically run every 24 hours (can be modified ofcourse): "
# echo "0 5 * * * python3 \"$(pwd)/app/main.py\" headless update"

See also crontab guru!

docker run -i facebook-event-aggregator --host-domain ...

Run tests

git clone https://github.com/Denperidge/facebook-event-aggregator.git
cd facebook-event-aggregator
make install-test
make test
Don't forget to configure Git on the device if that's not done already! ```bash git config --global user.email "you@example.com" git config --global user.name "Your Name" ```

Discussions

Contributing

Make sure to run the pipreqs command if any modules get added to a python file. (Note: pipreqs seems to have some issues with the match statement. If that's still the case, comment those lines out before running)

GitHub Actions & why this application shouldn't be run on it & why you probably don't want to use a logged in Facebook session

Besides the hosting through GitHub Pages, everything is done locally. If you look in the branches, you'll notice an old entirely GitHub Actions based version. However, doing it locally avoids the login sequence that Facebook asks when this is run from GitHub Actions (presumably due to rate limiting). The non-logged in Facebook interface is easier to scrape, presumably due to GraphQL (although that might be incorrect).

Reference

Maintaining/troubleshooting

This application is made to be as platform-agnostic as possible. However, the weak link is in the Facebook scraping. The parse_* functions in src/facebook_event_aggregator/scraper/ are most likely to need changes down the line. So if the application doesn't find any events, look there first.

Structure (out of date)

  • app/ - All code (Python and otherwise) here
    • export/ - Everything concerning turning the Event objects into viewable data
      • templates/ - Jinja templates used to render the static website
      • to_html.py - Code that implements the above Jinja templates to create public/index.html
      • to_ics.py - Code that turns Event objects into (a) .ics file(s)
    • scrape_and_parse/ - Everything concerning scraping information into JSON & Event objects
    • Event.py - Python Class to handle Events
    • main.py - Entrypoint that combines everything into one script
    • repo.py - Handles the upkeep of the repo within public/
  • public/ - Generated at runtime, contains the end result/exported files
  • requirements.txt - Python packages that have to be installed

License

All the code written by me in this repository is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

facebook_event_aggregator-0.2.0.tar.gz (22.4 kB view details)

Uploaded Source

Built Distribution

facebook_event_aggregator-0.2.0-py3-none-any.whl (28.2 kB view details)

Uploaded Python 3

File details

Details for the file facebook_event_aggregator-0.2.0.tar.gz.

File metadata

File hashes

Hashes for facebook_event_aggregator-0.2.0.tar.gz
Algorithm Hash digest
SHA256 283509aff3b50552fac0db97a111c286492f5ca44f14ed305dd7f8ee5cfa87fd
MD5 e7b47584b89bbd505f829dcf7f9554e3
BLAKE2b-256 158ef62498204affdb4622c67e150ead377f78d6c5a4830232b63455bfd281e2

See more details on using hashes here.

File details

Details for the file facebook_event_aggregator-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for facebook_event_aggregator-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6aee7e941686c5d6ff4e89725cbc58947afb051a090a6fbcfcad0ce34f4ee722
MD5 c9a14e29ec215a26452fa81dfe1441d1
BLAKE2b-256 0e7f3813f6f7e63d0d1ad849ee6bb2a8564748c3e398f6e761a02b914a2c0f40

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page