Google Knowledge Graph Search API

借助 Knowledge Graph Search API,您可以在 Google 知识图谱中查找实体。该 API 使用标准的 schema.org 类型,并符合 JSON-LD 规范。

典型使用场景

以下示例说明了如何使用 Knowledge Graph Search API:

  • 获取符合特定条件的最著名实体的排名列表。
  • 预测性地填写搜索框中的实体。
  • 使用知识图谱实体为内容添加注释/整理内容。

如需详细了解 API 方法和参数,请参阅 API 参考文档

示例请求

以下示例展示了您可以发送到 API 的一类请求。(不过请先查看前提条件部分。 您还需要插入自己的 API 密钥。)

https://kgsearch.googleapis.com/v1/entities:search?query=taylor+swift&key=API_KEY&limit=1&indent=True

上面的示例搜索会返回类似于以下内容的 JSON-LD 结果:

{
 
"@context": {
   
"@vocab": "http://schema.org/",
   
"goog": "http://schema.googleapis.com/",
   
"resultScore": "goog:resultScore",
   
"detailedDescription": "goog:detailedDescription",
   
"EntitySearchResult": "goog:EntitySearchResult",
   
"kg": "http://g.co/kg"
 
},
 
"@type": "ItemList",
 
"itemListElement": [
   
{
     
"@type": "EntitySearchResult",
     
"result": {
       
"@id": "kg:/m/0dl567",
       
"name": "Taylor Swift",
       
"@type": [
         
"Thing",
         
"Person"
       
],
       
"description": "Singer-songwriter",
       
"image": {
         
"contentUrl": "https://t1.gstatic.com/images?q=tbn:ANd9GcQmVDAhjhWnN2OWys2ZMO3PGAhupp5tN2LwF_BJmiHgi19hf8Ku",
         
"url": "https://en.wikipedia.org/wiki/Taylor_Swift",
         
"license": "http://creativecommons.org/licenses/by-sa/2.0"
       
},
       
"detailedDescription": {
         
"articleBody": "Taylor Alison Swift is an American singer-songwriter and actress. Raised in Wyomissing, Pennsylvania, she moved to Nashville, Tennessee, at the age of 14 to pursue a career in country music. ",
         
"url": "http://en.wikipedia.org/wiki/Taylor_Swift",
         
"license": "https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License"
       
},
       
"url": "http://taylorswift.com/"
     
},
     
"resultScore": 4850
   
}
 
]
}

以下代码示例展示了如何使用各种支持的语言执行类似搜索。此搜索返回与 Taylor Swift 匹配的条目。

Python

"""Example of Python client calling Knowledge Graph Search API."""
import json
import urllib

api_key
= open('.api_key').read()
query
= 'Taylor Swift'
service_url
= 'https://kgsearch.googleapis.com/v1/entities:search'
params = {
   
'query': query,
   
'limit': 10,
   
'indent': True,
   
'key': api_key,
}
url
= service_url + '?' + urllib.urlencode(params)
response
= json.loads(urllib.urlopen(url).read())
for element in response['itemListElement']:
 
print(element['result']['name'] + ' (' + str(element['resultScore']) + ')')

Java

package com.google.knowledge.platforms.syndication.entitymatch.codesample;

import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.HttpResponse;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.jayway.jsonpath.JsonPath;
import java.io.FileInputStream;
import java.util.Properties;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

/** Example of Java client calling Knowledge Graph Search API */
public class SearchExample {
 
public static Properties properties = new Properties();
 
public static void main(String[] args) {
   
try {
      properties
.load(new FileInputStream("kgsearch.properties"));

     
HttpTransport httpTransport = new NetHttpTransport();
     
HttpRequestFactory requestFactory = httpTransport.createRequestFactory();
     
JSONParser parser = new JSONParser();
     
GenericUrl url = new GenericUrl("https://kgsearch.googleapis.com/v1/entities:search");
      url
.put("query", "Taylor Swift");
      url
.put("limit", "10");
      url
.put("indent", "true");
      url
.put("key", properties.get("API_KEY"));
     
HttpRequest request = requestFactory.buildGetRequest(url);
     
HttpResponse httpResponse = request.execute();
     
JSONObject response = (JSONObject) parser.parse(httpResponse.parseAsString());
     
JSONArray elements = (JSONArray) response.get("itemListElement");
     
for (Object element : elements) {
       
System.out.println(JsonPath.read(element, "$.result.name").toString());
     
}
   
} catch (Exception ex) {
      ex
.printStackTrace();
   
}
 
}
}

JavaScript

<!DOCTYPE html>
<html>
<head>
   
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
<script>
 
var service_url = 'https://kgsearch.googleapis.com/v1/entities:search';
 
var params = {
   
'query': 'Taylor Swift',
   
'limit': 10,
   
'indent': true,
   
'key' : '<put your api_key here>',
 
};
  $
.getJSON(service_url + '?callback=?', params, function(response) {
    $
.each(response.itemListElement, function(i, element) {
      $
('<div>', {text:element['result']['name']}).appendTo(document.body);
   
});
 
});
</script>
</body>
</html>

PHP

<?php
require '.api_key';
$service_url
= 'https://kgsearch.googleapis.com/v1/entities:search';
$params
= array(
 
'query' => 'Taylor Swift',
 
'limit' => 10,
 
'indent' => TRUE,
 
'key' => $api_key);
$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['itemListElement'] as $element) {
  echo $element
['result']['name'] . '<br/>';
}

知识图谱实体

知识图谱包含数百万个条目,用于描述人物、地点和事物等现实世界的实体。这些实体构成了图表的节点。

以下是知识图谱中的一些实体类型: