{"id":15102681,"url":"https://github.com/desertthunder/weather","last_synced_at":"2026-01-18T19:01:40.015Z","repository":{"id":250632365,"uuid":"834853422","full_name":"desertthunder/weather","owner":"desertthunder","description":"Go powered geocoding \u0026 weather forecasts from the command line.","archived":false,"fork":false,"pushed_at":"2024-08-03T08:06:16.000Z","size":1461,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-05T11:42:20.509Z","etag":null,"topics":["bubbletea","cli","go","golang","json","national-weather-service","nominatim","playwright","python","urfave-cli"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/desertthunder.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":"2024-07-28T15:05:23.000Z","updated_at":"2024-10-06T02:35:14.000Z","dependencies_parsed_at":"2024-07-29T01:52:10.099Z","dependency_job_id":"b6964ccf-b1cf-4123-b1a4-12b8a83ee696","html_url":"https://github.com/desertthunder/weather","commit_stats":{"total_commits":22,"total_committers":1,"mean_commits":22.0,"dds":0.0,"last_synced_commit":"d34252d9412d46e0a8c053e7c1897dfaa1a624d0"},"previous_names":["desertthunder/weather"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/desertthunder/weather","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desertthunder%2Fweather","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desertthunder%2Fweather/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desertthunder%2Fweather/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desertthunder%2Fweather/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/desertthunder","download_url":"https://codeload.github.com/desertthunder/weather/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desertthunder%2Fweather/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28548944,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T14:59:57.589Z","status":"ssl_error","status_checked_at":"2026-01-18T14:59:46.540Z","response_time":98,"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":["bubbletea","cli","go","golang","json","national-weather-service","nominatim","playwright","python","urfave-cli"],"created_at":"2024-09-25T19:04:35.140Z","updated_at":"2026-01-18T19:01:39.986Z","avatar_url":"https://github.com/desertthunder.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Weather\n\nA weather application made on top of the weather.gov and Nominatim/OpenStreetMap\nAPIs, written in Go (v1.22.4)\n\n![Demo Webm](assets/demo.gif)\n\n---\n\n![Interactive Webm](assets/interactive.gif)\n\n---\n\nThe demo video is generated using `vhs`.\n\nSee [demo.tape](assets/demo.tape) or [interactive.tape](assets/interactive.tape)\nfor the exact commands seen above. For the extended video, see [here](assets/extended.mp4).\n\n## Usage\n\n- `geocast` or `geocast me` to get the weather forecast for the current IP address.\n- `geocast [city]` to get the weather forecast for a city.\n- `geocast [lat,lon]` to get the weather forecast for a latitude and longitude.\n- `geocast --interactive` to get the weather forecast for the current IP address in an interactive mode.\n\n---\n\n- `geocast geocode` or `geocast g` to geocode a city.\n- `geocast geocode [city]` to geocode a city.\n- `geocast geocode [lat,lon]` to reverse geocode a latitude and longitude.\n- `geocast geocode --interactive` to geocode a city in an interactive mode.\n\n---\n\n- `geocast forecast` or `geocast f` to get the weather forecast for the current IP address.\n- `geocast forecast [city]` to get the weather forecast for a city.\n- `geocast forecast [lat,lon]` to get the weather forecast for a latitude and longitude.\n- `geocast forecast --interactive` to get the weather forecast for the current IP address in an interactive mode.\n\n## Data Sources\n\n1. Geocoding\n   - ipinfo\n   - Nominatim/OpenStreetMap (osm)\n\n2. Weather\n   - weather.gov (US)\n\n### Sample US Data\n\n| City        | State | Latitude | Longitude |\n| ----------- | ----- | -------- | --------- |\n| Seattle     | WA    | 47.6062  | -122.3321 |\n| Austin      | TX    | 30.2672  | -97.7431  |\n| Cleveland   | OH    | 41.4993  | -81.6944  |\n| Hartford    | CT    | 41.7658  | -72.6734  |\n| Boston      | MA    | 42.3601  | -71.0589  |\n| Los Angeles | CA    | 34.0522  | -118.2437 |\n| Pittsburgh  | PA    | 40.4406  | -79.9959  |\n\n## Test Coverage\n\nThis project leverages a few tools executed by `coverage.py` to generate the\nbelow coverage image, namely playwright and the built-in `go tool cover` command.\n\n### Updating Test Coverage\n\nTo ensure that you're able to generate the coverage image, you'll need to install\nthe `playwright` package and install the `chromium` browser.\n\nSetup the virtual environment and install the dependencies:\n\n```bash\nvirtualenv .venv\nsource .venv/bin/activate\npip install -r requirements.txt\n```\n\nThen, install `playwright` with firefox and chromium:\n\n```bash\nplaywright install\n```\n\n### More Thoughts\n\nTo run the tests, run `make test` from the root directory. Much of the tests\nrely on capturing stdout and checking for expected output. The `test/helper.go`\nfile contains a helper function that captures stdout and returns the output as a\nstring. It can be a buffer but I prefer to use a string because it's easier to\nwork with (e.g., `strings.Contains(output, want)`).\n\n### Viewing Coverage\n\nClick the \"Coverage Report\" button below to view the coverage report. I just did this for fun. Browser automation with playwright is super cool and I quite like the design of [Pico](https://picocss.com/) and\nits ease of use.\n\n\u003cdetails\u003e\n   \u003csummary\u003e\n      \u003cstrong\u003eReport\u003c/strong\u003e\n   \u003c/summary\u003e\n\n   ![Coverage Report](assets/coverage.png)\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdesertthunder%2Fweather","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdesertthunder%2Fweather","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdesertthunder%2Fweather/lists"}