DBpediaの利用 (SPARQL)
Wikipediaをスクレイピングしようと思い、curlでいろいろ取得しようと思ったのですが、その前に、そういえば、DBpediaより、SPARQLクエリを使って、データを取得するやり方があったなと思い。使ってみることにしました。ネットで検索すると、クエリの書き方がいろいろでてきますが、まだまだ不明点が多く、自分が出力したいような書き方はわからず、このあたりも、書籍でも購入して、さらりと知識でも蓄えておこうかと思います。いろいろ出力できてしまうので、これまで、他のサイトで、疑問に感じていた箇所で、特にどこのAPIデータを持ってきているのだろうなどと考えていたことが、なるほど! これを利用していたのかと納得。とりあえず、今のところは、SEO対策の一つとして、Goolgeのローカル検索結果に対応するために、利用しようかと思います。
下記は、とりあえず、都道府県名から、情報を取得することと、隣接している都道府県を取得することにしました。
一つ目の関数の$query の部分にSPARQLクエリが代入されており、WHEREの部分を使いすることで、要素を取得することができます。今回は、abstractとleaderNameだけ取得してみました。また、2つ目の関数では、隣接している都道府県を取得しています。
<?php
$js_p = '福井県';
function getinfo_p($arg){
$format = 'json';
$query = "
PREFIX dbpedia: <http://ja.dbpedia.org/resource/>
PREFIX dbp-owl: <http://dbpedia.org/ontology/>
SELECT *
WHERE {
dbpedia:$arg dbp-owl:abstract ?abstract .
dbpedia:$arg dbp-owl:leaderName ?leaderName .
}
";
$searchUrl = 'http://ja.dbpedia.org/sparql?'
.'query='.urlencode($query)
.'&format='.$format;
return $searchUrl;
}
function getinfo_next($arg){
$format = 'json';
$query = "
SELECT DISTINCT ?rinsetsu_label
WHERE {
?tokyo_uri prop-ja:隣接都道府県 ?rinsetsu_uri .
?tokyo_uri rdfs:label ?tokyo_label.
FILTER regex(?tokyo_uri , '". $arg ."')
?rinsetsu_uri rdfs:label ?rinsetsu_label.
}
";
$searchUrl = 'http://ja.dbpedia.org/sparql?'
.'query='.urlencode($query)
.'&format='.$format;
return $searchUrl;
}
function request($url){
if (!function_exists('curl_init')){
die('CURL is not installed!');
}
$ch= curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
if(!empty($js_p)){
$pre[0] = getinfo_p($js_p);
$info[0] = json_decode(request($pre[0]), true);
$next[1] = getinfo_next($js_p);
$info[1] = json_decode(request($next[1]), true);
echo "<pre>";
print_r($info);
echo "</pre>";
}
?>
・出力結果
(
[0] => Array
(
[head] => Array
(
[link] => Array
(
)
[vars] => Array
(
[0] => abstract
[1] => leaderName
)
)
[results] => Array
(
[distinct] =>
[ordered] => 1
[bindings] => Array
(
[0] => Array
(
[abstract] => Array
(
[type] => literal
=> ja
[value] => 福井県(ふくいけん)は、日本海や若狭湾に面する、日本の県の一つである。県庁所在地は福井市。
)
[leaderName] => Array
(
[type] => uri
[value] => http://ja.dbpedia.org/resource/西川一誠
)
)
)
)
)
[1] => Array
(
[head] => Array
(
[link] => Array
(
)
[vars] => Array
(
[0] => rinsetsu_label
)
)
[results] => Array
(
[distinct] =>
[ordered] => 1
[bindings] => Array
(
[0] => Array
(
[rinsetsu_label] => Array
(
[type] => literal
=> ja
[value] => 岐阜県
)
)
[1] => Array
(
[rinsetsu_label] => Array
(
[type] => literal
=> ja
[value] => 滋賀県
)
)
[2] => Array
(
[rinsetsu_label] => Array
(
[type] => literal
=> ja
[value] => 石川県
)
)
[3] => Array
(
[rinsetsu_label] => Array
(
[type] => literal
=> ja
[value] => 京都府
)
)
)
)
)
)