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 ( 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.
}];

参考までに、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 が他のもの (Freebase など) とは別の API エンドポイントであることです。また、MQLRead は RPC API と互換性がないことも確信しています。これは、返される結果が確定的な形状を持たないためです。互換性がある場合、メソッド名は mqlread ではなく、freebase.mqlread になります。

なんらかの理由で生成クラスを本当に使用できない場合は、自分で URL を作成する方法に戻ります。クエリを JSON オブジェクトとして取得し、それをクエリ パラメーターとしてシリアル化してから、API キーなどの他のパラメーターを追加するだけです。結果もすべて JSON であるため、操作可能な JSON オブジェクトに逆シリアル化するだけです。

于 2013-07-10T13:47:44.490 に答える