{"id":15306681,"url":"https://github.com/t0mer/ofek-bot","last_synced_at":"2025-04-14T23:32:16.451Z","repository":{"id":101737381,"uuid":"557687259","full_name":"t0mer/ofek-bot","owner":"t0mer","description":"Ofek-bot is a python based  bot that scarps the Ofek (EDU) web site and alerts me when the kids has tasks to complete.","archived":false,"fork":false,"pushed_at":"2025-01-26T22:32:01.000Z","size":37,"stargazers_count":16,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-28T12:21:14.250Z","etag":null,"topics":["apprise","automation","bot","python3","scraper","selenium"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/t0mer.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":"2022-10-26T05:41:08.000Z","updated_at":"2025-01-26T22:32:04.000Z","dependencies_parsed_at":"2023-12-10T23:25:26.855Z","dependency_job_id":"a7dc556e-ec8b-49c8-9f8e-660df32440cb","html_url":"https://github.com/t0mer/ofek-bot","commit_stats":{"total_commits":21,"total_committers":1,"mean_commits":21.0,"dds":0.0,"last_synced_commit":"fda58f8049db4fee70951a58a1587e522d305daa"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/t0mer%2Fofek-bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/t0mer%2Fofek-bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/t0mer%2Fofek-bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/t0mer%2Fofek-bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/t0mer","download_url":"https://codeload.github.com/t0mer/ofek-bot/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248979066,"owners_count":21192897,"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":["apprise","automation","bot","python3","scraper","selenium"],"created_at":"2024-10-01T08:06:50.798Z","updated_at":"2025-04-14T23:32:16.165Z","avatar_url":"https://github.com/t0mer.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ofek-bot\nOfek-bot is a python based  bot that scraps the Ofek (EDU) web site and alerts me when the kids has tasks to complete.\n\n## Features\n - Monitor kids tasks status\n - Schedule when to run.\n - Support many notification channels (Thanks to [Apprise](https://github.com/caronc/apprise))\n\n\n## Components and Frameworks used in Ofek-bot\n* [Loguru](https://pypi.org/project/loguru/) For logging.\n* [Schedule](https://pypi.org/project/schedule/) For alerts schedule.\n* [Apprise](https://github.com/caronc/apprise) For notifications.\n* [Selenium](https://selenium-python.readthedocs.io/) For data scrapping.\n\n## Supported Notifications\nThe section identifies all of the services supported by this library. [Check out the wiki for more information on the supported modules here](https://github.com/caronc/apprise/wiki).\n\n### Popular Notification Services\nThe table below identifies the services this tool supports and some example service urls you need to use in order to take advantage of it. Click on any of the services listed below to get more details on how you can configure Apprise to access them.\n\n| Notification Service | Service ID | Default Port | Example Syntax |\n| -------------------- | ---------- | ------------ | -------------- |\n| [Apprise API](https://github.com/caronc/apprise/wiki/Notify_apprise_api)  | apprise:// or apprises:// | (TCP) 80 or 443 | apprise://hostname/Token\n| [AWS SES](https://github.com/caronc/apprise/wiki/Notify_ses)  | ses://   | (TCP) 443   | ses://user@domain/AccessKeyID/AccessSecretKey/RegionName\u003cbr/\u003eses://user@domain/AccessKeyID/AccessSecretKey/RegionName/email1/email2/emailN\n| [Boxcar](https://github.com/caronc/apprise/wiki/Notify_boxcar)  | boxcar://   | (TCP) 443   | boxcar://hostname\u003cbr /\u003eboxcar://hostname/@tag\u003cbr/\u003eboxcar://hostname/device_token\u003cbr /\u003eboxcar://hostname/device_token1/device_token2/device_tokenN\u003cbr /\u003eboxcar://hostname/@tag/@tag2/device_token\n| [Discord](https://github.com/caronc/apprise/wiki/Notify_discord)  | discord://   | (TCP) 443   | discord://webhook_id/webhook_token\u003cbr /\u003ediscord://avatar@webhook_id/webhook_token\n| [Emby](https://github.com/caronc/apprise/wiki/Notify_emby)  | emby:// or embys:// | (TCP) 8096 | emby://user@hostname/\u003cbr /\u003eemby://user:password@hostname\n| [Enigma2](https://github.com/caronc/apprise/wiki/Notify_enigma2)  | enigma2:// or enigma2s:// | (TCP) 80 or 443 | enigma2://hostname\n| [Faast](https://github.com/caronc/apprise/wiki/Notify_faast) | faast://    | (TCP) 443    | faast://authorizationtoken\n| [FCM](https://github.com/caronc/apprise/wiki/Notify_fcm) | fcm://    | (TCP) 443    | fcm://project@apikey/DEVICE_ID\u003cbr /\u003efcm://project@apikey/#TOPIC\u003cbr/\u003efcm://project@apikey/DEVICE_ID1/#topic1/#topic2/DEVICE_ID2/\n| [Flock](https://github.com/caronc/apprise/wiki/Notify_flock) | flock://    | (TCP) 443    | flock://token\u003cbr/\u003eflock://botname@token\u003cbr/\u003eflock://app_token/u:userid\u003cbr/\u003eflock://app_token/g:channel_id\u003cbr/\u003eflock://app_token/u:userid/g:channel_id\n| [Gitter](https://github.com/caronc/apprise/wiki/Notify_gitter) | gitter://    | (TCP) 443    | gitter://token/room\u003cbr/\u003egitter://token/room1/room2/roomN\n| [Google Chat](https://github.com/caronc/apprise/wiki/Notify_googlechat) | gchat://    | (TCP) 443    | gchat://workspace/key/token\n| [Gotify](https://github.com/caronc/apprise/wiki/Notify_gotify) | gotify:// or gotifys://   | (TCP) 80 or 443    | gotify://hostname/token\u003cbr /\u003egotifys://hostname/token?priority=high\n| [Growl](https://github.com/caronc/apprise/wiki/Notify_growl)  | growl://   | (UDP) 23053   | growl://hostname\u003cbr /\u003egrowl://hostname:portno\u003cbr /\u003egrowl://password@hostname\u003cbr /\u003egrowl://password@hostname:port\u003c/br\u003e**Note**: you can also use the get parameter _version_ which can allow the growl request to behave using the older v1.x protocol. An example would look like: growl://hostname?version=1\n| [Home Assistant](https://github.com/caronc/apprise/wiki/Notify_homeassistant)       | hassio:// or hassios://   | (TCP) 8123 or 443 | hassio://hostname/accesstoken\u003cbr /\u003ehassio://user@hostname/accesstoken\u003cbr /\u003ehassio://user:password@hostname:port/accesstoken\u003cbr /\u003ehassio://hostname/optional/path/accesstoken\n| [IFTTT](https://github.com/caronc/apprise/wiki/Notify_ifttt) | ifttt://    | (TCP) 443    | ifttt://webhooksID/Event\u003cbr /\u003eifttt://webhooksID/Event1/Event2/EventN\u003cbr/\u003eifttt://webhooksID/Event1/?+Key=Value\u003cbr/\u003eifttt://webhooksID/Event1/?-Key=value1\n| [Join](https://github.com/caronc/apprise/wiki/Notify_join) | join://   | (TCP) 443    | join://apikey/device\u003cbr /\u003ejoin://apikey/device1/device2/deviceN/\u003cbr /\u003ejoin://apikey/group\u003cbr /\u003ejoin://apikey/groupA/groupB/groupN\u003cbr /\u003ejoin://apikey/DeviceA/groupA/groupN/DeviceN/\n| [KODI](https://github.com/caronc/apprise/wiki/Notify_kodi) | kodi:// or kodis://    | (TCP) 8080 or 443   | kodi://hostname\u003cbr /\u003ekodi://user@hostname\u003cbr /\u003ekodi://user:password@hostname:port\n| [Kumulos](https://github.com/caronc/apprise/wiki/Notify_kumulos) | kumulos:// | (TCP) 443 | kumulos://apikey/serverkey\n| [LaMetric Time](https://github.com/caronc/apprise/wiki/Notify_lametric) | lametric:// | (TCP) 443 | lametric://apikey@device_ipaddr\u003cbr/\u003elametric://apikey@hostname:port\u003cbr/\u003elametric://client_id@client_secret\n| [Mailgun](https://github.com/caronc/apprise/wiki/Notify_mailgun) | mailgun:// | (TCP) 443 | mailgun://user@hostname/apikey\u003cbr /\u003emailgun://user@hostname/apikey/email\u003cbr /\u003emailgun://user@hostname/apikey/email1/email2/emailN\u003cbr /\u003emailgun://user@hostname/apikey/?name=\"From%20User\"\n| [Matrix](https://github.com/caronc/apprise/wiki/Notify_matrix) | matrix:// or matrixs://  | (TCP) 80 or 443 | matrix://hostname\u003cbr /\u003ematrix://user@hostname\u003cbr /\u003ematrixs://user:pass@hostname:port/#room_alias\u003cbr /\u003ematrixs://user:pass@hostname:port/!room_id\u003cbr /\u003ematrixs://user:pass@hostname:port/#room_alias/!room_id/#room2\u003cbr /\u003ematrixs://token@hostname:port/?webhook=matrix\u003cbr /\u003ematrix://user:token@hostname/?webhook=slack\u0026format=markdown\n| [Mattermost](https://github.com/caronc/apprise/wiki/Notify_mattermost) | mmost:// or mmosts:// | (TCP) 8065 | mmost://hostname/authkey\u003cbr /\u003emmost://hostname:80/authkey\u003cbr /\u003emmost://user@hostname:80/authkey\u003cbr /\u003emmost://hostname/authkey?channel=channel\u003cbr /\u003emmosts://hostname/authkey\u003cbr /\u003emmosts://user@hostname/authkey\u003cbr /\u003e\n| [Microsoft Teams](https://github.com/caronc/apprise/wiki/Notify_msteams) | msteams://  | (TCP) 443   | msteams://TokenA/TokenB/TokenC/\n| [MQTT](https://github.com/caronc/apprise/wiki/Notify_mqtt) | mqtt://  or mqtts:// | (TCP) 1883 or 8883   | mqtt://hostname/topic\u003cbr /\u003emqtt://user@hostname/topic\u003cbr /\u003emqtts://user:pass@hostname:9883/topic\n| [Nextcloud](https://github.com/caronc/apprise/wiki/Notify_nextcloud) | ncloud:// or nclouds:// | (TCP) 80 or 443 | ncloud://adminuser:pass@host/User\u003cbr/\u003enclouds://adminuser:pass@host/User1/User2/UserN\n| [NextcloudTalk](https://github.com/caronc/apprise/wiki/Notify_nextcloudtalk) | nctalk:// or nctalks:// | (TCP) 80 or 443 | nctalk://user:pass@host/RoomId\u003cbr/\u003enctalks://user:pass@host/RoomId1/RoomId2/RoomIdN\n| [Notica](https://github.com/caronc/apprise/wiki/Notify_notica) | notica://  | (TCP) 443   | notica://Token/\n| [Notifico](https://github.com/caronc/apprise/wiki/Notify_notifico) | notifico://  | (TCP) 443   | notifico://ProjectID/MessageHook/\n| [Office 365](https://github.com/caronc/apprise/wiki/Notify_office365) | o365://  | (TCP) 443   | o365://TenantID:AccountEmail/ClientID/ClientSecret\u003cbr /\u003eo365://TenantID:AccountEmail/ClientID/ClientSecret/TargetEmail\u003cbr /\u003eo365://TenantID:AccountEmail/ClientID/ClientSecret/TargetEmail1/TargetEmail2/TargetEmailN\n| [OneSignal](https://github.com/caronc/apprise/wiki/Notify_onesignal) | onesignal:// | (TCP) 443 | onesignal://AppID@APIKey/PlayerID\u003cbr/\u003eonesignal://TemplateID:AppID@APIKey/UserID\u003cbr/\u003eonesignal://AppID@APIKey/#IncludeSegment\u003cbr/\u003eonesignal://AppID@APIKey/Email\n| [Opsgenie](https://github.com/caronc/apprise/wiki/Notify_opsgenie) | opsgenie:// | (TCP) 443 | opsgenie://APIKey\u003cbr/\u003eopsgenie://APIKey/UserID\u003cbr/\u003eopsgenie://APIKey/#Team\u003cbr/\u003eopsgenie://APIKey/\\*Schedule\u003cbr/\u003eopsgenie://APIKey/^Escalation\n| [ParsePlatform](https://github.com/caronc/apprise/wiki/Notify_parseplatform) | parsep:// or parseps:// | (TCP) 80 or 443 | parsep://AppID:MasterKey@Hostname\u003cbr/\u003eparseps://AppID:MasterKey@Hostname\n| [PopcornNotify](https://github.com/caronc/apprise/wiki/Notify_popcornnotify) | popcorn://  | (TCP) 443   | popcorn://ApiKey/ToPhoneNo\u003cbr/\u003epopcorn://ApiKey/ToPhoneNo1/ToPhoneNo2/ToPhoneNoN/\u003cbr/\u003epopcorn://ApiKey/ToEmail\u003cbr/\u003epopcorn://ApiKey/ToEmail1/ToEmail2/ToEmailN/\u003cbr/\u003epopcorn://ApiKey/ToPhoneNo1/ToEmail1/ToPhoneNoN/ToEmailN\n| [Prowl](https://github.com/caronc/apprise/wiki/Notify_prowl) | prowl://   | (TCP) 443    | prowl://apikey\u003cbr /\u003eprowl://apikey/providerkey\n| [PushBullet](https://github.com/caronc/apprise/wiki/Notify_pushbullet) | pbul://    | (TCP) 443    | pbul://accesstoken\u003cbr /\u003epbul://accesstoken/#channel\u003cbr/\u003epbul://accesstoken/A_DEVICE_ID\u003cbr /\u003epbul://accesstoken/email@address.com\u003cbr /\u003epbul://accesstoken/#channel/#channel2/email@address.net/DEVICE\n| [Pushjet](https://github.com/caronc/apprise/wiki/Notify_pushjet) | pjet:// or pjets:// | (TCP) 80 or 443 | pjet://hostname/secret\u003cbr /\u003epjet://hostname:port/secret\u003cbr /\u003epjets://secret@hostname/secret\u003cbr /\u003epjets://hostname:port/secret\n| [Push (Techulus)](https://github.com/caronc/apprise/wiki/Notify_techulus) | push://    | (TCP) 443    | push://apikey/\n| [Pushed](https://github.com/caronc/apprise/wiki/Notify_pushed) | pushed://    | (TCP) 443    | pushed://appkey/appsecret/\u003cbr/\u003epushed://appkey/appsecret/#ChannelAlias\u003cbr/\u003epushed://appkey/appsecret/#ChannelAlias1/#ChannelAlias2/#ChannelAliasN\u003cbr/\u003epushed://appkey/appsecret/@UserPushedID\u003cbr/\u003epushed://appkey/appsecret/@UserPushedID1/@UserPushedID2/@UserPushedIDN\n| [Pushover](https://github.com/caronc/apprise/wiki/Notify_pushover)  | pover://   | (TCP) 443   | pover://user@token\u003cbr /\u003epover://user@token/DEVICE\u003cbr /\u003epover://user@token/DEVICE1/DEVICE2/DEVICEN\u003cbr /\u003e**Note**: you must specify both your user_id and token\n| [PushSafer](https://github.com/caronc/apprise/wiki/Notify_pushsafer)  | psafer:// or psafers://  | (TCP) 80 or 443  | psafer://privatekey\u003cbr /\u003epsafers://privatekey/DEVICE\u003cbr /\u003epsafer://privatekey/DEVICE1/DEVICE2/DEVICEN\n| [Reddit](https://github.com/caronc/apprise/wiki/Notify_reddit) | reddit:// | (TCP) 443   | reddit://user:password@app_id/app_secret/subreddit\u003cbr /\u003ereddit://user:password@app_id/app_secret/sub1/sub2/subN\n| [Rocket.Chat](https://github.com/caronc/apprise/wiki/Notify_rocketchat) | rocket:// or rockets://  | (TCP) 80 or 443   | rocket://user:password@hostname/RoomID/Channel\u003cbr /\u003erockets://user:password@hostname:443/#Channel1/#Channel1/RoomID\u003cbr /\u003erocket://user:password@hostname/#Channel\u003cbr /\u003erocket://webhook@hostname\u003cbr /\u003erockets://webhook@hostname/@User/#Channel\n| [Ryver](https://github.com/caronc/apprise/wiki/Notify_ryver) | ryver://  | (TCP) 443   | ryver://Organization/Token\u003cbr /\u003eryver://botname@Organization/Token\n| [SendGrid](https://github.com/caronc/apprise/wiki/Notify_sendgrid) | sendgrid://  | (TCP) 443   | sendgrid://APIToken:FromEmail/\u003cbr /\u003esendgrid://APIToken:FromEmail/ToEmail\u003cbr /\u003esendgrid://APIToken:FromEmail/ToEmail1/ToEmail2/ToEmailN/\n| [ServerChan](https://github.com/caronc/apprise/wiki/Notify_serverchan) | serverchan://   | (TCP) 443    | serverchan://token/\n| [SimplePush](https://github.com/caronc/apprise/wiki/Notify_simplepush) | spush://   | (TCP) 443    | spush://apikey\u003cbr /\u003espush://salt:password@apikey\u003cbr /\u003espush://apikey?event=Apprise\n| [Slack](https://github.com/caronc/apprise/wiki/Notify_slack) | slack://  | (TCP) 443   | slack://TokenA/TokenB/TokenC/\u003cbr /\u003eslack://TokenA/TokenB/TokenC/Channel\u003cbr /\u003eslack://botname@TokenA/TokenB/TokenC/Channel\u003cbr /\u003eslack://user@TokenA/TokenB/TokenC/Channel1/Channel2/ChannelN\n| [SMTP2Go](https://github.com/caronc/apprise/wiki/Notify_smtp2go) | smtp2go:// | (TCP) 443 | smtp2go://user@hostname/apikey\u003cbr /\u003esmtp2go://user@hostname/apikey/email\u003cbr /\u003esmtp2go://user@hostname/apikey/email1/email2/emailN\u003cbr /\u003esmtp2go://user@hostname/apikey/?name=\"From%20User\"\n| [Streamlabs](https://github.com/caronc/apprise/wiki/Notify_streamlabs) | strmlabs:// | (TCP) 443 | strmlabs://AccessToken/\u003cbr/\u003estrmlabs://AccessToken/?name=name\u0026identifier=identifier\u0026amount=0\u0026currency=USD\n| [SparkPost](https://github.com/caronc/apprise/wiki/Notify_sparkpost) | sparkpost:// | (TCP) 443 | sparkpost://user@hostname/apikey\u003cbr /\u003esparkpost://user@hostname/apikey/email\u003cbr /\u003esparkpost://user@hostname/apikey/email1/email2/emailN\u003cbr /\u003esparkpost://user@hostname/apikey/?name=\"From%20User\"\n| [Spontit](https://github.com/caronc/apprise/wiki/Notify_spontit) | spontit://  | (TCP) 443   | spontit://UserID@APIKey/\u003cbr /\u003espontit://UserID@APIKey/Channel\u003cbr /\u003espontit://UserID@APIKey/Channel1/Channel2/ChannelN\n| [Syslog](https://github.com/caronc/apprise/wiki/Notify_syslog) | syslog://  | (UDP) 514 (_if hostname specified_) | syslog://\u003cbr /\u003esyslog://Facility\u003cbr /\u003esyslog://hostname\u003cbr /\u003esyslog://hostname/Facility\n| [Telegram](https://github.com/caronc/apprise/wiki/Notify_telegram) | tgram://  | (TCP) 443   | tgram://bottoken/ChatID\u003cbr /\u003etgram://bottoken/ChatID1/ChatID2/ChatIDN\n| [Twitter](https://github.com/caronc/apprise/wiki/Notify_twitter) | twitter://  | (TCP) 443   | twitter://CKey/CSecret/AKey/ASecret\u003cbr/\u003etwitter://user@CKey/CSecret/AKey/ASecret\u003cbr/\u003etwitter://CKey/CSecret/AKey/ASecret/User1/User2/User2\u003cbr/\u003etwitter://CKey/CSecret/AKey/ASecret?mode=tweet\n| [Twist](https://github.com/caronc/apprise/wiki/Notify_twist) | twist://  | (TCP) 443   | twist://pasword:login\u003cbr/\u003etwist://password:login/#channel\u003cbr/\u003etwist://password:login/#team:channel\u003cbr/\u003etwist://password:login/#team:channel1/channel2/#team3:channel\n| [XBMC](https://github.com/caronc/apprise/wiki/Notify_xbmc) | xbmc:// or xbmcs://    | (TCP) 8080 or 443   | xbmc://hostname\u003cbr /\u003exbmc://user@hostname\u003cbr /\u003exbmc://user:password@hostname:port\n| [XMPP](https://github.com/caronc/apprise/wiki/Notify_xmpp) | xmpp:// or xmpps://    | (TCP) 5222 or 5223   | xmpp://user:password@hostname\u003cbr /\u003exmpps://user:password@hostname:port?jid=user@hostname/resource\u003cbr/\u003exmpps://user:password@hostname/target@myhost, target2@myhost/resource\n| [Webex Teams (Cisco)](https://github.com/caronc/apprise/wiki/Notify_wxteams) | wxteams://  | (TCP) 443   | wxteams://Token\n| [Zulip Chat](https://github.com/caronc/apprise/wiki/Notify_zulip) | zulip://  | (TCP) 443   | zulip://botname@Organization/Token\u003cbr /\u003ezulip://botname@Organization/Token/Stream\u003cbr /\u003ezulip://botname@Organization/Token/Email\n\n\n## Installation\nOfek-bot is a docker based application that can be installed using docker compose:\n```\nversion: \"3.6\"\nservices:\n  ofek:\n    image: techblog/ofek-bot\n    container_name: ofek\n    restart: always\n    environment:\n      - SCHEDULES=\n      - NOTIFIERS=\n    volumes:\n      - ./ofek-bot/config:/app/config\n```\n\n### Environment\n* SCHEDULES - Set checks schedules times splited with \",\" (14:00,15:30) - default is set to 16:00.\n* NOTIFIERS - List of [Supported Notifications](#Supported-Notifications)\n\n\n### Volumes\nOfek-bot is using the kids login credentials to the ofek website.\nIn the config folder there is a config.yaml files for saving the credentials.\nMake sure to create the config file in the following structure:\n\n```\nkids:\n  - name: \n    username: \n    password: \n\n  - name: \n    username: \n    password: \n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ft0mer%2Fofek-bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ft0mer%2Fofek-bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ft0mer%2Fofek-bot/lists"}