2013-07-07 74 views
0

讓我首先說我是MQL,Freebase和Google API的新手。使用Google API Objective-C客戶端構建MQL查詢(Freebase)

我試圖從Freebase使用Google API Objective-C客戶端獲得結果,但是我找不到任何示例或關於在沒有生成類的情況下使用API​​的信息。

我發現這個頁面http://code.google.com/p/google-api-objectivec-client/wiki/Introduction

但部分「使用API​​沒有生成的類」不給我任何有關的信息,構建這些查詢和包含的例子是所有生成的類。

到目前爲止,我發現我需要首先創建一個帶有RPC URL(我猜這是https://www.googleapis.com/freebase)的GTLService對象,設置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. 
}]; 

僅供參考,遊離鹼API網址是

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對象即可。

+0

嘿湯姆!感謝您的迴應。 MQL,Google API和網絡通常對我來說都是新手,所以我仍然有很多東西需要學習。但是,我最終發現GTMHTTPFetcher和NSJSONSerialization,然後使用這些類來完成您所描述的內容(將查詢作爲JSON對象並將其序列化爲查詢參數)。 – Jonathan

+0

我不能編輯評論,但我的意思是說我使用GTMHTTPFetcher來使獲取請求和NSJSONSerialization將JSON對象序列化爲查詢參數,然後將結果反序列化爲JSON對象。 – Jonathan