うつ病WEBデザイナーがうつ病を克服するため独学で学んだことをアウトプットして共有するためのブログ

うつWEB

SEO WEBデザイン スクリプト

PHPでGoogle Suggest API 関連キーワード取得ツールを作ってみた話

2019年10月10日

ブログを書くときSEOでキーワードどうしようって思いますよね。

そんなときって、実際にGoogleの検索ボックスにブログに書きたいテーマのキーワード入れて、候補に出てくるのを調べたりしますけど、検索キーワード候補を一覧取得してくれるようなサイトって結構あります。

http://www.related-keywords.com/ とか、よく利用します。

ここまでかゆいところに手が届くくらいの本格的なツールじゃなくても、Googleサジェスト(検索候補)を取得する程度のプログラムならひょっとして簡単に作れるんじゃないかなあ?って安易に思ってみたんです。

Google Suggest API とは

というわけで「Google サジェスト api 取得」ちょっとググってみると、案外みんな簡単に作ってらっしゃる模様。

とりあえず

https://so-zou.jp/web-app/tech/web-api/google/suggest/

上記のサイトで紹介されている「XML形式」での取得を試してみることにしました。
まあ現在ではXML形式でしか対応してないそうなんですが。

といっても、http通信なので普通にブラウザのアドレスバーに入力してもサジェスト一覧を見ることはできます。

https://www.google.com/complete/search?hl=ja&output=toolbar&q=

上記URLをブラウザのアドレスバーにコピペして、最後に検索したいキーワードを入力してEnter叩けば表示されますし、普通の検索と同じように、複数キーワードを半角スペースでつなげば同様に検索候補を取得できる。

こんな感じ。

まあ、面倒でなければこれで充分な気もするし、ツール化するまでもない感じはあるけど、スマホとかだとURLコピペしてって作業もめんどい、使いやすくするためみなさんツール化するわけですね。

検索ツール以外の用途としては「指定されたサイトのテキストがキーワードにマッチしているか判定するツール」みたいなのもこのAPI使ってる感じでしょう。

もっと手軽に使えれば(十分手軽だけども)なんか面白いことできそうです。

関連キーワード取得ツールをPHPで作ってみる

なんと秒速でできちゃいました。

うそです。

PHPを最初からコーディングするの久しぶりだったのでだいぶとエラーと格闘しながら、2時間くらいかかった。

でも現役バリバリのPHPプログラマーならそれこそ本当に秒速でつくれちゃいそうなくらい簡易なものです。

というわけで、Google Suggest API 関連キーワード取得ツールデモはこちら

PHPソースはこちら

 html<?php
ini_set('display_errors', 1);
error_reporting(E_ALL); if($_REQUEST){
$hl = ($_REQUEST['hl']) ? $_REQUEST['hl'] : 'ja';
$q = ($_REQUEST['q']) ? $_REQUEST['q'] : '';
}else{
$hl = 'ja';
$q = '';
} function getSuggestList($lang,$qstring){
$list = array();
if($lang && $qstring){
$xml = 'http://www.google.com/complete/search?output=toolbar&ie=utf-8&oe=utf-8&hl='.$lang.'&q='.urlencode($qstring);
$xmlData = simplexml_load_file($xml);
foreach($xmlData->CompleteSuggestion as $data){
$list[] = $data->suggestion->attributes()->data;
}
}
return $list;
} ?>
<form action="googlesuggest.php" method="get">
<input type="hidden" name="hl" value="ja">
<input type="text" name="q" value="<?php echo $q ?>" placeholder="キーワードを入力"><input type="submit">
</form> <ul class="googleSuggest">
<?php
$first = getSuggestList($hl,$q); foreach ($first as $keyword) {
?>
<li>
<a target="_blank" href="https://www.google.com/search?hl=<?php echo $hl;?>&q=<? echo urlencode($keyword) ?>"><? echo $keyword ?></a>
<ul>
<?php
$second = getSuggestList($hl,$keyword);
foreach ($second as $keyword2) {
?>
<li>
<a target="_blank" href="https://www.google.com/search?hl=<?php echo $lang;?>&q=<? echo urlencode($keyword2) ?>"><? echo $keyword2 ?></a>
</li>
<? } ?>
</ul>
</li>
<? } ?>
</ul>

2階層目までリスト出力するようにしてみました。
入れ子構造増やせば3~4階層とかもできるけど、とめどもないので今回は2階層目までにしました。

Google Suggest APIからXMLが返ってこないエラーに嵌った

最初、Google Suggest APIリクエストするURLはこうしてました。

$xml = 'http://www.google.com/complete/search?output=toolbar&hl='.$lang.'&q='.urlencode($qstring);

でも、GoogleサジェストAPIからXMLが取得できない!なんで?って思ったらXMLこんなエラーが出てました。

Warning: simplexml_load_file(): http://www.google.com/complete/search?output=toolbar&hl=ja&q=%E3%81%8C%E3%81%A3%E3%81%8B%E3%82%8A:1: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0x82 0xAA 0x82 0xC1 in ***********************************************************

どうやら文字コードをUTF-8指定しないとダメっぽいです。

なので、Google Suggest APIリクエストするURLのクエリーストリングに「&ie=utf-8&oe=utf-8」を追加すればよいとのこと。

$xml = 'http://www.google.com/complete/search?output=toolbar&ie=utf-8&oe=utf-8&hl='.$lang.'&q='.urlencode($qstring);

これでうまく取得できました。

こういうちょっとしたことにつまづいて何時間も悩んじゃうことってありますよね。
そういう人のために、こんなちょっとしたエラーと対応も書いておくと誰かの役に立つんじゃないかしら。
私もいろんなブログの情報に助けられましたので。

以上です。

-SEO, WEBデザイン, スクリプト

Copyright© うつWEB , 2019 All Rights Reserved Powered by AFFINGER5.