首先让我说我是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"
}]
}]
我真的很感激任何帮助,甚至是正确方向的一点!
答案 0 :(得分:1)
我不确定为什么你不能使用生成的类,但是你当前的方法存在一些基本的误解。
最重要的是,RPC API是与其他API(例如Freebase)不同的独立API端点。我也很确定MQLRead与RPC API不兼容,因为它的返回结果没有确定的形状。如果它是兼容的,方法名称将是freebase.mqlread,而不是mqlread。
如果由于某种原因你真的不能使用生成类,我会回过头来自己构建URL。您需要做的就是将您的查询作为JSON对象并将其序列化为查询参数,然后添加任何其他参数,例如您的API密钥。结果都是JSON,所以只需将它们反序列化为可以使用的JSON对象。