📜  Node.js |用于天气预报的开放式天气地图 API(1)

📅  最后修改于: 2023-12-03 14:44:41.776000             🧑  作者: Mango

Node.js | 用于天气预报的开放式天气地图 API

简介

这是一个由 Node.js 编写的天气地图 API,可以为开发者提供天气预报、空气质量、日出日落等相关信息。该 API 采用开放式数据源,数据实时更新。可用于开发有天气预报需求的应用程序,如天气APP、天气桌面小插件等。此外,该 API 还支持 JSONP 跨域调用,方便开发者进行接口测试和调试。

功能与特点
实时更新数据源

该 API 数据源采用天气网实时获取天气数据,气象局空气质量数据源实时更新,日出日落等其它数据则通过计算得到。

开放式数据源

该 API 采用开放式数据源,数据实时更新,可满足开发者在不同场景下的数据需求。

支持 JSONP 跨域调用

为方便开发者进行接口测试和调试,该 API 支持 JSONP 跨域调用。

可拓展性强

该 API 采用模块化设计,代码分离清晰,易于后期拓展和扩展。

如何使用
API 调用地址
https://api.weathermap.org/?city=城市&key=密钥&output=output

参数说明:

  • city:要查询的城市名,必填参数。
  • key:用户的密钥,必填参数。
  • output:数据的输出格式,支持 JSON 和 JSONP 两种格式,默认为 JSON 格式。
获取数据

可以使用 http 模块发起 GET 请求,如下所示:

const http = require('http');

const options = {
    hostname: 'api.weathermap.org',
    path: '/?city=成都&key=XXXXX',
    method: 'GET'
};

const req = http.request(options, res => {
    console.log(`statusCode: ${res.statusCode}`)

    res.on('data', d => {
        process.stdout.write(d)
    })
})

req.on('error', error => {
    console.error(error)
})

req.end()
JSONP 跨域调用

使用 JSONP 进行调用,需要在请求参数中加上 callback 参数,值为回调函数名,如下所示:

function requestData() {
    const city = document.getElementById('city').value;
    const key = document.getElementById('key').value;
    const script = document.createElement('script');
    script.src = `https://api.weathermap.org/?city=${city}&key=${key}&output=jsonp&callback=processData`;
    document.head.appendChild(script);
}

function processData(data) {
    console.log(data);
}
示例

以下为一个使用该 API 的示例:

const http = require('http');
const fs = require('fs');

const options = {
    hostname: 'api.weathermap.org',
    path: '/?city=成都&key=XXXXX',
    method: 'GET'
};

const req = http.request(options, res => {
    console.log(`statusCode: ${res.statusCode}`);

    let data = '';

    res.on('data', d => {
        data += d;
    })

    res.on('end', () => {
        fs.writeFile('data.json', data, () => {
            console.log('数据写入成功');
        });
    })
})

req.on('error', error => {
    console.error(error);
})

req.end();
结语

该 API 以简单、易用、实用为宗旨,提供开放的接口及数据源,方便开发者在不同场景下快速获取天气、空气质量等相关数据。开发者可根据自身需求对该 API 进行拓展和定制化开发。