{"id":21928629,"url":"https://github.com/nuvious/webwatcher","last_synced_at":"2026-05-03T22:33:46.092Z","repository":{"id":156727804,"uuid":"442520405","full_name":"nuvious/WebWatcher","owner":"nuvious","description":null,"archived":false,"fork":false,"pushed_at":"2022-01-15T18:04:09.000Z","size":30,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-30T19:46:45.888Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nuvious.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2021-12-28T16:27:46.000Z","updated_at":"2021-12-29T17:25:38.000Z","dependencies_parsed_at":null,"dependency_job_id":"e914f13e-7319-444f-9fc8-4be88582173a","html_url":"https://github.com/nuvious/WebWatcher","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/nuvious/WebWatcher","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nuvious%2FWebWatcher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nuvious%2FWebWatcher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nuvious%2FWebWatcher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nuvious%2FWebWatcher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nuvious","download_url":"https://codeload.github.com/nuvious/WebWatcher/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nuvious%2FWebWatcher/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32587819,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"ssl_error","status_checked_at":"2026-05-03T22:09:10.534Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2024-11-28T22:27:09.444Z","updated_at":"2026-05-03T22:33:46.076Z","avatar_url":"https://github.com/nuvious.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Web Watcher\n\nThis is just a simple docker container designed to watch webpages for \nparticular pattern and notify the user if a pattern is/is not present on the\npage.\n\nFor recent changes, check out the\n[CHANGELOG](https://github.com/nuvious/WebWatcher/blob/master/CHANGELOG.md).\n\n## Quickstart\n\nCreate an env.list file that specifies the following:\n\n```bash\n# A space separated list of urls\nURLS=www.shopingforsomethinginhighdemand.com www.shopforsomethingelse.com\n# A space separated list of regex patterns match\nFILTERS=SOLD.*OUT SOLD.\u0026OUT\n\nSLEEP=5m # A sleep between checks; ex 30, 5m, 1h, etc\nDEALY=10s # A sleep between urls checked\n\nFORMATTER=grep_match_formatter # Use the grep specific formatter\nMATCH=match_grep_regex_negative  # Use the negative grep regex matcher\nNOTIFY=notify_pushover # Use the pushover notifier script\n\nAPP_TOKEN=[YOUR APP TOKEN] # Pushover app token\nUSER_KEY=[YOUR USER KEY] # Pushover user key\n```\n\nThe above example does a negative regex match on the regex SOLD.*OUT and\nnotifies the user via pushover if the REGEX does not match the specified url.\nThere are different scripts available for different notification mechanisms,\nmatch conventions, and formatting. For details see the\n[script library documentation](https://github.com/nuvious/WebWatcher/blob/master/lib/README.md).\n\nNext, create a data directory (dumps curl outputs for debugging) and launch the\ncontainer.\n\n```bash\n# Available in either launch.sh or launch.ps1 for windows.\nmkdir -p data\ndocker build -t webwatcher .\ndocker run \\\n    -d \\\n    -v $PWD/data:/data \\\n    --env-file env.list \\\n    webwatcher\n```\n\nLaunch helper scripts have also been generated in bash and powershell that build\nthe container and launch it with specified environment file, match, notify, and \nmsg format scripts.\n\n### launch.ps1 Helper\n\nUsage Example:\n\n```powershell\n.\\launch.ps1 `\n    -envfile ${PWD}/env-xbox-bestbuy-instock.list `\n    -name bestbuy-xbox `\n    -data ${PWD}/data\n```\n\n### launch.sh Helper\n\nUsage Example:\n\n```bash\n# NOTE: Launch options for the bash script are ordered\n.\\launch.sh \\\n    \"container-name\" \\ # The name for the container\n    $PWD/data \\ # The data directory for the container\n    $PWD/env-xbox-bestbuy-instock.list # The environment file to use\n```\n\n## Cloud Deployment Guides\n\n- [Azure Deployment](https://github.com/nuvious/WebWatcher/blob/master/docs/DeployAzure.md)\n\n## Advanced Usage\n\n### Override Notification Script\n\nThe script sources lib/notify.sh on startup to import a notify() function.\nThis can be overridden using a simple volume mount command as follows with any\nscript that defines a notify() function. The notify() function should not exit\nand should return nothing; it simply takes the input from $1 and uses it to\nnotify the user via the means implemented in the funciton itself.\n\n### Override Match Script\n\nThe script sources lib/match.sh by default. The match script defines a match()\nfunction which takes a file in the $1 argument and returns 0 if there's a match\nor 1 for a non-match. All other parameters should be passed in via environment\nvariables and null-checking these variables should be handled in the script\nitself.\n\n### Override Message Format Script\n\nThe script sources lib/msg.sh by default. The msg script defines a\nformat_message() function which outputs a message to stdout. It should develop\nits formatted response based on the available environmental variables. Variables\nwhich can be relied upon as an example are $URL and $SLEEP. All other variables\nare related to the match and notification scripts and one may want to develop\nmessage format scripts specific to how output of the curl command is processed\nin match and the available conventions of the notification script.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnuvious%2Fwebwatcher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnuvious%2Fwebwatcher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnuvious%2Fwebwatcher/lists"}