繁体   English   中英

使用Google API Objective-C客户端构造MQL查询(免费库)

[英]Using Google API Objective-C client to construct MQL queries (Freebase)

首先,我要说我是MQL,Freebase和Google API的新手。

我正在尝试使用Google API Objective-C客户端从Freebase获得结果,但是如果没有生成的类,我找不到使用API​​的任何示例或信息。

我已经找到此页面http://code.google.com/p/google-api-objectivec-client/wiki/简介

但是“使用没有生成的类的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"
}]
}]

我非常感谢您提供的任何帮助,甚至对正确方向的帮助!

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM