2

これは、このサイトでこれまでに尋ねられた最も基本的な質問になります! 私はプログラミングに不慣れで、フリーベースにも非常に慣れていませんが、必要な答えがどこにも見つからなかったので、ここに行きます...

私は私のphpファイルでここから基本的なPHPクエリを使用しています:

<?php
 // include('.freebase-api-key');
  $service_url = 'https://www.googleapis.com/freebase/v1/topic';
  $topic_id = '/en/bob_dylan';
  $params = array('key'=>'xxxxxxxxxxxxxxxxxxxxxxxxxxxx');
  $url = $service_url . $topic_id . '?' . http_build_query($params);
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $topic = json_decode(curl_exec($ch), true);
  curl_close($ch);
  echo $topic['property']['/type/object/name']['values'][0]['value'];
?>

そして、私のウェブサイトに結果 (この場合は「Bob Dylan」という名前だけ) が表示されるように、これを機能させています。私の質問は、生年月日、国籍、死亡など、いくつかの情報をプルダウンする必要があるということです...しかし、echo $topic[???? 経由でアクセス、解析、表示する方法がわかりません。 ?????];。

ここに何を入れるかをどうやって見つけますか: echo $topic['????'];

私は自分のウェブサイトで次のような結果を得たいと思っています:

Name: Bob Dylan
Born: May 24, 1941
Died: -
Nationality: American
Parents: ???, ???
Children:  ???, ???

非常に新しい質問についてお詫び申し上げます。

ありがとうございました!!

. . . . . 応答してくれてありがとうニコラス。私はあなたが投稿したウェブサイトに従い、代わりにこれを試しました:

$service_url = 'https://www.googleapis.com/freebase/v1/topic';
  $topic_id = '/en/bob_dylan';
  $params = array('key'=>'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
  $url = $service_url . $topic_id . '?' . http_build_query($params);
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $topic = json_decode(curl_exec($ch), true);
  curl_close($ch);
  parse_str($topic, $txArr);
  var_dump($txArr);

しかし、それは私のサイトで次の結果をもたらします: array(1) { ["Array"]=> string(0) "" }

これを読んでいると、多くの手のひらが額に当たる音が聞こえます... 私がグリーンホーンであり、助けに感謝していると述べたように、ありがとう!

4

2 に答える 2

1

質問の 2 番目の部分に答えるには、JSON データがどのように機能し、上記のコードがそれをどのように解析しているかを理解する必要があります。

/people/person/ethnicity をクエリに追加すると、PHP では次のようになります。

$query = array(array(
  'id' => '/m/02mjmr', 
  '/people/person/gender' => NULL, 
  '/people/person/date_of_birth' => NULL, 
  '/people/person/height_meters' => NULL,
  '/people/person/ethnicity' => array()
));

このクエリは、次の JSON オブジェクトに変換されます。

[{
  "id": "/m/02mjmr",
  "/people/person/gender": null,
  "/people/person/date_of_birth": null,
  "/people/person/height_meters": null,
  "/people/person/ethnicity": []
}]

その JSON オブジェクトは URL エンコードされ、次のように API リクエスト URL に追加されます。

https://www.googleapis.com/freebase/v1/mqlread?query=[{%22id%22:%22/m/02mjmr%22,%22/people/person/gender%22:null,%22/people/person/date_of_birth%22:null,%22/people/person/height_meters%22:null,%22/people/person/ethnicity%22:[]}]

Web ブラウザーでその URL を開くと、Freebase API によって返される JSON オブジェクトが表示されます。

{
  "result": [
    {
      "/people/person/gender": "Male", 
      "/people/person/ethnicity": [
        "English American", 
        "Kenyan American", 
        "Irish American", 
        "Multiracial American"
      ], 
      "id": "/m/02mjmr", 
      "/people/person/date_of_birth": "1961-08-04", 
      "/people/person/height_meters": 1.85
    }
  ]
}

コードでは、このデータは解析されて PHP 配列オブジェクトに戻され、次のように $response 変数に格納されます。

array(
  'result' => array(array(
    '/people/person/ethnicity' => array(
      'English American', 
      'Kenyan American', 
      'Irish American', 
      'Multiracial American'
    ),
    'id' => '/m/02mjmr', 
    '/people/person/date_of_birth' => '1961-08-04', 
    '/people/person/height_meters' => 1.85
  ))
)

Freebase API から返されたすべてのトピックをループしたい場合は、PHP で次のように実行できます。

foreach ($response['result'] as $topic) { ... }

角括弧を使用して'result'、$response の配列エントリ内に含まれる各オブジェクトを反復処理するように指示する方法に注意してください。あなたが与えたクエリの場合、返されるトピックは1つだけなので、ループの最初で唯一の $topic の値は次のとおりです。

array(
  '/people/person/ethnicity' => array(
    'English American', 
    'Kenyan American', 
    'Irish American', 
    'Multiracial American'
  ),
  'id' => '/m/02mjmr', 
  '/people/person/date_of_birth' => '1961-08-04', 
  '/people/person/height_meters' => 1.85
)

これで、同じ角括弧を使用して次のようにもう 1 レベルドリルダウンすることで、$topic 内のデータにアクセスできます。

echo $topic['/people/person/gender'];

これを上記で使用した foreach ループと組み合わせることで、次のようにすべての民族値を反復処理できます。

foreach ($topic['/people/person/ethnicity'] as $ethnicity) {
  echo $ethnicity;
}

これにより、JSON データをナビゲートする方法をよりよく理解できるようになることを願っています。上で説明した手法を理解すれば、Freebase クエリから任意の値を解析できるはずです。

JSON データを含む変数の値をデバッグする必要がある場合は、次のように画面に出力できます。

echo json_encode($topic['/people/person/ethnicity'])
于 2013-05-08T00:32:27.277 に答える
1

わかりましたので、ここで新しい例を見つけました: https://developers.google.com/freebase/v1/mql-overviewで、次のように動作しています:

$query = array(array('id' => '/m/02mjmr', '/people/person/gender' => NULL, '/people/person/date_of_birth' => NULL, '/people/person/height_meters' => NULL));
        $service_url = 'https://www.googleapis.com/freebase/v1/mqlread';
        $params = array(
                'query' => json_encode($query),
                'key' => 'AIzaSyAPLxxxxxxxxxxxxxxxxx8INnsk7b2oxgc'
        );
        $url = $service_url . '?' . http_build_query($params);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $response = json_decode(curl_exec($ch), true);
        curl_close($ch);
        foreach ($response['result'] as $topic) {
                echo "Gender:  "; echo $topic['/people/person/gender'] . '<br/>';
                echo "Born:  "; echo $topic['/people/person/date_of_birth'] . '<br/>';
                echo "Height (meters):  "; echo $topic['/people/person/height_meters'] . '<br/>';

そして、これはリターンがどのように見えるかです:

Gender: Male
Born: 1961-08-04
Height (meters): 1.85

これはまさに私が探しているものですが、最後に理解すべきことは、複数のプロパティを照会して表示する方法です。複数の応答が返され、コードが壊れるため、クエリに「/people/person/ethnicity」を含めることができません。

ですから、誰かがマルチレスポンス クエリと表示を可能にする方法について意見を出すことができれば、それはうねりになるでしょう。

助けてくれてありがとう!

于 2013-05-03T11:40:31.170 に答える