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] => 京都府
)
)
)
)
)
)