注:本示例仅做开发参考使用,不建议在生产环境下暴露 key!
- UNIX 时间戳(秒)
- uid 用户ID
- ttl 签名失效时间(可选)
使用上述参数构造参数字符串,例如:
var UID = "UEBACC6EE1";
var ts = Math.floor((new Date()).getTime() / 1000);
var str = "ts="+ts+"&uid=" + UID; // 参数字符串
使用 HMAC-SHA1 方式,以API密钥(key)对上一步生成的参数字符串进行加密
// ...
var str = "ts="+ts+"&uid=" + UID;
var KEY = "qvbt7jgw87gbvseo";
var result = CryptoJS.HmacSHA1(str, KEY);
将上一步生成的加密结果用 base64 编码,并做一个 urlencode,得到签名 sig
var sig = result.toString(CryptoJS.enc.Base64);
str = str + "&sig=" + sig; // 最终构造的已加密的参数字符串
详细代码可见:Seniverse API Test
// 该 Api url 可获取天气实况。用户可替换为其他 url 进行测试
var API = "http://api.seniverse.com/v3/weather/now.json?location=beijing&";
var url = API + str + "&callback=?";
$.getJSON(url)
详细代码可见:Seniverse API JSONP Test
// 该 Api url 可获取天气实况。用户可替换为其他 url 进行测试
var API = "http://api.seniverse.com/v3/weather/now.json?location=beijing&";
var jsonpCallback = function(result) {
// result 为回调函数
// 用户在这里处理返回的结果
}
var url = API + str + "&callback=jsonpCallback";
// 向 HTML 中动态插入 script 标签,通过 JSONP 的方式进行调用
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = url;
$('body').append(newScript);
需要起本地 server, 测试中使用的 key 和 uid 绑定的域名是127.0.0.1.
$ npm install http-server -g
$ cd seniverse-api-demos/javascript
$ http-server -p 3333
打开浏览器访问
http://127.0.0.1:3333/jsonp
注:请通过 127.0.0.1
的链接访问 /jsonp
,而不是 localhost
,localhost
访问会跨域!!!
注:请通过 127.0.0.1
的链接访问 /jsonp
,而不是 localhost
,localhost
访问会跨域!!!
注:请通过 127.0.0.1
的链接访问 /jsonp
,而不是 localhost
,localhost
访问会跨域!!!
同上,本地需要安装 node http-server。仅仅在浏览器中打开 HTML 文件是无法正常请求的。
# 安装 http-server
$ npm i http-server -g
# 然后切换到你的项目目录
$ cd seniverse-api-demos/javascript
# 启动 server,可自定义端口。以 3004 为例
$ http-server -p 3004
打开浏览器访问 http://127.0.0.1:3004/widget.html
(widget.html
名称可替换为你自己的 HTML 名)
查询的城市支持如下参数形式:
- 城市ID 例如:
location=WX4FBXXFKE4F
- 城市中文名 例如:
location=北京
- 省市名称组合 例如:
location=辽宁朝阳
、location=北京朝阳
- 城市拼音/英文名 例如:
location=beijing
(如拼音相同城市,可在之前加省份和空格,例:shanxi yulin) - 经纬度 例如:
location=39.93:116.40
(纬度前经度在后,冒号分隔) - IP地址 例如:
location=220.181.111.86
(某些IP地址可能无法定位到城市) - "ip"两个字母 自动识别请求IP地址,例如:
location=ip