关于什么是API在此不多介绍,请自行百度。不同API使用方法不同但基本相通,本文主要介绍以get方式调用:使用&将各query参数连接,其中中文字符需要使用Uri.EscapeDataString
转码,然后使用Web.Contents
对服务器发出请求,再用Json.Document
对返回的json进行解析,深化出需要部分的信息。
使用API,能够实现许多PQ本身无法实现的功能,比如:
1、根据地址获取经纬度
以高德地图为例,首先得去高德开放平台注册,获得一个key,然后根据开发文档中要求的请求参数构建url,我只选择了city和keywords参数,根据实际需求自行选择。在PQ中创建自定义函数,调用即可。
let location =(x)=>Json.Document(Web.Contents("http://restapi.amap.com/v3/place/text?key=换成你自己的密钥&city=换成要查询城市的拼音&keywords="&Uri.EscapeDataString(x)))[pois]{0}[location], source = Excel.CurrentWorkbook(){[Name="address"]}[Content], result = Table.AddColumn(source, "坐标", each location([地址])) in result
2、翻译
以有道翻译为例,方法基本同上,也需要申请key,我在网上找了个别人现成的,直接拿来用吧。不仅可以中译英,还可以英译中。
let trans = (x)=>Json.Document(Web.Contents("http://fanyi.youdao.com/openapi.do?keyfrom=pdblog&key=993123434&type=data&doctype=json&version=1.1&q="&Uri.EscapeDataString(x)))[translation]{0}, source = Excel.CurrentWorkbook(){[Name="translation"]}[Content], result = Table.AddColumn(source, "英文", each trans([中文])) in result
3、练习
在百度搜索时会出现下拉词推荐
已知api接口为http://suggestion.baidu.com/su?wd=keyword,其中keyword为需要搜索的关键词,请按以上介绍的方法,写出获取下拉词的自定义函数。(返回的并不是标准格式的json,注意头尾多余的部分,自行想办法处理)
非常好!干货!
大神,想请问一下我想调用一个京东万象的api(地址如下:https://wx.jcloud.com/market/api/11613),需要上传图片文件到服务器上,api说明文件里面说,post和get方法都是可以的,我这样进行请求,老是报错,不知道问题出在哪里,是不是无法对文件进行上传啊? 期待您的回答,万分感谢!
源 = Folder.Files("D:\DataScraper\淘宝主图下载"),
筛选的行 = Table.SelectRows(源, each ([Extension] = ".jpg")),
已添加自定义 = Table.AddColumn(筛选的行, "自定义", each Web.Contents("https://way.jd.com/JINGDONGSHANGKE/checkWhiteEdge?9a7cce3bc9af4a383e833c436de8e",[Timeout=10000],[Query=[body=[Content]]]))
in
已添加自定义
let
源 = Folder.Files("D:\DataScraper\淘宝主图下载"),
筛选的行 = Table.SelectRows(源, each ([Extension] = ".jpg")),
已添加自定义 = Table.AddColumn(筛选的行, "自定义", each Web.Contents("https://way.jd.com/JINGDONGSHANGKE/checkWhiteEdge?9a7cce3bc9af4a383e833c436de8e",[Timeout=10000],[Content=[body=[Content]]]))
in
已添加自定义
测试了下,对应的京东图片白底检测api(标识:checkWhiteEdge)已经失效,Web.Contents提示缺少appkey。
let
源 = Folder.Files("D:\DataScraper\淘宝主图下载"),
筛选的行 = Table.SelectRows(源, each ([Extension] = ".jpg")),
已添加自定义 = Table.AddColumn(筛选的行, "自定义", each Web.Contents("https://way.jd.com/JINGDONGSHANGKE/checkWhiteEdge?9a7cce3bc9af4a383e833c436de8e6aa",[Timeout=10000],[Content=[body=[Content]]]))
in
已添加自定义
想问一下powerquery已经获得了经纬度,但是怎么能在web powerbi 上刷新呢
想问一下powerquery已经获得了经纬度,但是怎么能在web powerbi 上刷新呢
请问下:
(x)=>Json.Document(Web.Contents("http://xxx"&Number.ToText(x)))[x]{0}
用该方法调用一个API,传参是纯数字,用了Number.ToText方法,最后得到error,点error实际上Value已经是调用结果了,报错详细如下:
Expression.Error: 无法将值 "x" 转换为类型 List。
详细信息:
Value=x
Type=[Type]
分享个小BUG(Feature)。最近用Power Query调用阿里云的接口,发现每次刷新都被阿里云后台计费了2-4次。排查了得出的解决方案:1. 查询设置里关掉后台刷新预览;2. API返回的Binary一定要加Buffer。