使用FSharp类型提供商消费黄页

时间:2014-02-22 15:21:58

标签: f# type-providers f#-data

我注册了黄色的pages.com API程序:https://publisher.yp.com/home

我去打这样的电话,我在浏览器中找回了JSON: http://pubapi.atti.com/search-api/search/devapi/search?term=Jumbo+China+5&searchloc=6108+Falls+Of+Neuse+Rd+27609&format=json&key=ZZZZZZZZ

当我获取json结果并将其放入Json2CSharp时,它渲染得很好。当我尝试将其加载到类型提供程序中时:

键入RestaurantListingJson = JsonProvider< @ “http://pubapi.atti.com/search-api/search/devapi/search?term=Jumbo+China+5&searchloc=6108+Falls+Of+Neuse+Rd+27609&format=json&key=ZZZZZZZ” >

我得到400

看着提琴手,我明白了 “用户代理是必填字段”

有没有人遇到过这个?如何将用户代理添加到类型提供程序?

提前致谢

2 个答案:

答案 0 :(得分:4)

我还没有创建帐户,所以我无法尝试这个 - 但如果错误消息显示“用户代理是必填字段”,那么我想该服务需要设置HTTP的User-Agent标头请求。

JsonProvider的静态参数不支持此功能,因此最好的方法是下载示例JSON,将其保存到本地文件(例如yp.json)和然后使用它来创建类型提供者:

type Yp = JsonProvider<"yp.json">

要实际下载某些数据(当您要提出请求时),可以使用Http.RequestString headers - 您可以指定任何必需的标题,包括User-Agent

let response = 
  Http.RequestString("http://httpbin.org/user-agent", headers=["user-agent", "test"])

然后,您可以使用Yp.Parse(response)加载数据(而不是直接使用Load方法请求不允许您指定标题的网址。)

答案 1 :(得分:1)

最新版本的F#Data现在总是发送用户代理并接受标题,所以现在应该可以直接使用:

type RestaurantListingJson = JsonProvider<"http://pubapi.atti.com/search-api/search/devapi/search?term=Jumbo+China+5&searchloc=6108+Falls+Of+Neuse+Rd+27609&format=json&key=ZZZZZZZ">