{"id":15706061,"url":"https://github.com/czzonet/weather-app","last_synced_at":"2026-05-09T04:33:24.711Z","repository":{"id":118160674,"uuid":"290714551","full_name":"czzonet/weather-app","owner":"czzonet","description":"Deno获取指定或基于IP的城市的天气","archived":false,"fork":false,"pushed_at":"2020-08-27T08:16:06.000Z","size":151,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-30T15:47:48.472Z","etag":null,"topics":["deno","nodejs","weather-api"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/czzonet.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":"2020-08-27T08:02:11.000Z","updated_at":"2020-09-04T16:10:51.000Z","dependencies_parsed_at":null,"dependency_job_id":"ccca3d7b-cec9-40ae-8e74-4eb3569070ae","html_url":"https://github.com/czzonet/weather-app","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/czzonet/weather-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czzonet%2Fweather-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czzonet%2Fweather-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czzonet%2Fweather-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czzonet%2Fweather-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/czzonet","download_url":"https://codeload.github.com/czzonet/weather-app/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czzonet%2Fweather-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32807245,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"online","status_checked_at":"2026-05-09T02:00:06.633Z","response_time":123,"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"}},"keywords":["deno","nodejs","weather-api"],"created_at":"2024-10-03T20:21:21.143Z","updated_at":"2026-05-09T04:33:24.695Z","avatar_url":"https://github.com/czzonet.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Deno获取指定或基于IP的城市的天气\n\n一个使用deno直接运行的ts脚本，来获取指定或基于IP所在地的城市的7天天气预报。\n\n## 演示\n\n```sh\ndeno run --allow-net index.ts --city 杭州\n```\n\n![deno](Snipaste_2020-08-27_15-51-45.png)\n\n## 语法\n\n```sh\ndeno run --allow-net index.ts [--city xxx]\n```\n\n参数说明（参数用`--`前缀标识）：\n\n- deno run index.ts：使用deno运行index.ts文件\n- --allow-net：允许ts文件发起网络请求\n- --city xxx：【可选】指定城市名称，未指定则获取基于IP的城市\n\n## 教程\n\n需要环境：nodejs\n\n### 全局安装deno\n\n```sh\nyarn global add deno\n```\n\n### 第一个deno脚本\n\n```sh\nmkdir my-deno\ncd my-deno\necho \"console.log('Hello deno!')\"\u003e index.ts\n```\n\n解释：\n\n- 新建一个文件夹\n- 进入该文件夹\n- 写入一行代码到新的ts文件里\n\n在该文件夹下新建终端并运行\n\n```sh\ndeno run index.ts\n```\n\n输出\n\n```sh\nHello deno!\n```\n\n### 获取命令行参数\n\n修改index.ts\n\n```ts\nimport { parse } from \"https://deno.land/std@0.61.0/flags/mod.ts\";\n\n/** 获取城市输入 */\nconst args = parse(Deno.args);\nconst city = args.city;\nlet isCitySeted = false;\nif (typeof city === \"string\") {\n  isCitySeted = true;\n  console.log(\"指定城市：\", city);\n} else {\n  console.log(\"指定城市：\", \"基于IP所在地的城市\");\n}\n```\n\n解释：\n\n- 引入网络库里面的格式化方法\n- Deno.args获取命令行参数，并格式化成对象\n- 获取输入的城市名称\n- 判断是否正确获取到城市输入\n\n在该文件夹下新建终端并运行\n\n```sh\ndeno run --allow-net index.ts --city 杭州\n```\n\n参数：\n\n- --allow-net：即`--allow-net true`，开启网络请求权限\n- --city 杭州：指定城市名称为杭州\n\n输出：\n\n```sh\nCheck file:///xxx/index.ts\n指定城市： 杭州\n```\n\n### 查询天气API\n\n免费的天气API可以使用[tianqiapi.com](http://tianqiapi.com/index) 获取预报数据。只需要用邮箱注册一个免费账户，以获得一个API密钥。[API文档地址](http://tianqiapi.com/index/doc?version=v1)\n\n**免费七日天气接口请求方式及url：**\n\n- 请求方式：`GET`\n- 接口地址：`https://tianqiapi.com/api`\n\n**请求示例**\n\n```\nhttps://tianqiapi.com/api?version=v1\u0026appid=65573146\u0026appsecret=dz7SG7qy\n```\n\n继续编辑index.ts，添加：\n\n```ts\n/** 查询天气API */\nconst appid = \"your appid\";\nconst appsecret = \"your appsecret\";\n\nlet url = `https://tianqiapi.com/api?version=v1\u0026appid=${appid}\u0026appsecret=${appsecret}`;\nif (isCitySeted) {\n  url += `\u0026city=${city}`;\n}\n\nconst res = await fetch(url);\nconst weatherObj = await res.json();\n```\n\n解释：\n\n- 你申请的APPID\n- 你申请的APPSecret\n- 组合接口url地址\n- 判断是否需要添加指定城市参数\n- 请求返回响应对象\n- 获取响应体里的json对象\n\n运行就可以获取天气数据。\n\n### 输出格式化结果\n\n获取数据后就可以解析格式化输出了。\n\n**响应参数说明**\n\n```txt\n参数名\t类型\t说明\t备注\ncityid\tString\t城市ID\t\nupdate_time\tString\t气象台更新时间\t\ncity\tString\t城市名称\t\ncityEn\tString\t城市英文名称\t\ncountry\tString\t国家名称\t\ncountryEn\tString\t国家英文名称\t\ndata\tString\t每日数据列表\t1-7日，共7组\n ┗ wea\tString\t天气情况\t\n ┗ wea_img\tString\t天气对应图标\t固定9种类型(您也可以根据wea字段自己处理):\nxue、lei、shachen、wu、bingbao、yun、yu、yin、qing\n ┗ tem\tString\t实时温度\t\n ┗ tem1\tString\t高温\t\n ┗ tem2\tString\t低温\t\n ┗ win\tString\t风向\t\n ┗ win_speed\tString\t风力等级\t\n ┗ humidity\tString\t湿度\n ┗ air\tString\t空气质量\t\n ┗ air_level\tString\t空气质量等级\t\n ┗ air_tips\tString\t空气质量描述\n```\n\n继续编辑index.ts，添加：\n\n```ts\n/** 输出查询结果 */\nconsole.log(`【${weatherObj.city}】七日天气预报`);\n\nweatherObj.data.forEach((d: any, i: any) =\u003e {\n  console.log(\"--------\");\n\n  console.log(\"日期：\", d.day);\n  console.log(\"天气：\", d.wea);\n  console.log(\"温度范围：\" + d.tem2 + ` ～` + d.tem1);\n  console.log(\"风向：\", d.win[0] == d.win[1] ? d.win[0] : d.win.join(\"转\"));\n  console.log(\"风力等级\", d.win_speed);\n  if (i === 0) {\n    console.log(\"实时温度：\", d.tem);\n    console.log(\"实时湿度：\", d.humidity);\n    console.log(\"空气质量：\", d.air);\n    console.log(\"空气质量等级：\", d.air_level);\n    console.log(\"空气质量描述：\", d.air_tips);\n  }\n});\n```\n\n解释：\n\n- 输出返回的天气信息里的城市名\n- 遍历7日预报数据，依次输出对应天气信息，注意只有当天才有额外的实时温湿度和空气质量信息。\n\n在该文件夹下新建终端并运行\n\n```sh\ndeno run --allow-net index.ts --city 杭州\n```\n\n参数：\n\n- --allow-net：即`--allow-net true`，开启网络请求权限\n- --city 杭州：指定城市名称为杭州\n\n输出：\n\n```sh\nCheck file:///xxx/index.ts\n指定城市： 杭州\n【杭州】七日天气预报\n--------\n日期： 27日（今天）\n天气： 大到暴雨转中雨\n温度范围：25℃ ～33℃\n风向： 北风\n风力等级 4-5级转3-4级\n实时温度： 31℃\n实时湿度： 48\n空气质量： 53\n空气质量等级： 良\n空气质量描述： 空气好，可以外出活动，除极少数对污染物特别敏感的人群以外，对公众没有危害！\n--------\n日期： 28日（明天）\n天气： 小到中雨转阴\n温度范围：22℃ ～26℃\n风向： 西北风转无持续风向\n风力等级 4-5级转\u003c3级\n--------\n日期： 29日（后天）\n天气： 阴转多云\n温度范围：24℃ ～31℃\n风向： 无持续风向\n风力等级 \u003c3级\n--------\n日期： 30日（周日）\n天气： 小雨转晴\n温度范围：26℃ ～32℃\n风向： 无持续风向\n风力等级 \u003c3级\n--------\n日期： 31日（周一）\n天气： 小雨\n温度范围：25℃ ～32℃\n风向： 东北风转西北风\n风力等级 3-4级转4-5级\n--------\n日期： 1日（周二）\n天气： 小雨\n温度范围：26℃ ～31℃\n风向： 西北风\n风力等级 6-7级转4-5级\n--------\n日期： 2日（周三）\n天气： 小雨转晴\n温度范围：22℃ ～32℃\n风向： 西北风转无持续风向\n风力等级 4-5级转\u003c3级\n```\n\n\n\n## 总结\n\n从个人体验来讲，Deno使用起来还是有其特点的，除了权限控制，还有一些优缺点比如：\n\n### 优点\n\n- 直接引入网络库\n- 直接运行无需手动先编译ts\n\n### 缺点\n\n- 缺少一些类型声明文件，如Deno本身\n- 无需async会引起IDE语法报错，与常规语法冲突\n\n当然，传统的nodejs开发自己的命令行工具可以用[commander.js](https://github.com/tj/commander.js)库，可以直接封装一个命令行天气预报程序，感兴趣的童鞋可以自己实践一下。\n\n最后附上源码地址，欢迎点赞收藏~戳 [weather-app](https://github.com/czzonet/weather-app)\n\n## 参考文章\n\n1. [使用Deno构建一个命令行天气预报程序 - 掘金](https://juejin.im/post/6864824992626901005)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fczzonet%2Fweather-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fczzonet%2Fweather-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fczzonet%2Fweather-app/lists"}