From 42ada42cc169fa2eeebce7ae6cd9b8dd632c83e7 Mon Sep 17 00:00:00 2001 From: Stavros Date: Sun, 1 Oct 2023 19:59:10 +0300 Subject: [PATCH] Add changedetection.io (#1277) Co-authored-by: Nicolas Meienberger <47644445+meienberger@users.noreply.github.com> --- README.md | 1 + apps/changedetection/config.json | 18 +++++ apps/changedetection/docker-compose.yml | 49 +++++++++++++ apps/changedetection/metadata/description.md | 73 +++++++++++++++++++ apps/changedetection/metadata/logo.jpg | Bin 0 -> 27909 bytes 5 files changed, 141 insertions(+) create mode 100644 apps/changedetection/config.json create mode 100644 apps/changedetection/docker-compose.yml create mode 100644 apps/changedetection/metadata/description.md create mode 100644 apps/changedetection/metadata/logo.jpg diff --git a/README.md b/README.md index d79571cf..e060c142 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Budibase](https://github.com/Budibase/budibase) - Low code platform for creating internal tools, workflows, and admin panels in minutes. Supports PostgreSQL, MySQL, MSSQL, MongoDB, Rest API, Docker, K8s, and more 🚀. Budibase, the low code platform you'll enjoy using ⚡ - [Bookstack](https://github.com/BookStackApp/BookStack) - Simple, easy-to-use platform for organising and storing information. - [Calibre-Web](https://github.com/janeczku/calibre-web) - Web Ebook Reader +- [ChangeDetection.io](https://github.com/dgtlmoon/changedetection.io) - The best and simplest free open source website change detection, restock monitor and notification service. - [Chatpad AI](https://github.com/deiucanta/chatpad) - Not just another ChatGPT user-interface! - [Code-Server](https://github.com/coder/code-server) - Web VS Code - [Codex.Docs](https://github.com/codex-team/codex.docst) - Free Docs app powered by Editor.js ecosystem. diff --git a/apps/changedetection/config.json b/apps/changedetection/config.json new file mode 100644 index 00000000..307abab1 --- /dev/null +++ b/apps/changedetection/config.json @@ -0,0 +1,18 @@ +{ + "name": "ChangeDetection", + "available": true, + "port": 8257, + "exposable": true, + "id": "changedetection", + "description": "The best and simplest free open source website change detection, restock monitor and notification service.", + "tipi_version": 1, + "version": "0.45.2", + "categories": [ + "utilities" + ], + "short_desc": "Website change detection.", + "author": "dgtlmoon", + "source": "https://github.com/dgtlmoon/changedetection.io", + "website": "https://changedetection.io/", + "form_fields": [] +} \ No newline at end of file diff --git a/apps/changedetection/docker-compose.yml b/apps/changedetection/docker-compose.yml new file mode 100644 index 00000000..f14fd078 --- /dev/null +++ b/apps/changedetection/docker-compose.yml @@ -0,0 +1,49 @@ +version: "3.7" +services: + changedetection: + image: ghcr.io/dgtlmoon/changedetection.io:0.45.2 + container_name: changedetection + hostname: changedetection + volumes: + - ${APP_DATA_DIR}/data:/datastore + ports: + - ${APP_PORT}:5000 + restart: unless-stopped + environment: + - PLAYWRIGHT_DRIVER_URL=ws://chnagedetection-chrome:3000/?stealth=1&--disable-web-security=true + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.changedetection-web-web-redirect.redirectscheme.scheme: https + traefik.http.services.changedetection-web.loadbalancer.server.port: 5000 + # Web + traefik.http.routers.changedetection-web-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.changedetection-web-insecure.entrypoints: web + traefik.http.routers.changedetection-web-insecure.service: changedetection-web + traefik.http.routers.changedetection-web-insecure.middlewares: changedetection-web-web-redirect + # Websecure + traefik.http.routers.changedetection-web.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.changedetection-web.entrypoints: websecure + traefik.http.routers.changedetection-web.service: changedetection-web + traefik.http.routers.changedetection-web.tls.certresolver: myresolver + # Local domain + traefik.http.routers.changedetection-web-local-insecure.rule: Host(`changedetection-web.${LOCAL_DOMAIN}`) + traefik.http.routers.changedetection-web-local-insecure.entrypoints: web + traefik.http.routers.changedetection-web-local-insecure.service: changedetection-web + traefik.http.routers.changedetection-web-local-insecure.middlewares: changedetection-web-web-redirect + # Local domain secure + traefik.http.routers.changedetection-web-local.rule: Host(`changedetection-web.${LOCAL_DOMAIN}`) + traefik.http.routers.changedetection-web-local.entrypoints: websecure + traefik.http.routers.changedetection-web-local.service: changedetection-web + traefik.http.routers.changedetection-web-local.tls: true + + + chnagedetection-chrome: + hostname: chnagedetection-chrome + image: browserless/chrome:latest + restart: unless-stopped + container_name: chnagedetection-chrome + networks: + - tipi_main_network \ No newline at end of file diff --git a/apps/changedetection/metadata/description.md b/apps/changedetection/metadata/description.md new file mode 100644 index 00000000..28548e98 --- /dev/null +++ b/apps/changedetection/metadata/description.md @@ -0,0 +1,73 @@ +## Web Site Change Detection, Restock monitoring and notifications. + +**_Detect website content changes and perform meaningful actions - trigger notifications via Discord, Email, Slack, Telegram, API calls and many more._** + +_Live your data-life pro-actively._ + + +[Self-hosted web page change monitoring](https://changedetection.io?src=github) + + +### Target specific parts of the webpage using the Visual Selector tool. + +Available when connected to a playwright content fetcher (included as part of our subscription service) + +[Self-hosted web page change monitoring context difference ](https://changedetection.io?src=github) + +### Easily see what changed, examine by word, line, or individual character. + +[Self-hosted web page change monitoring context difference ](https://changedetection.io?src=github) + + +### Perform interactive browser steps + +Fill in text boxes, click buttons and more, setup your changedetection scenario. + +Using the **Browser Steps** configuration, add basic steps before performing change detection, such as logging into websites, adding a product to a cart, accept cookie logins, entering dates and refining searches. + +After **Browser Steps** have been run, then visit the **Visual Selector** tab to refine the content you're interested in. +Requires Playwright to be enabled. + + +### Example use cases + +- Products and services have a change in pricing +- _Out of stock notification_ and _Back In stock notification_ +- Monitor and track PDF file changes, know when a PDF file has text changes. +- Governmental department updates (changes are often only on their websites) +- New software releases, security advisories when you're not on their mailing list. +- Festivals with changes +- Discogs restock alerts and monitoring +- Realestate listing changes +- Know when your favourite whiskey is on sale, or other special deals are announced before anyone else +- COVID related news from government websites +- University/organisation news from their website +- Detect and monitor changes in JSON API responses +- JSON API monitoring and alerting +- Changes in legal and other documents +- Trigger API calls via notifications when text appears on a website +- Glue together APIs using the JSON filter and JSON notifications +- Create RSS feeds based on changes in web content +- Monitor HTML source code for unexpected changes, strengthen your PCI compliance +- You have a very sensitive list of URLs to watch and you do _not_ want to use the paid alternatives. (Remember, _you_ are the product) +- Get notified when certain keywords appear in Twitter search results +- Proactively search for jobs, get notified when companies update their careers page, search job portals for keywords. +- Get alerts when new job positions are open on Bamboo HR and other job platforms +- Website defacement monitoring +- Pokémon Card Restock Tracker / Pokémon TCG Tracker +- RegTech - stay ahead of regulatory changes, regulatory compliance + +_Need an actual Chrome runner with Javascript support? We support fetching via WebDriver and Playwright!_ + +#### Key Features + +- Lots of trigger filters, such as "Trigger on text", "Remove text by selector", "Ignore text", "Extract text", also using regular-expressions! +- Target elements with xPath(1.0) and CSS Selectors, Easily monitor complex JSON with JSONPath or jq +- Switch between fast non-JS and Chrome JS based "fetchers" +- Track changes in PDF files (Monitor text changed in the PDF, Also monitor PDF filesize and checksums) +- Easily specify how often a site should be checked +- Execute JS before extracting text (Good for logging in, see examples in the UI!) +- Override Request Headers, Specify `POST` or `GET` and other methods +- Use the "Visual Selector" to help target specific elements +- Configurable [proxy per watch](https://github.com/dgtlmoon/changedetection.io/wiki/Proxy-configuration) +- Send a screenshot with the notification when a change is detected in the web page diff --git a/apps/changedetection/metadata/logo.jpg b/apps/changedetection/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e0c8d25ef23a3a2bc0d79ead5755aab2ca491602 GIT binary patch literal 27909 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 C)HkRA literal 0 HcmV?d00001