{"id":64726,"name":"NDBC API","description":"A Python API for retrieving meteorological and oceanographic data from the National Data Buoy Center.","url":"https://github.com/cdjellen/ndbc-api","last_synced_at":"2026-04-20T09:02:39.639Z","repository":{"id":53884693,"uuid":"496301776","full_name":"CDJellen/ndbc-api","owner":"CDJellen","description":"A Python API for retrieving meteorological and oceanographic data from the National Data Buoy Center (NDBC).","archived":false,"fork":false,"pushed_at":"2026-03-08T22:30:54.000Z","size":35812,"stargazers_count":26,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-08T11:06:26.147Z","etag":null,"topics":["climate-data","data-science","noaa","python3"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/ndbc-api/","language":"Jupyter Notebook","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/CDJellen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"2022-05-25T16:05:23.000Z","updated_at":"2026-04-03T06:53:09.000Z","dependencies_parsed_at":"2024-11-23T01:20:39.337Z","dependency_job_id":"e24e7eea-75a6-46d9-91a4-9a6e6441b46d","html_url":"https://github.com/CDJellen/ndbc-api","commit_stats":{"total_commits":106,"total_committers":2,"mean_commits":53.0,"dds":"0.28301886792452835","last_synced_commit":"cd920f88b09c5cb4189dbb4f9373e075480be041"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/CDJellen/ndbc-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CDJellen%2Fndbc-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CDJellen%2Fndbc-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CDJellen%2Fndbc-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CDJellen%2Fndbc-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CDJellen","download_url":"https://codeload.github.com/CDJellen/ndbc-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CDJellen%2Fndbc-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31584816,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"online","status_checked_at":"2026-04-09T02:00:06.848Z","response_time":112,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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"}},"owner":{"login":"CDJellen","name":"Chris Jellen","uuid":"64814231","kind":"user","description":"Cloud software engineering at Microsoft.\r\n\r\nCross-team data solutions focused on observability, reliability, strategic planning, and automation.","email":"","website":"cdjellen.com","location":"Seattle, WA","twitter":null,"company":"@Microsoft","icon_url":"https://avatars.githubusercontent.com/u/64814231?u=c278c4c6fa8a93417c54df64b65d75f2372780c9\u0026v=4","repositories_count":5,"last_synced_at":"2023-05-05T07:45:47.738Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/CDJellen","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2023-05-05T07:45:47.745Z","updated_at":"2023-05-05T07:45:47.745Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CDJellen","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CDJellen/repositories"},"packages":[{"id":5137352,"name":"ndbc-api","ecosystem":"pypi","description":"A Python API for the National Data Buoy Center.","homepage":"https://github.com/cdjellen/ndbc-api","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/cdjellen/ndbc-api","keywords_array":["ndbc","python3","api","oceanography","buoy","atmospheric","async","aiohttp"],"namespace":null,"versions_count":27,"first_release_published_at":"2022-08-06T00:27:34.000Z","latest_release_published_at":"2022-08-06T00:27:34.000Z","latest_release_number":"0.0.2","last_synced_at":"2026-04-13T06:11:30.079Z","created_at":"2022-08-06T02:52:26.098Z","updated_at":"2026-04-13T11:33:59.558Z","registry_url":"https://pypi.org/project/ndbc-api/","install_command":"pip install ndbc-api --index-url https://pypi.org/simple","documentation_url":"https://ndbc-api.readthedocs.io/","metadata":{"funding":null,"documentation":null,"classifiers":["Development Status :: 5 - Production/Stable","Intended Audience :: Developers","License :: OSI Approved :: MIT License","Programming Language :: Python :: 3","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.14","Programming Language :: Python :: 3.9","Topic :: Software Development :: Build Tools"],"normalized_name":"ndbc-api","project_status":null},"repo_metadata":{"id":53884693,"uuid":"496301776","full_name":"CDJellen/ndbc-api","owner":"CDJellen","description":"A Python API for retrieving meteorological and oceanographic data from the National Data Buoy Center (NDBC).","archived":false,"fork":false,"pushed_at":"2026-03-08T22:30:54.000Z","size":35812,"stargazers_count":26,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-08T11:06:26.147Z","etag":null,"topics":["climate-data","data-science","noaa","python3"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/ndbc-api/","language":"Jupyter Notebook","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/CDJellen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"2022-05-25T16:05:23.000Z","updated_at":"2026-04-03T06:53:09.000Z","dependencies_parsed_at":"2024-11-23T01:20:39.337Z","dependency_job_id":"e24e7eea-75a6-46d9-91a4-9a6e6441b46d","html_url":"https://github.com/CDJellen/ndbc-api","commit_stats":{"total_commits":106,"total_committers":2,"mean_commits":53.0,"dds":"0.28301886792452835","last_synced_commit":"cd920f88b09c5cb4189dbb4f9373e075480be041"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/CDJellen/ndbc-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CDJellen%2Fndbc-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CDJellen%2Fndbc-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CDJellen%2Fndbc-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CDJellen%2Fndbc-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CDJellen","download_url":"https://codeload.github.com/CDJellen/ndbc-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CDJellen%2Fndbc-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31584816,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"online","status_checked_at":"2026-04-09T02:00:06.848Z","response_time":112,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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"},"owner_record":{"login":"CDJellen","name":"Chris Jellen","uuid":"64814231","kind":"user","description":"Cloud software engineering at Microsoft.\r\n\r\nCross-team data solutions focused on observability, reliability, strategic planning, and automation.","email":"","website":"cdjellen.com","location":"Seattle, WA","twitter":null,"company":"@Microsoft","icon_url":"https://avatars.githubusercontent.com/u/64814231?u=c278c4c6fa8a93417c54df64b65d75f2372780c9\u0026v=4","repositories_count":5,"last_synced_at":"2023-05-05T07:45:47.738Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/CDJellen","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2023-05-05T07:45:47.745Z","updated_at":"2023-05-05T07:45:47.745Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CDJellen","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CDJellen/repositories"},"tags":[]},"repo_metadata_updated_at":"2026-04-13T11:33:59.529Z","dependent_packages_count":0,"downloads":1621,"downloads_period":"last-month","dependent_repos_count":1,"rankings":{"downloads":32.78617735234588,"dependent_repos_count":21.544734775075646,"dependent_packages_count":10.119285352930213,"stargazers_count":25.064230442281982,"forks_count":29.79117102828443,"docker_downloads_count":null,"average":23.86111979018363},"purl":"pkg:pypi/ndbc-api","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/ndbc-api","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/pypi/ndbc-api","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/ndbc-api/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2026-03-21T19:01:21.289Z","issues_count":13,"pull_requests_count":73,"avg_time_to_close_issue":542163.7,"avg_time_to_close_pull_request":12517.013888888889,"issues_closed_count":10,"pull_requests_closed_count":72,"pull_request_authors_count":5,"issue_authors_count":10,"avg_comments_per_issue":2.6923076923076925,"avg_comments_per_pull_request":0.1095890410958904,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":1,"past_year_pull_requests_count":4,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":5845.75,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":4,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":0.0,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":4,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/CDJellen%2Fndbc-api/issues","maintainers":[{"login":"CDJellen","count":66,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/CDJellen"}],"active_maintainers":[{"login":"CDJellen","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/CDJellen"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/ndbc-api/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/ndbc-api/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/ndbc-api/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/ndbc-api/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/ndbc-api/codemeta","maintainers":[{"uuid":"CDJellen","login":"CDJellen","name":null,"email":null,"url":null,"packages_count":4,"html_url":"https://pypi.org/user/CDJellen/","role":null,"created_at":"2023-01-08T07:48:51.122Z","updated_at":"2023-01-08T07:48:51.122Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/CDJellen/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":841573,"maintainers_count":359517,"namespaces_count":0,"keywords_count":271316,"github":"pypi","metadata":{"funded_packages_count":53172},"icon_url":"https://github.com/pypi.png","created_at":"2022-04-04T15:19:23.364Z","updated_at":"2026-04-09T05:08:03.587Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/namespaces"}}],"commits":{"id":685751,"full_name":"CDJellen/ndbc-api","default_branch":"main","total_commits":201,"total_committers":5,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":40.2,"dds":0.02487562189054726,"past_year_total_commits":20,"past_year_total_committers":1,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":20.0,"past_year_dds":0.0,"last_synced_at":"2026-04-13T06:01:24.906Z","last_synced_commit":"d3783f6eb02b14afa21313a515a8e682e1d47dbf","created_at":"2023-03-09T11:09:20.530Z","updated_at":"2026-04-13T06:01:24.870Z","committers":[{"name":"cdjellen","email":"cdjellen@gmail.com","login":"CDJellen","count":196},{"name":"Rachel Wegener","email":"35503632+rwegener2","login":"rwegener2","count":2},{"name":"abdu558","email":"61558312+abdu558","login":"abdu558","count":1},{"name":"Weidav","email":"66092635+Weidav","login":"Weidav","count":1},{"name":"Austin Raney","email":"aaraney@protonmail.com","login":"aaraney","count":1}],"past_year_committers":[{"name":"cdjellen","email":"cdjellen@gmail.com","login":"CDJellen","count":20}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/CDJellen%2Fndbc-api/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-15T00:00:09.512Z","repositories_count":6213593,"commits_count":903370819,"contributors_count":34924210,"owners_count":1144562,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"CDJellen/ndbc-api","html_url":"https://github.com/CDJellen/ndbc-api","last_synced_at":"2026-03-21T19:01:21.289Z","status":"error","issues_count":13,"pull_requests_count":73,"avg_time_to_close_issue":542163.7,"avg_time_to_close_pull_request":12517.013888888889,"issues_closed_count":10,"pull_requests_closed_count":72,"pull_request_authors_count":5,"issue_authors_count":10,"avg_comments_per_issue":2.6923076923076925,"avg_comments_per_pull_request":0.1095890410958904,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":1,"past_year_pull_requests_count":4,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":5845.75,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":4,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":0.0,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":4,"created_at":"2023-05-15T04:27:23.264Z","updated_at":"2026-03-21T19:01:21.290Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/CDJellen%2Fndbc-api","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/CDJellen%2Fndbc-api/issues","issue_labels_count":{"enhancement":6,"bug":5,"documentation":1},"pull_request_labels_count":{"enhancement":37,"documentation":32,"bug":8,"help wanted":1},"issue_author_associations_count":{"NONE":10,"CONTRIBUTOR":2,"OWNER":1},"pull_request_author_associations_count":{"OWNER":65,"NONE":4,"CONTRIBUTOR":4},"issue_authors":{"ks905383":4,"Weidav":1,"anthony-meza":1,"CDJellen":1,"supermanzer":1,"abdu558":1,"Thomasdht":1,"rwegener2":1,"thex1le":1,"dominicdill":1},"pull_request_authors":{"CDJellen":65,"Weidav":2,"aaraney":2,"rwegener2":2,"abdu558":2},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-09T00:00:10.509Z","repositories_count":14198913,"issues_count":34665806,"pull_requests_count":113309854,"authors_count":11232070,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{"bug":1},"past_year_pull_request_labels_count":{"documentation":4,"enhancement":4,"bug":1},"past_year_issue_author_associations_count":{"OWNER":1},"past_year_pull_request_author_associations_count":{"OWNER":4},"past_year_issue_authors":{"CDJellen":1},"past_year_pull_request_authors":{"CDJellen":4},"maintainers":[{"login":"CDJellen","count":66,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/CDJellen"}],"active_maintainers":[{"login":"CDJellen","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/CDJellen"}]},"events":{"total":{"ReleaseEvent":9,"DeleteEvent":5,"PullRequestEvent":30,"ForkEvent":3,"IssuesEvent":10,"WatchEvent":10,"IssueCommentEvent":11,"PushEvent":39,"PullRequestReviewCommentEvent":2,"PullRequestReviewEvent":4,"CreateEvent":15},"last_year":{"ReleaseEvent":1,"DeleteEvent":2,"PullRequestEvent":8,"IssuesEvent":1,"WatchEvent":9,"PushEvent":9,"CreateEvent":2}},"keywords":["climate-data","data-science","noaa","python3"],"dependencies":[{"ecosystem":"pypi","filepath":"requirements.txt","sha":null,"kind":"manifest","created_at":"2022-08-13T03:20:13.846Z","updated_at":"2022-08-13T03:20:13.846Z","repository_link":"https://github.com/CDJellen/ndbc-api/blob/main/requirements.txt","dependencies":[{"id":1394270374,"package_name":"requests","ecosystem":"pypi","requirements":"\u003e=2.10.0","direct":true,"kind":"runtime","optional":false},{"id":1394270375,"package_name":"pandas","ecosystem":"pypi","requirements":"\u003e=1.3.5","direct":true,"kind":"runtime","optional":false},{"id":1394270376,"package_name":"bs4","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":1394270377,"package_name":"html5lib","ecosystem":"pypi","requirements":"\u003e=1.1","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"requirements_dev.txt","sha":null,"kind":"manifest","created_at":"2022-08-13T03:20:14.113Z","updated_at":"2022-08-13T03:20:14.113Z","repository_link":"https://github.com/CDJellen/ndbc-api/blob/main/requirements_dev.txt","dependencies":[{"id":1394273292,"package_name":"pytest","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":1394273293,"package_name":"pyyaml","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":1394273294,"package_name":"pyarrow","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false}]},{"ecosystem":"pypi","filepath":"setup.py","sha":null,"kind":"manifest","created_at":"2022-08-13T03:20:14.643Z","updated_at":"2022-08-13T03:20:14.643Z","repository_link":"https://github.com/CDJellen/ndbc-api/blob/main/setup.py","dependencies":[{"id":1394283371,"package_name":"requests","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":1394283372,"package_name":"pandas","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":1394283373,"package_name":"bs4","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":1394283374,"package_name":"html5lib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/ci.yml","sha":null,"kind":"manifest","created_at":"2023-02-09T20:30:42.834Z","updated_at":"2023-02-09T20:30:42.834Z","repository_link":"https://github.com/CDJellen/ndbc-api/blob/main/.github/workflows/ci.yml","dependencies":[{"id":7504822844,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7504822845,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/publish.yml","sha":null,"kind":"manifest","created_at":"2023-02-09T20:30:42.877Z","updated_at":"2023-02-09T20:30:42.877Z","repository_link":"https://github.com/CDJellen/ndbc-api/blob/main/.github/workflows/publish.yml","dependencies":[{"id":7504822846,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7504822847,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"poetry.lock","sha":null,"kind":"lockfile","created_at":"2024-07-06T05:52:58.502Z","updated_at":"2024-07-06T05:52:58.502Z","repository_link":"https://github.com/CDJellen/ndbc-api/blob/main/poetry.lock","dependencies":[{"id":18921201680,"package_name":"numpy","ecosystem":"pypi","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":18921201666,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"4.12.3","direct":false,"kind":"runtime","optional":false},{"id":18921201667,"package_name":"certifi","ecosystem":"pypi","requirements":"2024.7.4","direct":false,"kind":"runtime","optional":false},{"id":18921201668,"package_name":"charset-normalizer","ecosystem":"pypi","requirements":"3.3.2","direct":false,"kind":"runtime","optional":false},{"id":18921201669,"package_name":"colorama","ecosystem":"pypi","requirements":"0.4.6","direct":false,"kind":"runtime","optional":false},{"id":18921201670,"package_name":"coverage","ecosystem":"pypi","requirements":"7.5.4","direct":false,"kind":"runtime","optional":false},{"id":18921201671,"package_name":"coveralls","ecosystem":"pypi","requirements":"4.0.1","direct":false,"kind":"runtime","optional":false},{"id":18921201672,"package_name":"docopt","ecosystem":"pypi","requirements":"0.6.2","direct":false,"kind":"runtime","optional":false},{"id":18921201673,"package_name":"exceptiongroup","ecosystem":"pypi","requirements":"1.2.1","direct":false,"kind":"runtime","optional":false},{"id":18921201674,"package_name":"html5lib","ecosystem":"pypi","requirements":"1.1","direct":false,"kind":"runtime","optional":false},{"id":18921201675,"package_name":"httpretty","ecosystem":"pypi","requirements":"1.1.4","direct":false,"kind":"runtime","optional":false},{"id":18921201676,"package_name":"idna","ecosystem":"pypi","requirements":"3.7","direct":false,"kind":"runtime","optional":false},{"id":18921201677,"package_name":"importlib-metadata","ecosystem":"pypi","requirements":"8.0.0","direct":false,"kind":"runtime","optional":false},{"id":18921201678,"package_name":"iniconfig","ecosystem":"pypi","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":18921201679,"package_name":"numpy","ecosystem":"pypi","requirements":"1.24.4","direct":false,"kind":"runtime","optional":false},{"id":18921201681,"package_name":"packaging","ecosystem":"pypi","requirements":"24.1","direct":false,"kind":"runtime","optional":false},{"id":18921201682,"package_name":"pandas","ecosystem":"pypi","requirements":"2.0.3","direct":false,"kind":"runtime","optional":false},{"id":18921201683,"package_name":"platformdirs","ecosystem":"pypi","requirements":"4.2.2","direct":false,"kind":"runtime","optional":false},{"id":18921201684,"package_name":"pluggy","ecosystem":"pypi","requirements":"1.5.0","direct":false,"kind":"runtime","optional":false},{"id":18921201685,"package_name":"pyarrow","ecosystem":"pypi","requirements":"16.1.0","direct":false,"kind":"runtime","optional":false},{"id":18921201686,"package_name":"pytest","ecosystem":"pypi","requirements":"8.2.2","direct":false,"kind":"runtime","optional":false},{"id":18921201687,"package_name":"pytest-cov","ecosystem":"pypi","requirements":"5.0.0","direct":false,"kind":"runtime","optional":false},{"id":18921201688,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"2.9.0.post0","direct":false,"kind":"runtime","optional":false},{"id":18921201689,"package_name":"pytz","ecosystem":"pypi","requirements":"2024.1","direct":false,"kind":"runtime","optional":false},{"id":18921201690,"package_name":"pyyaml","ecosystem":"pypi","requirements":"6.0.1","direct":false,"kind":"runtime","optional":false},{"id":18921201691,"package_name":"requests","ecosystem":"pypi","requirements":"2.32.3","direct":false,"kind":"runtime","optional":false},{"id":18921201692,"package_name":"setuptools","ecosystem":"pypi","requirements":"70.2.0","direct":false,"kind":"runtime","optional":false},{"id":18921201693,"package_name":"six","ecosystem":"pypi","requirements":"1.16.0","direct":false,"kind":"runtime","optional":false},{"id":18921201694,"package_name":"soupsieve","ecosystem":"pypi","requirements":"2.5","direct":false,"kind":"runtime","optional":false},{"id":18921201695,"package_name":"tomli","ecosystem":"pypi","requirements":"2.0.1","direct":false,"kind":"runtime","optional":false},{"id":18921201696,"package_name":"tzdata","ecosystem":"pypi","requirements":"2024.1","direct":false,"kind":"runtime","optional":false},{"id":18921201697,"package_name":"urllib3","ecosystem":"pypi","requirements":"2.2.2","direct":false,"kind":"runtime","optional":false},{"id":18921201698,"package_name":"webencodings","ecosystem":"pypi","requirements":"0.5.1","direct":false,"kind":"runtime","optional":false},{"id":18921201699,"package_name":"yapf","ecosystem":"pypi","requirements":"0.40.2","direct":false,"kind":"runtime","optional":false},{"id":18921201700,"package_name":"zipp","ecosystem":"pypi","requirements":"3.19.2","direct":false,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2024-07-06T05:52:58.941Z","updated_at":"2024-07-06T05:52:58.941Z","repository_link":"https://github.com/CDJellen/ndbc-api/blob/main/pyproject.toml","dependencies":[{"id":18921201702,"package_name":"python","ecosystem":"pypi","requirements":"\u003e=3.8,\u003c3.13","direct":true,"kind":"runtime","optional":false},{"id":18921201703,"package_name":"requests","ecosystem":"pypi","requirements":"\u003e=2.10.0","direct":true,"kind":"runtime","optional":false},{"id":18921201704,"package_name":"pandas","ecosystem":"pypi","requirements":"\u003e=1.5.3","direct":true,"kind":"runtime","optional":false},{"id":18921201705,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"~4","direct":true,"kind":"runtime","optional":false},{"id":18921201706,"package_name":"html5lib","ecosystem":"pypi","requirements":"^1.1","direct":true,"kind":"runtime","optional":false},{"id":18921201707,"package_name":"coveralls","ecosystem":"pypi","requirements":"\u003e=4.0.1","direct":true,"kind":"develop","optional":false},{"id":18921201708,"package_name":"httpretty","ecosystem":"pypi","requirements":"\u003e=0.9.1","direct":true,"kind":"develop","optional":false},{"id":18921201709,"package_name":"pytest","ecosystem":"pypi","requirements":"\u003e=7.1.2","direct":true,"kind":"develop","optional":false},{"id":18921201710,"package_name":"pytest-cov","ecosystem":"pypi","requirements":"\u003e=3.0.0","direct":true,"kind":"develop","optional":false},{"id":18921201711,"package_name":"pyyaml","ecosystem":"pypi","requirements":"\u003e=6.0","direct":true,"kind":"develop","optional":false},{"id":18921201712,"package_name":"pyarrow","ecosystem":"pypi","requirements":"~16","direct":true,"kind":"develop","optional":false},{"id":18921201713,"package_name":"yapf","ecosystem":"pypi","requirements":"\u003e=0.30","direct":true,"kind":"develop","optional":false},{"id":18921201714,"package_name":"setuptools","ecosystem":"pypi","requirements":"\u003e=61.0","direct":true,"kind":"develop","optional":false}]}],"score":12.259566017970174,"created_at":"2023-09-18T13:10:25.348Z","updated_at":"2026-04-20T09:02:39.677Z","avatar_url":"https://github.com/CDJellen.png","language":"Jupyter Notebook","category":"Hydrosphere","sub_category":"Ocean and Hydrology Data Access","monthly_downloads":1621,"total_dependent_repos":1,"total_dependent_packages":0,"readme":"\u003cdiv align=\"center\"\u003e\n    \u003ch2\u003eNDBC API\u003c/h2\u003e\n\u003c/div\u003e\n\n\n[![Coverage Status](https://coveralls.io/repos/github/CDJellen/ndbc-api/badge.svg?branch=main)](https://coveralls.io/github/CDJellen/ndbc-api?branch=main)\n[![PyPI](https://img.shields.io/pypi/v/ndbc-api)](https://pypi.org/project/ndbc-api/#history)\n[![DOI](https://joss.theoj.org/papers/10.21105/joss.07406/status.svg)](https://doi.org/10.21105/joss.07406)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ndbc-api)](https://pypi.org/project/ndbc-api/)\n[![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white\u0026style=flat-square)](https://www.linkedin.com/in/cdjellen/)\n[![GitHub](https://img.shields.io/github/license/cdjellen/ndbc-api)](https://github.com/cdjellen/ndbc-api/blob/main/LICENSE)\n[![PyPI - Downloads](https://img.shields.io/pypi/dm/ndbc-api)](https://pypi.org/project/ndbc-api/)\n\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch3\u003eA Python API for the National Data Buoy Center\u003c/h3\u003e\n\u003c/div\u003e\n\n\nThe National Oceanic and Atmospheric Association's National Data Buoy Center maintains marine monitoring and observation stations around the world[^1]. These stations report atmospheric, oceanographic, and other meterological data at regular intervals to the NDBC. Measurements are made available over HTTP through the NDBC's data service.\n\nThe ndbc-api is a python library that makes this data more widely accessible.\n\nThe ndbc-api is primarily built to parse whitespace-delimited oceanographic and atmospheric data distributed as text files for available time ranges, on a station-by-station basis[^2]. Measurements are typically distributed as `utf-8` encoded, station-by-station, fixed-period text files. More information on the measurements and methodology are available [on the NDBC website](https://www.ndbc.noaa.gov/docs/ndbc_web_data_guide.pdf)[^3].\n\nPlease see [the included example notebook](/notebooks/overview.ipynb) for a more detailed walkthrough of the API's capabilities.\n\n[^1]: https://www.ndbc.noaa.gov/\n[^2]: https://www.ndbc.noaa.gov/obs.shtml\n[^3]: https://www.ndbc.noaa.gov/docs/ndbc_web_data_guide.pdf\n\n\n\n#### Installation\nThe `ndbc-api` can be installed via PIP:\n\n```sh\npip install ndbc-api\n```\n\nTo use the async API, install the optional `async` extra:\n\n```sh\npip install ndbc-api[async]\n```\n\nConda users can install the `ndbc-api` via the `conda-forge` channel:\n\n```sh\nconda install -c conda-forge ndbc-api\n```\n\nFinally, to install the `ndbc-api` from source, clone the repository and run the following command:\n\n```sh\npip install .\n```\n\n#### Requirements\nThe `ndbc-api` has been tested on Python 3.9, 3.10, 3.12, and 3.13.\n\nThe API uses synchronous HTTP requests to compile data matching the user-supplied parameters. The `ndbc-api` package depends on:\n* requests\u003e=2.10.0\n* pandas\u003e=2.0.0\n* numpy\u003e=1.26.3\n* beautifulsoup4\n* html5lib\u003e=1.1\n* xarray\n* scipy\n* h5netcdf\n\n##### Async\nThe async API additionally requires:\n* aiohttp\u003e=3.9.0\n\nInstall it with `pip install ndbc-api[async]`.\n\n##### Development\nIf you would like to contribute to the growth and maintenance of the `ndbc-api`, please feel free to open a PR with tests covering your changes. The tests leverage `pytest` and depend on the above requirements, as well as:\n* coveralls\n* httpretty\n* pytest\n* pytest-cov\n* pytest-asyncio\n* aioresponses\n* pyyaml\n* pyarrow\n\nBreaking changes will be considered, especially in the current `alpha` state of the package on `PyPi`.  As the API further matures, breaking changes will only be considered with new major versions (e.g. `N.0.0`).\n\n#### Example\n\nThe `ndbc-api` exposes public methods through the `NdbcApi` class.\n\n```python3\nfrom ndbc_api import NdbcApi\n\napi = NdbcApi()\n```\n\nThe `NdbcApi` provides a unified access point for NDBC data. All methods for obtaining data, metadata, and locating stations are available using the `api` object. The `get_data` method is the primary method for accessing NDBC data, and is used to retrieve measurements from a given station over a specified time range. This method can request data from the NDBC HTTP Data Service or the THREDDS data service, and return the data as a `pandas.DataFrame`, `xarray.Dataset` or python `dict` object.\n\nData made available by the NDBC falls into two broad categories.\n\n1. Station metadata\n2. Station measurements\n\nThe `api` supports a range of public methods for accessing data from the above categories.\n\n##### Station metadata\n\nThe `api` has five key public methods for accessing NDBC metadata.\n\n1. The `stations` method, which returns all NDBC stations.\n2. The `nearest_station` method, which returns the station ID of the nearest station.\n3. The `station` method, which returns station metadata from a given station ID.\n4. The `available_realtime` method, which returns hyperlinks and measurement names for realtime measurements captured by a given station.\n5. The `available_historical` method, which returns hyperlinks and measurement names for historical measurements captured by a given station.\n\n###### `stations`\n\n```python3\n# get all stations and some metadata as a Pandas DataFrame\nstations_df = api.stations()\n# parse the response as a dictionary\nstations_dict = api.stations(as_df=False)\n```\n\n###### `nearest_station`\n\n```python3\n# specify desired latitude and longitude\nlat = '38.88N'\nlon = '76.43W'\n\n# find the station ID of the nearest NDBC station\nnearest = api.nearest_station(lat=lat, lon=lon)\nprint(nearest_station)\n```\n\n```python3\n'tplm2'\n```\n\n###### `radial_search`\n\n```python3\n# specify desired latitude, longitude, radius, and units\nlat = '38.88N'\nlon = '76.43W'\nradius = 100\nunits = 'km'\n\n# find the station IDs of all NDBC stations within the radius\nnearby_stations_df = api.radial_search(lat=lat, lon=lon, radius=radius, units=units)\n```\n\n```python3\n'tplm2'\n```\n\n###### `station`\n\n```python3\n# get station metadata\ntplm2_meta = api.station(station_id='tplm2')\n# parse the response as a Pandas DataFrame\ntplm2_df = api.station(station_id='tplm2', as_df=True)\n```\n\n###### `available_realtime`\n\n```python3\n# get all available realtime measurements, periods, and hyperlinks\ntplm2_realtime = api.available_realtime(station_id='tplm2')\n# parse the response as a Pandas DataFrame\ntplm2_realtime_df = api.available_realtime(station_id='tplm2', as_df=True)\n```\n\n###### `available_historical`\n\n```python3\n# get all available historical measurements, periods, and hyperlinks\ntplm2_historical = api.available_historical(station_id='tplm2')\n# parse the response as a Pandas DataFrame\ntplm2_historical_df = api.available_historical(station_id='tplm2', as_df=True)\n```\n\n##### Station measurements\n\nThe `api` has two public methods which support accessing supported NDBC station measurements.\n\n1. The `get_modes` method, which returns a list of supported `mode`s, corresponding to the data formats provided by the NDBC data service. For example, the `adcp` mode represents \"Acoustic Doppler Current Profiler\" measurements, providing information about ocean currents at different depths, while `cwind` represents \"Continuous winds\" data, offering high-frequency wind speed and direction measurements.\n\nNote that not all stations provide the same set of measurements. The `available_realtime` and `available_historical` methods can be called on a station-by station basis to ensure a station has the desired data available, before building and executing requests with `get_data`. \n\n2. The `get_data` method, which returns measurements of a given type for a given station.\n\n###### `get_modes`\n\n```python3\n# get the list of supported meterological measurement modes\nmodes = api.get_modes()\nprint(modes)\n```\n\n```python3\n[\n    'adcp',\n    'cwind',\n    'ocean',\n    'spec',\n    'stdmet',\n    'supl',\n    'swden',\n    'swdir',\n    'swdir2',\n    'swr1',\n    'swr2'\n]\n```\n\nThe mode values above map directly to the identifiers used buy the NDBC. Desriptions for each mode are presented below:\n* `adcp`: Acoustic Doppler Current Profiler measurements, providing information about ocean currents at different depths.\n* `cwind`: Continuous winds data, offering high-frequency wind speed and direction measurements.\n* `ocean`: Oceanographic data, including water temperature, salinity, and wave measurements.\n* `spec`: Spectral wave data, providing detailed information about wave energy and direction.\n* `stdmet`: Standard meteorological data, including air temperature, pressure, wind speed, and visibility.\n* `supl`: Supplemental measurements, which can vary depending on the specific buoy and its sensors.\n* `swden`: Spectral wave density data, providing information about the distribution of wave energy across different frequencies.\n* `swdir`: Spectral wave direction data, indicating the primary direction of wave energy.\n* `swdir2`: Secondary spectral wave direction data, capturing additional wave direction information.\n* `swr1`: First-order spectral wave data, providing basic wave height and period information.\n* `swr2`: Second-order spectral wave data, offering more detailed wave measurements.\n\n###### `get_data`\n\n```python3\n# get all continuous wind (`cwind`) measurements for station tplm2\ncwind_df = api.get_data(\n    station_id='tplm2',\n    mode='cwind',\n    start_time='2020-01-01',\n    end_time='2022-09-15',\n)\n# return data as a dictionary\ncwind_dict = api.get_data(\n    station_id='tplm2',\n    mode='cwind',\n    start_time='2020-01-01',\n    end_time='2022-09-15',\n    as_df=False\n)\n# get only the wind speed measurements\nwspd_df = api.get_data(\n    station_id='tplm2',\n    mode='cwind',\n    start_time='2020-01-01',\n    end_time='2022-09-15',\n    as_df=True,\n    cols=['WSPD']\n)\n# get all standard meterological (`stdmet`) measurements for stations tplm2 and apam2\nstdmet_df = api.get_data(\n    station_ids=['tplm2', 'apam2'],\n    mode='stdmet',\n    start_time='2022-01-01',\n    end_time='2023-01-01',\n)\n# get all (available) continuous wind and standard meterological measurements for stations tplm2 and apam2\n# for station apam2, this is unavailable and will log an error but not affect the rest of the results.\nstdmet_df = api.get_data(\n    station_ids=['tplm2', 'apam2'],\n    modes=['stdmet', 'cwind'],\n    start_time='2022-01-01',\n    end_time='2023-01-01',\n)\n```\n\n#### Async API\n\nThe `ndbc-api` also provides an async API, `AsyncNdbcApi`, for use in `asyncio` applications. All public methods mirror those of the synchronous `NdbcApi`, but are defined as `async def` and use `aiohttp` for non-blocking I/O.\n\nInstall the async extra if you haven't already:\n\n```sh\npip install ndbc-api[async]\n```\n\nThe `AsyncNdbcApi` is used as an async context manager:\n\n```python3\nimport asyncio\nfrom ndbc_api import AsyncNdbcApi\n\nasync def main():\n    async with AsyncNdbcApi() as api:\n        # get all stations\n        stations_df = await api.stations()\n\n        # find the nearest station\n        nearest = await api.nearest_station(lat='38.88N', lon='76.43W')\n\n        # get standard meteorological data\n        stdmet_df = await api.get_data(\n            station_id='tplm2',\n            mode='stdmet',\n            start_time='2020-01-01',\n            end_time='2022-01-01',\n        )\n\n        # concurrent multi-station query\n        multi_df = await api.get_data(\n            station_ids=['tplm2', 'apam2'],\n            mode='stdmet',\n            start_time='2022-01-01',\n            end_time='2023-01-01',\n        )\n\nasyncio.run(main())\n```\n\nThe async API supports the same `use_opendap` / `as_xarray_dataset` options as the synchronous API for accessing data via the THREDDS/OpenDAP service:\n\n```python3\nasync with AsyncNdbcApi() as api:\n    ds = await api.get_data(\n        station_id='tplm2',\n        mode='stdmet',\n        start_time='2020-01-01',\n        end_time='2022-01-01',\n        use_opendap=True,\n    )\n```\n\n#### More Information\nPlease see [the included example notebook](/notebooks/overview.ipynb) for a more detailed walkthrough of the API's capabilities.\n\n#### Questions\nIf you have questions regarding the library please post them into\nthe [GitHub discussion forum](https://github.com/cdjellen/ndbc-api/discussions).\n","funding_links":[],"readme_doi_urls":["https://doi.org/10.21105/joss.07406"],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["climate","ocean"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/64726","html_url":"https://ost.ecosyste.ms/projects/64726"}