领域' Commons'在fsharp的freebase提供程序中没有定义

时间:2014-03-22 10:27:05

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

我在使用freebase api时遇到了一些问题。我已设法将密钥放入freebase提供商,因此我没有看到任何403错误,与配额限制有关。但是因为我使用了谷歌API密钥,当我点击" alt +输入"时,公共区域不被识别。但在我写作的时候,提供商设法向我展示数据。

[<Literal>]
let FreebaseApiKey = "AIzaSyCOn15-T31Ls"
type FreebaseDataWithKey = FreebaseDataProvider<Key=FreebaseApiKey>
let dataWithKey = FreebaseDataWithKey.GetDataContext()
let travelDestinations = dataWithKey.Commons.Travel.``Travel destinations``
let all = travelDestinations |> Seq.toList
let first = all.Head.Name

如您所见,我可以访问旅行目的地,因此提供商会正确地向我显示数据但是当我执行时:

Script.fsx(17,38): error FS0039: The field, constructor or member 'Commons' is not defined

奇怪的是,如果我删除谷歌密钥,并使用提供程序,则不会发生此错误。有线索吗?

1 个答案:

答案 0 :(得分:2)

在像freebase这样的提供程序中,我们需要异步执行某些操作,但不幸的是,这会导致错误报告不是很好(请参阅https://github.com/fsharp/fsharp/issues/280) 可能发生的事情是,由于api密钥不正确或类似,freebase返回错误,并且错误没有出现,因为顶层对象已经被高速缓存。您可以在Fiddler下查看返回的json,使用data.DataContext.SendingQuerydata.DataContext.SendingRequest,或者通过删除临时Internet文件下的FreebaseSchemaFreebaseRuntime文件夹来清理缓存系统文件夹。

我们最近尝试通过同步生成顶层类型来改变这种情况,从而导致错误浮出水面,但这导致了其他问题(https://github.com/fsharp/FSharp.Data/issues/522