{"id":13414023,"url":"https://github.com/circa10a/go-aws-news","last_synced_at":"2026-02-21T06:16:30.948Z","repository":{"id":44402819,"uuid":"232447444","full_name":"circa10a/go-aws-news","owner":"circa10a","description":"Go app + library to fetch what's new from AWS","archived":false,"fork":false,"pushed_at":"2025-08-11T02:31:31.000Z","size":265,"stargazers_count":17,"open_issues_count":0,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-10-20T05:49:35.235Z","etag":null,"topics":["aws","aws-news","go","go-library","hacktoberfest","notifications"],"latest_commit_sha":null,"homepage":"https://caleblemoine.dev/go-aws-news/","language":"Go","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/circa10a.png","metadata":{"files":{"readme":"README.md","changelog":"news/announcements.go","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-01-08T00:59:39.000Z","updated_at":"2025-08-11T02:31:19.000Z","dependencies_parsed_at":"2024-06-19T09:44:22.097Z","dependency_job_id":"789bafa4-f9f0-424c-a480-21d9a19f68f8","html_url":"https://github.com/circa10a/go-aws-news","commit_stats":null,"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"purl":"pkg:github/circa10a/go-aws-news","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/circa10a%2Fgo-aws-news","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/circa10a%2Fgo-aws-news/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/circa10a%2Fgo-aws-news/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/circa10a%2Fgo-aws-news/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/circa10a","download_url":"https://codeload.github.com/circa10a/go-aws-news/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/circa10a%2Fgo-aws-news/sbom","scorecard":{"id":283093,"data":{"date":"2025-08-11","repo":{"name":"github.com/circa10a/go-aws-news","commit":"00296764fbef4576b910374b4d2fcdbc2e578f3e"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.9,"checks":[{"name":"Maintained","score":0,"reason":"1 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":1,"reason":"Found 4/22 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/comment.yaml:1","Warn: no topLevel permission defined: .github/workflows/release.yaml:1","Warn: no topLevel permission defined: .github/workflows/tag.yaml:1","Warn: no topLevel permission defined: .github/workflows/test.yaml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/comment.yaml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/circa10a/go-aws-news/comment.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yaml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/circa10a/go-aws-news/release.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yaml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/circa10a/go-aws-news/release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yaml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/circa10a/go-aws-news/release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yaml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/circa10a/go-aws-news/release.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tag.yaml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/circa10a/go-aws-news/tag.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tag.yaml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/circa10a/go-aws-news/tag.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tag.yaml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/circa10a/go-aws-news/tag.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tag.yaml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/circa10a/go-aws-news/tag.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tag.yaml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/circa10a/go-aws-news/tag.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tag.yaml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/circa10a/go-aws-news/tag.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yaml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/circa10a/go-aws-news/test.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yaml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/circa10a/go-aws-news/test.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/circa10a/go-aws-news/test.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yaml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/circa10a/go-aws-news/test.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/circa10a/go-aws-news/test.yaml/main?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1","Info:   0 out of   6 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  10 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release.yaml:9"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v1.10.1 not signed: https://api.github.com/repos/circa10a/go-aws-news/releases/238888429","Warn: release artifact v1.10.0 not signed: https://api.github.com/repos/circa10a/go-aws-news/releases/161574086","Warn: release artifact v1.9.2 not signed: https://api.github.com/repos/circa10a/go-aws-news/releases/161573639","Warn: release artifact v1.9.1 not signed: https://api.github.com/repos/circa10a/go-aws-news/releases/93881471","Warn: release artifact v1.9.0 not signed: https://api.github.com/repos/circa10a/go-aws-news/releases/71648553","Warn: release artifact v1.10.1 does not have provenance: https://api.github.com/repos/circa10a/go-aws-news/releases/238888429","Warn: release artifact v1.10.0 does not have provenance: https://api.github.com/repos/circa10a/go-aws-news/releases/161574086","Warn: release artifact v1.9.2 does not have provenance: https://api.github.com/repos/circa10a/go-aws-news/releases/161573639","Warn: release artifact v1.9.1 does not have provenance: https://api.github.com/repos/circa10a/go-aws-news/releases/93881471","Warn: release artifact v1.9.0 does not have provenance: https://api.github.com/repos/circa10a/go-aws-news/releases/71648553"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 16 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T16:27:07.414Z","repository_id":44402819,"created_at":"2025-08-17T16:27:07.414Z","updated_at":"2025-08-17T16:27:07.414Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29675076,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T05:54:28.202Z","status":"ssl_error","status_checked_at":"2026-02-21T05:53:42.585Z","response_time":107,"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":["aws","aws-news","go","go-library","hacktoberfest","notifications"],"created_at":"2024-07-30T20:01:55.521Z","updated_at":"2026-02-21T06:16:30.932Z","avatar_url":"https://github.com/circa10a.png","language":"Go","funding_links":[],"categories":["第三方api","Go","Third-party APIs","第三方API`第三方API 汇总`","Utility","第三方API"],"sub_categories":["实用程序/Miscellaneous","Utility/Miscellaneous","HTTP Clients","Fail injection","查询语"],"readme":"# go-aws-news \u003c!-- omit in toc --\u003e\n\nFetch what's new from AWS and send out notifications on social sites.\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://i.imgur.com/HZLXzzz.jpg\" width=\"700\" /\u003e\u003c/p\u003e\n\n![Build Status](https://github.com/circa10a/go-aws-news/workflows/GoReleaser/badge.svg)\n[![PkgGoDev](https://pkg.go.dev/badge/github.com/circa10a/go-aws-news)](https://pkg.go.dev/github.com/circa10a/go-aws-news/news?tab=doc)\n[![Go Report Card](https://goreportcard.com/badge/github.com/circa10a/go-aws-news)](https://goreportcard.com/report/github.com/circa10a/go-aws-news)\n![GitHub release (latest by date)](https://img.shields.io/github/v/release/circa10a/go-aws-news?style=plastic)\n[![codecov](https://codecov.io/gh/circa10a/go-aws-news/branch/master/graph/badge.svg?token=1OLAEVOAIO)](https://codecov.io/gh/circa10a/go-aws-news)\n\n- [App Install](#app-install)\n  - [Notification Providers](#notification-providers)\n  - [Install Options](#install-options)\n    - [Install With Crontab](#install-with-crontab)\n    - [Install As Kubernetes CronJob](#install-as-kubernetes-cronjob)\n    - [Install As AWS Lambda](#install-as-aws-lambda)\n- [Module Install](#module-install)\n- [Module Usage](#module-usage)\n  - [Get Today's news](#get-todays-news)\n  - [Get Yesterday's news](#get-yesterdays-news)\n  - [Get all news for the month](#get-all-news-for-the-month)\n  - [Get from a previous month](#get-from-a-previous-month)\n  - [Get from a previous year](#get-from-a-previous-year)\n  - [Print out announcements](#print-out-announcements)\n  - [Loop over news data](#loop-over-news-data)\n  - [Limit news results count](#limit-news-results-count)\n  - [Get news as JSON](#get-news-as-json)\n  - [Get news as HTML](#get-news-as-html)\n  - [Get news about a specific product](#get-news-about-a-specific-product)\n- [Google Assistant](#google-assistant)\n- [Development](#development)\n  - [Test](#test)\n\n## App Install\n\n`go-aws-news` can be executed as an application that sends out notifications to social sites like\n[Discord]. To configure providers, modify the [config.yaml](config.yaml) file to __enable__ a\nprovider.\n\n`go-aws-news` is designed to be run on a schedule, once a day (displaying the previous day's AWS\nNews). See the [install options](#install-options) for examples on how to install and run.\n\n### Notification Providers\n\nCurrently supported providers:\n\n- [Discord](providers/discord/README.md)\n- [Rocket.Chat](providers/rocketchat/README.md)\n- [Slack](providers/slack/README.md)\n- [SMTP (email)](providers/smtp/README.md)\n- [Yammer](providers/yammer/README.md)\n\n### Install Options\n\n#### Install With Crontab\n\nThe simplest way to run `go-aws-news` is via [crontab](http://man7.org/linux/man-pages/man5/crontab.5.html).\n\nType `crontab -e` on Mac or Linux and add a line:\n\n```shell\n# Binary\n0 2 * * * /path/to/go-aws-news-binary\n# Docker\n0 14 * * * docker run -d --rm --name aws-news \\\n  -v your_config.yaml:/config.yaml \\\n  circa10a/go-aws-news\n```\n\n\u003eThe above example will execute `go-aws-news` at `2PM UTC` (8AM CST) each day.\n\n#### Install As Kubernetes CronJob\n\n`go-aws-news` can be run as a [CronJob][k8s-cronjob] in  a Kubernetes cluster.\n\nExample `cronjob.yaml`:\n\n```yaml\napiVersion: batch/v1beta1\nkind: CronJob\nmetadata:\n  name: go-aws-news\nspec:\n  schedule: \"0 14 * * *\"\n  jobTemplate:\n    spec:\n      template:\n        spec:\n          containers:\n          - name: go-aws-news\n            image: circa10a/go-aws-news\n            volumeMounts:\n            - name: config\n              mountPath: /config.yaml\n              subPath: config.yaml\n          volumes:\n          - name: config\n            configMap:\n              name: awsnews-config\n          restartPolicy: OnFailure\n```\n\nThe [ConfigMap] can be created from the [config.yaml](/config.yaml) file itself:\n\n```shell\nkubectl create configmap awsnews-config --from-file=config.yaml\n```\n\nTo apply the `cronjob.yaml` example above:\n\n```shell\nkubectl apply -f cronjob.yaml\n```\n\n#### Install As AWS Lambda\n\n1. Setup provider config in AWS SSM Parameter Store:\n\n    ```shell\n    aws ssm put-parameter --type SecureString --name go-aws-news-config --value \"$(cat config.yaml)\"\n    ```\n\n    \u003e**Note:** Overriding the name `go-aws-news-config` will require an environment variable on\n    the lambda function: `GO_AWS_NEWS_CONFIG_NAME`.\n\n1. Create the Lambda execution role and add permissions:\n\n    ```shell\n    aws iam create-role --role-name go-aws-news-lambda-ex --assume-role-policy-document '{\"Version\": \"2012-10-17\",\"Statement\": [{ \"Effect\": \"Allow\", \"Principal\": {\"Service\": \"lambda.amazonaws.com\"}, \"Action\": \"sts:AssumeRole\"}]}'\n\n    aws iam attach-role-policy --role-name go-aws-news-lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole\n    aws iam attach-role-policy --role-name go-aws-news-lambda-ex --policy-arn arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess\n    ```\n\n1. Create the lambda function:\n\n    ```shell\n    make lambda-package\n    aws lambda create-function --function-name go-aws-news --zip-file fileb://bin/lambda.zip --runtime go1.x --handler awsnews \\\n      --role $(aws iam get-role --role-name go-aws-news-lambda-ex --query Role.Arn --output text)\n    ```\n\n1. Create a schedule for the lambda:\n\n    ```shell\n    aws events put-rule --schedule-expression \"cron(0 14 * * ? *)\" --name go-aws-news-cron\n\n    LAMBDA_ARN=$(aws lambda get-function --function-name go-aws-news --query Configuration.FunctionArn)\n    aws events put-targets --rule go-aws-news-cron --targets \"Id\"=\"1\",\"Arn\"=$LAMBDA_ARN\n    ```\n\n1. Allow the lambda function to be invoked by the schedule rule:\n\n    ```shell\n    EVENT_ARN=$(aws events describe-rule --name go-aws-news-cron --query Arn --output text)\n\n    aws lambda add-permission --function-name go-aws-news --statement-id eventbridge-cron \\\n      --action 'lambda:InvokeFunction' --principal events.amazonaws.com --source-arn $EVENT_ARN\n    ```\n\n## Module Install\n\n`go-aws-news` can be installed as a module for use in other Go applications:\n\n```shell\ngo get -u \"github.com/circa10a/go-aws-news/news\"\n```\n\n## Module Usage\n\nMethods return a slice of structs which include the announcement title, a link, and the date it was posted as well an error. This allows you to manipulate the data in whichever way you please, or simply use `Print()` to print a nice ASCII table to the console.\n\n### Get Today's news\n\n```go\npackage main\n\nimport (\n  awsnews \"github.com/circa10a/go-aws-news/news\"\n)\n\nfunc main() {\n    news, err := awsnews.Today()\n    if err != nil {\n      // Handle error\n    }\n    news.Print()\n}\n```\n\n### Get Yesterday's news\n\n```go\nnews, _ := awsnews.Yesterday()\n```\n\n### Get all news for the month\n\n```go\nnews, _ := awsnews.ThisMonth()\n```\n\n### Get from a previous month\n\n```go\n// Custom timeframe(June 2019)\nnews, err := awsnews.Fetch(2019, 06)\n```\n\n### Get from a previous year\n\n```go\n// Custom timeframe(2017)\nnews, err := awsnews.FetchYear(2017)\n```\n\n### Print out announcements\n\n```go\nnews, _ := awsnews.ThisMonth()\nnews.Print()\n// Console output\n// +--------------------------------+--------------+\n// |          ANNOUNCEMENT          |     DATE     |\n// +--------------------------------+--------------+\n// | Amazon Cognito now supports    | Jan 10, 2020 |\n// | CloudWatch Usage Metrics       |              |\n// +--------------------------------+--------------+\n// | Introducing Workload Shares in | Jan 10, 2020 |\n// | AWS Well-Architected Tool      |              |\n// +--------------------------------+--------------+\n//\n```\n\n### Loop over news data\n\n```go\n// Loop slice of stucts of announcements\n// For your own data manipulation\nnews, _ := awsnews.Fetch(time.Now().Year(), int(time.Now().Month()))\nfor _, v := range news {\n    fmt.Printf(\"Title: %v\\n\", v.Title)\n    fmt.Printf(\"Link: %v\\n\", v.Link)\n    fmt.Printf(\"Date: %v\\n\", v.PostDate)\n}\n```\n\n### Limit news results count\n\n```go\nnews, _ := awsnews.ThisMonth()\n// Last 10 news items of the month\nnews.Last(10).Print()\n```\n\n### Get news as JSON\n\n```go\nnews, _ := awsnews.ThisMonth()\njson, jsonErr := news.JSON()\nif jsonErr != nil {\n    log.Fatal(err)\n}\nfmt.Println(string(json))\n```\n\n### Get news as HTML\n\n```go\nnews, _ := awsnews.ThisMonth()\nhtml := news.HTML()\nfmt.Println(html)\n```\n\n### Get news about a specific product\n\n```go\nnews, err := awsnews.Fetch(2019, 12)\nif err != nil {\n    fmt.Println(err)\n} else {\n    news.Filter([]string{\"EKS\", \"ECS\"}).Print()\n}\n```\n\n## Google Assistant\n\n* [Source Code](https://github.com/circa10a/google-home-aws-news)\n\n## Development\n\n### Test\n\n```shell\n# Unit/Integration tests\nmake\n# Get code coverage\nmake coverage\n```\n\n[discord]:https://discordapp.com/\n[k8s-cronjob]:https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/\n[configmap]:https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcirca10a%2Fgo-aws-news","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcirca10a%2Fgo-aws-news","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcirca10a%2Fgo-aws-news/lists"}