【问题标题】:Consuming Yellow Pages.com using FSharp Type Providers使用 FSharp 类型提供程序使用 Yellow Pages.com
【发布时间】:2014-02-22 15:21:57
【问题描述】:

我注册了黄色 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 时,它呈现得很好。当我尝试将其加载到类型提供程序中时:

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

我得到一个 400

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

以前有人遇到过这种情况吗?如何将用户代理添加到类型提供程序?

提前致谢

【问题讨论】:

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


    【解决方案1】:

    我还没有创建一个帐户,所以我不能尝试这个 - 但如果错误消息说“用户代理是必填字段”,那么我猜该服务需要设置 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 方法来请求不允许您指定标头的URL)。

    【讨论】:

    • @JamieDixon - 关于将其添加为静态参数 - 我认为我们无法实际添加静态参数以支持所有可能的访问模式。我认为它应该适用于标准 URL,但是当您需要更多时,使用本地文件是一个不错的解决方案 (IMO)。此外,当您需要在火车上编译时,本地文件效果更好:-)
    • 感谢 Thomas 似乎要添加到 TP 的构造函数中的另一件事。我想我们已经 13 岁以上了,还在数吗? :-)。顺便说一句,这是@jamie_dixon
    【解决方案2】:

    最新版本的 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">
    

    【讨论】:

      猜你喜欢
      • 2013-07-25
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 2013-04-02
      相关资源
      最近更新 更多