Αυτόματο scraping του προγράμματος του Panathinaikos BC από το paobc.gr και συγχρονισμός με Google Calendar.
- 🔄 Αυτόματος συγχρονισμός αγώνων με Google Calendar
- 📅 Υποστήριξη pagination (πολλές σελίδες)
- 🕒 Έλεγχος και ενημέρωση ωρών αγώνων
- 🗑️ Διαγραφή ακυρωμένων/μετακινημένων αγώνων
- ⏰ Υπενθύμιση 1 ώρα πριν τον αγώνα
- 🌍 Υποστήριξη timezone (Europe/Athens)
- 🔐 Service Account authentication (χωρίς token expiration!)
Σημαντικό: Κάνοντας fork αυτό το repository, θα δημιουργήσεις το δικό σου ξεχωριστό ημερολόγιο. Δεν θα έχεις πρόσβαση στο δικό μου ημερολόγιο και δεν θα μπορείς να το τροποποιήσεις.
- Κάνε Fork αυτό το repository στο δικό σου GitHub account
- Ακολούθησε τα παρακάτω βήματα για να στήσεις το δικό σου Google Calendar API
- Πρόσθεσε τα δικά σου GitHub Secrets
- Python 3.11+
- Google Cloud Project με Service Account
git clone https://github.com/YOUR_USERNAME/PaoBcScraper.git
cd PaoBcScraperpip install requests beautifulsoup4
pip install google-auth google-auth-oauthlib google-auth-httplib2
pip install google-api-python-client- Πήγαινε στο Google Cloud Console
- Δημιούργησε νέο project (ή επίλεξε υπάρχον)
- Πήγαινε στο IAM & Admin → Service Accounts
- Πάτα Create Service Account
- Name:
pao-scraper(ή όποιο όνομα θέλεις) - Πάτα Create and Continue
- Παράλειψε το Grant this service account access (πάτα Continue)
- Πάτα Done
- Name:
- Βρες το service account που μόλις δημιούργησες
- Πάτα τα 3 τελείες (⋮) → Manage Keys
- Add Key → Create New Key → JSON
- Κατέβασε το JSON αρχείο
- Μετονόμασέ το σε
service-account-key.jsonκαι βάλτο στον root φάκελο
- Στο Google Cloud Console → APIs & Services → Library
- Ψάξε "Google Calendar API"
- Πάτα Enable
- Άνοιξε το Google Calendar
- Δημιούργησε νέο calendar (ή χρησιμοποίησε υπάρχον):
- Αριστερά δίπλα στα "Other calendars" → + → Create new calendar
- Όνομα: "PAO BC Calendar" (ή όποιο θέλεις)
- Στο calendar που θέλεις να χρησιμοποιήσεις:
- Πάτα τα 3 τελείες δίπλα του → Settings and sharing
- Κύλησε κάτω στο "Share with specific people"
- Πάτα Add people
- Βάλε το email του service account (από το JSON, π.χ.
pao-scraper@project-id.iam.gserviceaccount.com) - Permission: Make changes to events
- Πάτα Send
Αν θες να χρησιμοποιήσεις συγκεκριμένο calendar:
# Δημιούργησε το .env αρχείο
cp .env.example .env
# Επεξεργάσου το .env και βάλε το δικό σου Calendar ID
CALENDAR_ID=your_calendar_id@group.calendar.google.comΑν δεν ορίσεις CALENDAR_ID, θα χρησιμοποιηθεί το primary calendar σου.
python pao_scraper.pyΔεν χρειάζεται browser authentication! Το service account χρησιμοποιεί το JSON key file.
Το scraper τρέχει αυτόματα κάθε μέρα στις 10:00 πρωί (ώρα Ελλάδας / 08:00 UTC).
- Στο fork σου, πήγαινε στο:
Settings→Secrets and variables→Actions - Πρόσθεσε το δικό σου secret:
- Name:
SERVICE_ACCOUNT_KEY - Value: Το base64-encoded περιεχόμενο του
service-account-key.json
- Name:
Windows (PowerShell):
[Convert]::ToBase64String([IO.File]::ReadAllBytes("service-account-key.json")) | clipWindows (Git Bash):
cat service-account-key.json | base64 -w 0Linux/Mac:
cat service-account-key.json | base64 -w 0Αντίγραψε το output και βάλτο ως το SERVICE_ACCOUNT_KEY secret.
Μπορείς επίσης να τρέξεις το workflow χειροκίνητα:
- Πήγαινε στο tab Actions
- Επίλεξε "PAO BC Scraper (Service Account)"
- Πάτα "Run workflow"
PaoBcScraper/
├── pao_scraper.py # Main script
├── clean_calendar.py # Utility για καθαρισμό calendar
├── service-account-key.json # Service Account credentials (local only)
├── .github/
│ └── workflows/
│ └── scraper.yml # GitHub Actions workflow
├── .gitignore # Ignored files
├── .env.example # Template για environment variables
└── README.md
Τα παρακάτω αρχεία ΔΕΝ ανεβαίνουν στο GitHub (προστατεύονται από .gitignore):
service-account-key.json- Service Account credentialscredentials.json- OAuth credentials (παλιό, δεν χρειάζεται πια)token.json/token.pickle- Access tokens (παλιό, δεν χρειάζεται πια).env- Local configuration
Προσοχή: Μην κάνεις ποτέ commit το service-account-key.json! Περιέχει ευαίσθητα δεδομένα.
Το project χρησιμοποιεί Service Account αντί για OAuth γιατί:
✅ Service Account (Current):
- Δεν λήγει ποτέ το authentication
- Ιδανικό για automation/CI/CD
- Δεν χρειάζεται browser authentication
- Πιο αξιόπιστο για scheduled tasks
❌ OAuth (Deprecated):
- Tokens λήγουν κάθε 7 μέρες (testing mode)
- Χρειάζεται manual reauthorization
- Προβλήματα με GitHub Actions
- Βεβαιώσου ότι το
service-account-key.jsonυπάρχει στον root φάκελο (local) - Ή ότι έχεις ορίσει το
SERVICE_ACCOUNT_KEYsecret (GitHub Actions)
- Βεβαιώσου ότι έχεις μοιραστεί το calendar με το service account email
- Έλεγξε ότι το permission είναι "Make changes to events"
- Έλεγξε ότι το
CALENDAR_IDείναι σωστό - Ή χρησιμοποίησε
primaryγια το default calendar
- Έλεγξε ότι το
SERVICE_ACCOUNT_KEYsecret είναι σωστά encoded σε base64 - Δες τα logs στο Actions tab για λεπτομερή σφάλματα
- Σάρωση: Το script σαρώνει όλες τις σελίδες του paobc.gr/schedule
- Parsing: Εξάγει πληροφορίες αγώνων (ομάδες, ημερομηνία, ώρα, γήπεδο, διοργάνωση)
- Σύγκριση: Συγκρίνει με τα υπάρχοντα events στο Google Calendar
- Συγχρονισμός:
- Προσθέτει νέους αγώνες
- Ενημερώνει αγώνες που άλλαξαν ώρα
- Διαγράφει αγώνες που δεν υπάρχουν πια (ακυρώθηκαν/μετακινήθηκαν)
MIT License - Ελεύθερο για προσωπική χρήση
Pull requests are welcome! Για μεγάλες αλλαγές, άνοιξε πρώτα ένα issue.
Αυτό το project είναι ανεπίσημο και δεν έχει καμία σχέση με την ΚΑΕ Παναθηναϊκός. Χρησιμοποιεί δημόσια διαθέσιμες πληροφορίες από το επίσημο website.
- Developed by @RhamnusiaCodes
- Data source: paobc.gr
Φτιαγμένο με 💚 για τον Παναθηναϊκό!