{"id":25543454,"url":"https://github.com/nag763/mydnr","last_synced_at":"2026-05-10T05:55:15.652Z","repository":{"id":276361000,"uuid":"929058084","full_name":"nag763/mydnr","owner":"nag763","description":"A simple RSS feed news aggregator powered by ChatGPT","archived":false,"fork":false,"pushed_at":"2025-02-09T13:33:40.000Z","size":223,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-09T14:19:38.676Z","etag":null,"topics":["azure","azure-functions","github-actions","gpt-4","python","rss","rss-aggregator"],"latest_commit_sha":null,"homepage":"","language":"Python","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/nag763.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2025-02-07T18:21:37.000Z","updated_at":"2025-02-09T13:33:43.000Z","dependencies_parsed_at":"2025-02-07T19:36:45.191Z","dependency_job_id":null,"html_url":"https://github.com/nag763/mydnr","commit_stats":null,"previous_names":["nag763/rssfeedaggregator","nag763/mydnr"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nag763%2Fmydnr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nag763%2Fmydnr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nag763%2Fmydnr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nag763%2Fmydnr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nag763","download_url":"https://codeload.github.com/nag763/mydnr/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239793062,"owners_count":19697893,"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":["azure","azure-functions","github-actions","gpt-4","python","rss","rss-aggregator"],"created_at":"2025-02-20T07:19:31.936Z","updated_at":"2026-05-10T05:55:15.642Z","avatar_url":"https://github.com/nag763.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mydnr (My daily news recap)\n\n\u003cdiv align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/nag763/rssfeedaggregator/refs/heads/master/.github/preview.webp\"\u003e\u003c/img\u003e\u003c/div\u003e\n\n## Purpose\n\nThe purpose of this project is to create an RSS news aggregator that summarizes the latest tech news using GPT-4.0 mini. This tool collects news from various RSS feeds and provides concise summaries to keep you updated with the most important information in the tech world.\n\nIt actually helps me to win time by avoiding researchs on several blogs to get the latest news, while having a summary per mail everyday is pretty handful.\n\nThere was also a learning purpose behind in getting to learn the Azure ecosystem, as well as getting to know OpenAI's API features and purposes.\n\n## Features\n\n- Aggregates news from multiple RSS feeds\n- Uses GPT-4.0 mini to generate summaries\n- Provides a user-friendly interface to browse news\n\n## Flow\n\n```mermaid\ngraph TB\n    style Start fill:#0000FF,stroke:#0000FF,stroke-width:2px\n    style RSSFeeds fill:#FFA500\n    style CheckArticles fill:#FFA500\n    style OpenAIRecap fill:#008000\n    style SendEmail fill:#800080\n    style ClientInteraction fill:#0000FF,stroke:#0000FF,stroke-width:2px\n    style HTTPTrigger fill:#FF0000\n    style OpenAIHighlight fill:#008000\n    style ReturnResponse fill:#800080\n    style OriginalLink fill:#808080,stroke:#000000\n\n    Start(\"Start: Scheduled Azure Function (6 AM)\") --\u003e RSSFeeds(\"Fetch RSS Feeds\")\n    RSSFeeds --\u003e CheckArticles(\"Get articles from previous day\")\n    CheckArticles --\u003e OpenAIRecap(\"Send content to OpenAI API (short recap)\")\n    OpenAIRecap --\u003e SendEmail(\"Send email with short recap\\n(Azure Email Service)\")\n    SendEmail --\u003e ClientInteraction(\"Client Interaction\")\n    ClientInteraction --\u003e HTTPTrigger(\"HTTP Trigger: Request long recap\")\n    ClientInteraction --\u003e OriginalLink(\"Link to original article\")\n    HTTPTrigger --\u003e OpenAIHighlight(\"OpenAI API: Generate long recap \u0026 highlights\")\n    OpenAIHighlight --\u003e ReturnResponse(\"Return long recap\")\n\n\n```\n\n\n* Blue: Represents the starting point and user interaction points.\n* Orange: Steps related to fetching and processing RSS feeds.\n* Green: Interactions with OpenAI for generating recaps and highlights.\n* Purple: Steps involving email and recap responses.\n* Gray: Represents static links to the original article.\n* Red: Highlights the HTTP-triggered function for generating a long recap.\n\nEvery day at 6 AM, an Azure function is triggered to fetch content from a list of RSS feeds. It collects articles that were published the previous day, then sends this data to OpenAI's API to generate a short recap.\n\nOnce the recap is generated, it is emailed to the client using Azure's mailing functionality. If the client is interested in a more detailed recap, they can request it by clicking a button. This action triggers an HTTP Azure function, which sends the full article to OpenAI for a longer recap and highlights.\n\nThe long recap is then returned as the response from the HTTP function. Alternatively, if the client prefers, they can follow a link to the original article instead of receiving a recap.\n\n## Installation\n\n1. Clone the repository:\n    ```bash\n    git clone https://github.com/nag763/mydnr\n    ```\n2. Navigate to the project directory:\n    ```bash\n    cd mydnr\n    ```\n3. Install the required dependencies:\n    ```bash\n    pip install\n    ```\n\n## Usage\n\n```bash\npython main.py\n```\n\n## How it works\n\n1. The first step is basicly about fetching the RSS feeds in the `RSS_FEEDS` environment variable. These are CSV separated such as : `https://feedprovider1/rss,https://feedprovider2/rss`\n2. Once these feeds are aggregated into a JSON, this JSON is sent to OpenAI to have a summary generated given the plot.\n3. Given OpenAI's response, a mail will be sent to the mail precised in `MAIL_TO` environment variable.\n4. The mail is received by the recipient.\n\n## Contributing\n\nContributions are welcome! Please fork the repository and submit a pull request.\n\n## License\n\nThis project is licensed under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnag763%2Fmydnr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnag763%2Fmydnr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnag763%2Fmydnr/lists"}