{"id":16151157,"url":"https://github.com/regseb/gout","last_synced_at":"2025-03-18T19:31:09.745Z","repository":{"id":12054897,"uuid":"14641137","full_name":"regseb/gout","owner":"regseb","description":"Agrégateur d'Internet (flux RSS et tout le reste).","archived":false,"fork":false,"pushed_at":"2024-08-11T14:47:41.000Z","size":2850,"stargazers_count":4,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-10-11T00:54:45.054Z","etag":null,"topics":["aggregator","atom","feed","gout","javascript","news","reader","rss","scraper","widget"],"latest_commit_sha":null,"homepage":"https://github.com/regseb/gout","language":"JavaScript","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/regseb.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"buy_me_a_coffee":"regseb","custom":"https://www.paypal.me/sebastienregne"}},"created_at":"2013-11-23T11:24:52.000Z","updated_at":"2024-08-11T14:45:13.000Z","dependencies_parsed_at":"2024-02-03T08:22:43.381Z","dependency_job_id":"d6677fd2-6555-42f1-9d0b-54177ad0142e","html_url":"https://github.com/regseb/gout","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/regseb%2Fgout","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/regseb%2Fgout/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/regseb%2Fgout/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/regseb%2Fgout/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/regseb","download_url":"https://codeload.github.com/regseb/gout/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221716296,"owners_count":16868680,"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":["aggregator","atom","feed","gout","javascript","news","reader","rss","scraper","widget"],"created_at":"2024-10-10T00:54:46.457Z","updated_at":"2025-03-18T19:31:09.739Z","avatar_url":"https://github.com/regseb.png","language":"JavaScript","funding_links":["https://buymeacoffee.com/regseb","https://www.paypal.me/sebastienregne"],"categories":[],"sub_categories":[],"readme":"# Gout\n\n[![firefox][img-firefox]][link-firefox] [![build][img-build]][link-build]\n[![coverage][img-coverage]][link-coverage]\n\n\u003e Agrégateur d'Internet (flux RSS et tout le reste).\n\n## Description\n\nGout est une **extension** Firefox pour récupérer des informations sur Internet\n(flux RSS, résultats d'API, parsing de sites Internet...) et les afficher dans\nune page Web. Les [dashboards](#dashboard) sont ces pages Web avec du\n[YAML](https://yaml.org/ \"YAML Ain't Markup Language\") pour configurer chaque\n[widget](#widget). La configuration d'un widget comporte un [module](#module)\npour définir le format d'affichage ; et des [scrapers](#scraper) pour extraire\ndes données.\n\n## Démarrage rapide\n\n- Installez l'extension Gout depuis le [**Firefox Browser\n  Add-ons**][link-firefox].\n- Téléchargez et décompressez le zip\n  [`gout-dashboard-example.zip`](examples/gout-dashboard-example.zip).\n- Ouvrez le fichier `gout-dashboard-example/index.html` dans Firefox.\n- Ouvrez la popup de l'extension Gout et activez Gout pour la page courant.\n- Découvrez les widgets qui s'affichent.\n\n## Composants\n\n### Dashboard\n\nUn dashboard est une page Web qui contient des widgets. Elle doit importer le\nmoteur de rendu de Gout :\n`\"https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/script.js\"`.\n\nVoici un exemple de dashboard ayant quatre colonnes de widgets.\n\n```html\n\u003c!doctype html\u003e\n\u003chtml lang=\"fr-FR\"\u003e\n  \u003chead\u003e\n    \u003cmeta charset=\"utf-8\" /\u003e\n    \u003clink\n      href=\"https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/img/icon.svg\"\n      rel=\"shortcut icon\"\n    /\u003e\n    \u003ctitle\u003eGout\u003c/title\u003e\n    \u003cscript\n      src=\"https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/script.js\"\n      type=\"module\"\n    \u003e\u003c/script\u003e\n    \u003cstyle\u003e\n      body {\n        display: flex;\n      }\n      div {\n        display: flex;\n        flex-direction: column;\n      }\n    \u003c/style\u003e\n  \u003c/head\u003e\n  \u003cbody\u003e\n    \u003cdiv style=\"width: 30%;\"\u003e\n      \u003cscript type=\"application/yaml\"\u003e\n        # ...\n      \u003c/script\u003e\n      \u003cscript type=\"application/yaml\"\u003e\n        # ...\n      \u003c/script\u003e\n      \u003c!-- ... --\u003e\n    \u003c/div\u003e\n    \u003cdiv style=\"width: 30%;\"\u003e\n      \u003cscript type=\"application/yaml\"\u003e\n        # ...\n      \u003c/script\u003e\n    \u003c/div\u003e\n    \u003cdiv style=\"width: 20%;\"\u003e\n      \u003cscript type=\"application/yaml\"\u003e\n        # ...\n      \u003c/script\u003e\n    \u003c/div\u003e\n    \u003cdiv style=\"width: 20%;\"\u003e\n      \u003cscript type=\"application/yaml\"\u003e\n        # ...\n      \u003c/script\u003e\n      \u003cscript type=\"application/yaml\"\u003e\n        # ...\n      \u003c/script\u003e\n    \u003c/div\u003e\n  \u003c/body\u003e\n\u003c/html\u003e\n```\n\n### Widget\n\nUn widget est un bloc du dashboard. C'est un élément `\u003cscript\u003e` (avec le\n`type=\"application/yaml\"`). Le widget sera ajouté dans le DOM de la page au même\nendroit que l'élément `\u003cscript\u003e`. Le contenu du `\u003cscript\u003e` est au format\n[YAML](https://yaml.org/ \"YAML Ain't Markup Language\") avec les propriétés :\n\n```yaml\nmodule:\n  url: # L'URL du fichier JavaScript du module.\n  options: # Les options du module.\n  scrapers:\n    - url: # L'URL du fichier JavaScript du premier scraper.\n      options: # Les options du premier scraper.\n    - url: # L'URL du fichier JavaScript du deuxième scraper.\n      options: # Les options du deuxième scraper.\n    # ...\n```\n\nCet exemple de widget récupère les dernières publications du flux RSS du site\n[LinuxFr.org](https://linuxfr.org/) et il les affiche sous forme d'une liste de\nliens.\n\n```html\n\u003cscript type=\"application/yaml\"\u003e\n  module:\n    url: \"https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js\"\n    options:\n      cron: \"0 * * * *\"\n      max: 5\n      color: \"#ffc107\"\n    scrapers:\n      - url: \"https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js\"\n        options:\n          url: \"https://linuxfr.org/news.atom\"\n\u003c/script\u003e\n```\n\nVous pouvez aussi importer des widgets directement dans votre dashboard. Il faut\najouter un élément `\u003cscript\u003e` avec l'attribut `src` (ainsi que le `type`). Dans\nl'exemple ci-dessous, le widget permettant d'écouter la radio\n[Fip](https://github.com/regseb/gout-regseb/tree/main/src/widget/radiofrance#readme)\nest intégré dans le dashboard :\n\n```html\n\u003cscript\n  type=\"application/yaml\"\n  src=\"https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/widget/radiofrance/fip.yaml\"\n\u003e\u003c/script\u003e\n```\n\nSi vous voulez des widgets, vous pouvez chercher\n[_gout-widget_](https://github.com/search?q=%22+gout-widget%22+language%3AMarkdown\u0026type=Code\u0026l=Markdown)\ndans GitHub.\n\n### Module\n\nLes modules sont les composants des widgets définissant comment les données sont\naffichées (une liste de liens, une image...). La configuration d'un module a\ntrois propriétés :\n\n- `url` : L'URL du fichier JavaScript du module (par exemple pour le module\n  [_list_](src/module/list#readme) :\n  `\"https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js\"`).\n- `options` : Les options du module (qui sont spécifiques pour chaque module).\n- `scrapers` : La liste des [scrapers](#scraper) associés au module.\n\nDans cet exemple, le module est une liste (avec au maximum `5` éléments)\naffichée dans un bloc bleu `#2196f3` et actualisée toutes les dix minutes\n[`*/10 * * * *`](https://crontab.guru/#*/10_*_*_*_*).\n\n```html\n\u003cscript type=\"application/yaml\"\u003e\n  module:\n    url: \"https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js\"\n    options:\n      cron: \"*/10 * * * *\"\n      max: 5\n      color: \"#2196f3\"\n    scrapers: # ...\n\u003c/script\u003e\n```\n\nSi vous voulez des modules, vous pouvez chercher\n[_gout-module_](https://github.com/search?q=%22+gout-module%22+language%3AMarkdown\u0026type=Code\u0026l=Markdown)\ndans GitHub.\n\n### Scraper\n\nLes scrapers permettent d'extraire des données (flux RSS, parsing de page...) et\nde les transmettre à un module dans un format spécifique. Plusieurs scrapers\npeuvent être associés avec un module. Dans la configuration du widget, les\nscrapers sont définis dans une liste ou chaque élément a deux propriétés :\n\n- `url` : L'URL du fichier JavaScript du scraper (par exemple pour le scraper\n  [_list/rss_](src/scraper/list/rss#readme) :\n  `\"https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js\"`).\n- `options` : Les options du scraper (qui sont spécifiques pour chaque scraper).\n\nDans cet exemple, deux scrapers sont définis pour récupérer les dernières vidéos\ndes chaines YouTube [ARTE Cinema](https://www.youtube.com/@artecinemafr) et\n[ARTE Séries](https://www.youtube.com/@arteseries).\n\n```html\n\u003cscript type=\"application/yaml\"\u003e\n  module:\n    url: # ...\n    options: # ...\n    scrapers\n      - url: \"https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js\"\n        options:\n          url: \"https://www.youtube.com/feeds/videos.xml?channel_id=UClo03hULFynpoX3w1Jv7fhw\"\n      - url: \"https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js\"\n        options:\n          url: \"https://www.youtube.com/feeds/videos.xml?channel_id=UCzaf-8cAEiXfynukcmV5MXw\"\n\u003c/script\u003e\n```\n\nSi vous voulez des scrapers, vous pouvez chercher\n[_gout-scraper_](https://github.com/search?q=%22+gout-scraper%22+language%3AMarkdown\u0026type=Code\u0026l=Markdown)\ndans GitHub.\n\n[img-firefox]:\n  https://img.shields.io/amo/v/gout.svg?label=add-on\u0026logo=firefox-browser\u0026logoColor=whitesmoke\n[img-build]:\n  https://img.shields.io/github/actions/workflow/status/regseb/gout/ci.yml?branch=main\u0026logo=github\u0026logoColor=whitesmoke\n[img-coverage]:\n  https://img.shields.io/endpoint?label=coverage\u0026url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fregseb%2Fgout%2Fmain\n[link-firefox]: https://addons.mozilla.org/addon/gout/\n[link-build]:\n  https://github.com/regseb/gout/actions/workflows/ci.yml?query=branch%3Amain\n[link-coverage]:\n  https://dashboard.stryker-mutator.io/reports/github.com/regseb/gout/main\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fregseb%2Fgout","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fregseb%2Fgout","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fregseb%2Fgout/lists"}