使用PQ调用API

关于什么是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,注意头尾多余的部分,自行想办法处理)

附件

8 Replies to “使用PQ调用API”

  1. 大神,想请问一下我想调用一个京东万象的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
    已添加自定义

    1. 测试了下,对应的京东图片白底检测api(标识:checkWhiteEdge)已经失效,Web.Contents提示缺少appkey。

  2. 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
    已添加自定义

  3. 请问下:
    (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]

  4. 分享个小BUG(Feature)。最近用Power Query调用阿里云的接口,发现每次刷新都被阿里云后台计费了2-4次。排查了得出的解决方案:1. 查询设置里关掉后台刷新预览;2. API返回的Binary一定要加Buffer。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注