0

首先让我说我是 MQL、Freebase 和 Google API 的新手。

我正在尝试使用 Google API Objective-C 客户端从 Freebase 获取结果,但在没有生成类的情况下我找不到任何关于使用 API 的示例或信息。

我找到了这个页面http://code.google.com/p/google-api-objectivec-client/wiki/Introduction

但是“在没有生成类的情况下使用 API”部分没有给我任何有关构建这些查询的相关信息,并且包含的​​示例都是生成的类。

到目前为止,我发现我需要先创建一个带有 RPC URL 的 GTLService 对象(我猜是https://www.googleapis.com/freebase),设置 API 版本(沙箱环境的 v1sandbox) ,并设置 API 密钥(在本例中为 kGoogleAPIKey)。

GTLService * service = [[GTLService alloc] init];
    service.rpcURL = [NSURL URLWithString:@"https://www.googleapis.com/freebase"];
    service.apiVersion = @"v1sandbox";
    service.APIKey = kGoogleAPIKey;

完毕!厉害,没问题。

下一部分是我卡住的地方。我的问题是,如何使用 Google API Objective-C 客户端构建 MQL 查询以从 Freebase 检索结果?

在“对象和查询”部分,从上面的链接中,它指出我需要创建一个查询并执行它,但是我在哪里包含 MQL 查询?

// queryWithMethodName: methodName is the RPC method name to use
GTLQuery * query = [GTLQuery queryWithMethodName:@"mqlread"]; // Not sure if this is correct
GTLServiceTicket * ticket = [service executeQuery:query completionHandler:^(GTLServiceTicket *ticket, id object, NSError *error) {
    NSArray * items = [object items];
    NSLog(@"%@", [items description]);
    // Do something with items.
}];

作为参考,Freebase API URL 是

https://www.googleapis.com/freebase/v1/mqlread?query={}

MQL 查询是

[{
"id":   null,
"name": null,
"type": "/travel/travel_destination",
"/travel/travel_destination/tourist_attractions": [{
   "id":   null,
   "name": null
}],
"/location/location/containedby": [{
   "name": "California"
}]
}]

我真的很感激任何帮助,甚至是正确方向的一点!

4

1 回答 1

1

我不确定您为什么不能使用生成的类,但在您当前的方法中有一些基本的误解。

最重要的是 RPC API 是一个独立于其他 API 端点(例如 Freebase)。我也很确定 MQLRead 与 RPC API 不兼容,因为它的返回结果没有确定的形状。如果兼容,方法名称将是 freebase.mqlread,而不是 mqlread。

如果由于某种原因您真的不能使用生成类,我会退回到自己构建 URL。您需要做的就是将您的查询作为 JSON 对象并将其序列化为查询参数,然后添加任何其他参数,例如您的 API 密钥。结果也都是 JSON,因此只需将它们反序列化为您可以使用的 JSON 对象。

于 2013-07-10T13:47:44.490 回答