WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Κοντά σου: ό,τι μετράει γύρω σου, τώρα. Daily local info for Greece, open data only.
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Open the app, it finds where you are, and shows what matters around you right now: pharmacies and hospitals on duty, live bus arrivals, fuel prices for your prefecture with the stations around you, and what else is nearby (ATMs, EV chargers, bakeries, cafés, parking, playgrounds, ΚΕΠ ...). Attica first; places data covers all of Greece.
| Module | Status | Source |
|---|---|---|
| Fuel prices per prefecture (incl. heating oil) | working | fuelprices.gr daily PDF bulletins (archive from 2018; 2017 uses an unsupported Excel layout) |
| Live bus arrivals (Athens) | working | OASA telematics API (public, unofficial) |
| Metro and tram: nearest station, next departures (Athens) | working | ΣΤΑΣΥ GTFS feed (data.gov.gr, CC BY 4.0); exact day when the feed covers it, otherwise a representative same-weekday schedule labelled as indicative |
| Electricity tariff of the month | planned | RAAEY monthly tariff tables |
| Pharmacies on duty (Attica) | working | Attica Pharmacists' Association site (fsa-efimeries.gr), fetched daily for the next 7 days |
| Hospitals on duty (Attica) | working | Ministry of Health daily rota (.doc), converted with LibreOffice; hospital coordinates from a curated table (approximate) |
| Open-air market (λαϊκή) schedule | planned | curated table from regional decisions |
| Events near me | working | City of Athens culture portal (cultureisathens.gr), nearest first within the chosen radius |
| Bus route changes near you | working | OASA's own announcements feed (www.oasa.gr/feed): each post's lines and municipality are extracted and matched to the visitor's municipality and the lines at their nearby stops |
| What's nearby (20 place categories) | working | OpenStreetMap Greece extract imported weekly into the pois table; Overpass API only as a fallback |
| Location naming + prefecture detection | working | OSM Nominatim reverse geocoding (1 req/s, cached) + nearest prefecture centroid |
Only openly published data is used. Places come from OpenStreetMap under the ODbL; the page carries the attribution. fuelprices.gr protects its station-level search with a CAPTCHA intended to block automated collection; we respect that and use the openly published bulletins (prefecture averages) instead.
python3.10 -m venv --without-pip .venv && curl -sS https://bootstrap.pypa.io/get-pip.py | .venv/bin/python
.venv/bin/pip install -r requirements.txt
.venv/bin/python -m simera.collectors.fuel --days 30 # or --all for the full archive, --repair to re-fetch bad parses
.venv/bin/python -m simera.collectors.pharmacies # next 7 days of Attica duty rotas
.venv/bin/python -m simera.collectors.hospitals # today's and tomorrow's Attica hospital rota (needs `soffice` on PATH)
.venv/bin/python -m simera.collectors.osm_pois # weekly: download the Greece OSM extract (~400 MB) and rebuild the places table
.venv/bin/python -m simera.collectors.gtfs # weekly: metro/tram timetable (GTFS)
scripts/devserver.sh start # dev server on :8891 with a pid file (stop|restart)
.venv/bin/uvicorn simera.api.main:app --reload
Open http://127.0.0.1:8000/ for the page, http://127.0.0.1:8000/docs for the API.
Set DATABASE_URL to use PostgreSQL instead of the default SQLite file in data/.
scripts/snapshot.sh --release (prints the SNAPSHOT_URL).render.yaml defines a free Docker web service. Set the SNAPSHOT_URL env var to the release asset URL. First boot downloads the snapshot (~40 MB) and starts collecting the daily data (pharmacies, hospitals, fuel) in the background; from then on once a day at 04:30 UTC.python scripts/build_docs.py https://konta-sou-api.onrender.com [relay-url] [G-XXXXXXXXXX], commit docs/, enable GitHub Pages from the docs folder. The optional third argument is a Google Analytics 4 measurement id; Analytics loads only after the visitor accepts the consent bar. Set ALLOWED_ORIGINS on Render to your Pages origin..github/workflows/snapshot.yml) and is uploaded to the data release. To have the server restart with it automatically, copy the service's Deploy Hook URL from Render (Settings → Deploy Hook) into a repository secret named RENDER_DEPLOY_HOOK.worker/ is a tiny Cloudflare Worker relay that runs in Cloudflare's Athens data centre; deploy it (see worker/README.md) and set OASA_API_URL and MOH_BASE_URL on Render to its address. The current deployment uses https://konta-sou.charalambos-mitropoulos.workers.dev.The free instance sleeps after 15 minutes without traffic; the first request afterwards takes about a minute.
The first screen shows Σήμερα (weather, ΕΜΥ warnings, name days) and one big chooser, "Τι ψάχνεις κοντά σου;".
Every option (pharmacies on duty, hospitals on duty, buses/metro, fuel, events, Attiki Odos & power cuts, and the
twenty OpenStreetMap place categories) has its own distance slider, with sensible bounds per option (buses up to
5 km, hospitals up to 30 km, places 200 m to 15 km). Results always come nearest first; long lists show the nearest
few and a "show the rest, further away" button. The API side: max_km on /api/pharmacies/on-duty,
/api/hospitals/on-duty and /api/transit/rail/near, max_km on /api/traffic/near, radius (up to 15 km) on
/api/nearby, radius and sort=distance|time on /api/events. The chosen option and radius are remembered on the
device; the last four options used appear as shortcuts on the first screen.
simera/alerts.py), matched to the visitor's region (prefecture → MeteoAlarm area), cached 15 min in memory.simera/traffic.py; sensor coordinates converted from the Greek grid in simera/data/attiki_odos_vds.json. Sensors reporting 0 km/h are ignored as unreliable.simera/collectors/outages.py), stored in power_outages; the visitor's municipality comes from the reverse geocoder and is matched by name, with a manual selector as fallback.OASA posts every diversion, suspension and holiday schedule on www.oasa.gr, with an RSS feed. The collector
(simera/collectors/oasa_notices.py, every 6 h and daily) reads the feed, fetches each new post once with a
pause, and extracts the line codes from the title ("γραμμών 219 και 816" → 219, 816), the municipality
("στον Δήμο Αγ. Δημητρίου", matched to the ΔΕΔΔΗΕ municipality table, with a prefix rule for renamed
municipalities such as Σπάτων-Αρτέμιδος) and the dates from the body. /api/transit/notices?lat&lng&lines=
returns the notices that name the visitor's municipality, any of the lines at their nearby stops, or neither
(general ones such as holiday schedules), current ones first. The transit card lists them under the live
arrivals; the Σήμερα card shows a one-line shortcut when a change touches the visitor's area.
Cultural events from the City of Athens portal cultureisathens.gr, which publishes its events through the public
WordPress REST API; each event page carries the date, venue, category, price and map coordinates
(simera/collectors/events.py, daily, pages fetched only when new or changed). Attica beyond the Municipality of
Athens is not covered yet. Facebook was ruled out: its events API is closed to third parties and scraping it
breaks its terms.
worker/ straight from the visitor's phone, and visitors in Greece also refresh the relay's stored copy of the ministry rota pages, which the API server reads (see worker/README.md). If nobody in Greece opens the app for two weeks the copy expires; hospital rotas then fall back to HOSPITALS_URL, and bus endpoints on the server return 503 with a notice.scripts/daily.sh runs all collectors; schedule it with cron (see the comment in the script).
soffice) for converting the Ministry of Health .doc rota to HTML..venv/bin/python -m pytest -q