docs/images | ||
notifiers | ||
static | ||
templates | ||
.air.toml | ||
.drone.yaml | ||
.gitignore | ||
forms.go | ||
go.mod | ||
go.sum | ||
LICENSE | ||
main.go | ||
models.go | ||
README.md | ||
scraping.go | ||
scraping_test.go | ||
todo.md | ||
util.go |
Go Watch
A change detection server that can notify through various services written in Go
Intro
GoWatch works through filters, a filter performs operations on the input it recieves.
Here is an example of a 'Watch' that calculates the lowest and average price of 4090s on NewEgg and notifies the user if the lowest price changed:
Note that everything, including scheduling/storing/notifying, is a filter
.
Schedule
is a cron filter with a '@every 15m' value, so this will run every 15 minutes.
NewEgg Fetch
is a Get URL filter with a 'https://www.newegg.com/p/pl?N=100007709&d=4090&isdeptsrh=1&PageSize=96' value, it's output will be the HTTP response.
Select Price
is a CSS filter with the value '.item-container .item-action strong[class!="item-buying-choices-price"]' value, it's output will be the html elements containing the prices.
An XPath filter could also have been used.
Sanitize
is a Replace filter, using a regular expression ('[^0-9]') it removes anything that's not a number.
Avg
is an Average filter, it calculates the average value of its inputs.
Min
is a Minimum filter, it calculates the minimum value of its inputs.
Store Avg
and Store Min
are Store filters, they store its input values in the database.
Diff
is a Different Than Last filter, only passing on the inputs that are different then the last value stored in the database.
Notify
is a Notify filter, if there are any inputs to this filter, it will execute a template and send the result to a user defined 'notifier' (Telegram/Discord/Matrix/etc).
Filters
Cron
Get URL
Get URLs
CSS
XPath
JSON
Replace
Match
Substring
Contains
Store
Notify
Math
Sum
Minimum
Maximum
Average
Count
Round
Condition
Different Than Last
Lower Than Last
Lowest
Lower Than
Higher Than Last
Highest
Higher Than
Lua
type script compilation
tsc static/*.ts --lib es2020,dom --watch --downlevelIteration
Dependencies
The following libaries are used in Go-Watch:
- Gin for HTTP server
- multitemplate for template inheritance
- Cascadia for CSS selectors
- htmlquery for XPath selectors
- validator for user user input validation
- tgbotapi for Telegram
- cron for job scheduling
- viper for config management
- gjson for JSON selectors
- gopher-lua for Lua scripting
- gopher-lua-libs for expanding the Lua scripting functionality
- net for http fetching
- gorm for database abstraction
- bootstrap