質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

5013閲覧

【PHP】google suggest apiで、検索キーワードのサジェストが取得できない

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2016/10/30 10:29

編集2016/10/30 13:20

PHPで、google suggest apiを利用して、入力されたキーワードのサジェストを「a~z」,「あ~ぽ」まで全て取得するプログラムを組んでいます。

まず、単純に入力されたキーワードのサジェストを取得するだけの記述として、

PHP

1 $url = "http://www.google.com/complete/search?hl=ja&output=toolbar&ie=utf_8&oe=utf_8&q=".urlencode($keywoed); 2 $toplevel = simplexml_load_file($url); 3 foreach ($toplevel->CompleteSuggestion as $completeSuggestion) { 4 $suggest_word_array[] = $completeSuggestion->suggestion->attributes()->data; 5 }

このように書いた時、10件の検索結果が取得できました。

続いて、a~z」,「あ~ぽ」までのサジェスト全件を取得するために、

PHP

1 $added_letters_array= array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","あ","い","う","え","お","か","き","く","け","こ","さ","し","す","せ","そ","た","ち","つ","て","と","な","に","ぬ","ね","の","は","ひ","ふ","へ","ほ","ま","み","む","め","も","や","ゆ","よ","ら","り","る","れ","ろ","わ","を","ん","が","ぎ","ぐ","げ","ご","ざ","じ","ず","ぜ","ぞ","だ","ぢ","づ","で","ど","ば","び","ぶ","べ","ぼ","ぱ","ぴ","ぷ","ぺ","ぽ");foreach ($added_letters_array as $add_letter) { 2 $search_word = $keywoed.$add_letter; 3 4 $url = 'http://www.google.com/complete/search?hl=ja&output=toolbar&ie=utf_8&oe=utf_8&q='.urlencode($search_word); 5 $toplevel = simplexml_load_file($url); 6 foreach ($toplevel->CompleteSuggestin as $completeSuggestion) { 7 $suggest_word_array[] = $completeSuggestion->suggestion->attributes()->data; 8 } 9 }

このように記述したところ、$sugest_word_arrayに値が入っていない旨のエラーを吐きました。

ネットで原因を探っても文字コードの記事しか出てこず、リクエストURLでieとoeにUTF-8を指定しているので手詰まり状態です。

検索キーワードは複数試しましたが、どれも同じくエラーです。

原因と解決策を教えていただきたいです。
よろしくお願い致します。

※追記1※

PHP

1 foreach ($toplevel->CompleteSuggestin as $completeSuggestion) { 2 $suggest_word_array[] = $completeSuggestion->suggestion->attributes()->data; 3 }

このforeachの中に、print 'a';の記述を入れたところ、「a」が表示されませんでした。
foreachの中に入っていない可能性があります。

※追記2※

$added_letters_array= arra("a","b","c","d","e",...
上記のコードを、
$added_letters_array= array("a");
この記述に変更した場合の$toplevelの中身は以下の通りです。

object(SimpleXMLElement)#1 (1) {

["CompleteSuggestion"]=>
array(10) {
[0]=>
object(SimpleXMLElement)#2 (1) {
[0]=>
object(SimpleXMLElement)#12 (1) {
["@attributes"]=>
array(1) {
["data"]=>
string(32) "ポケモンgoアップデート"
}
}
}
[1]=>
object(SimpleXMLElement)#3 (1) {
[0]=>
object(SimpleXMLElement)#12 (1) {
["@attributes"]=>
array(1) {
["data"]=>
string(23) "ポケモンgoアプリ"
}
}
}
[2]=>
object(SimpleXMLElement)#4 (1) {
[0]=>
object(SimpleXMLElement)#12 (1) {
["@attributes"]=>
array(1) {
["data"]=>
string(23) "ポケモンgo遊び方"
}
}
}
[3]=>
object(SimpleXMLElement)#5 (1) {
[0]=>
object(SimpleXMLElement)#12 (1) {
["@attributes"]=>
array(1) {
["data"]=>
string(29) "ポケモンgoアカウント"
}
}
}
[4]=>
object(SimpleXMLElement)#6 (1) {
[0]=>
object(SimpleXMLElement)#12 (1) {
["@attributes"]=>
array(1) {
["data"]=>
string(20) "ポケモンgo相棒"
}
}
}
[5]=>
object(SimpleXMLElement)#7 (1) {
[0]=>
object(SimpleXMLElement)#12 (1) {
["@attributes"]=>
array(1) {
["data"]=>
string(23) "ポケモンgo飽きた"
}
}
}
[6]=>
object(SimpleXMLElement)#8 (1) {
[0]=>
object(SimpleXMLElement)#12 (1) {
["@attributes"]=>
array(1) {
["data"]=>
string(26) "ポケモンgoアイテム"
}
}
}
[7]=>
object(SimpleXMLElement)#9 (1) {
[0]=>
object(SimpleXMLElement)#12 (1) {
["@attributes"]=>
array(1) {
["data"]=>
string(23) "ポケモンgoアプデ"
}
}
}
[8]=>
object(SimpleXMLElement)#10 (1) {
[0]=>
object(SimpleXMLElement)#12 (1) {
["@attributes"]=>
array(1) {
["data"]=>
string(20) "ポケモンgo足跡"
}
}
}
[9]=>
object(SimpleXMLElement)#11 (1) {
["suggestion"]=>
object(SimpleXMLElement)#12 (1) {
["@attributes"]=>
array(1) {
["data"]=>
string(20) "ポケモンgo相性"
}
}
}
}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

$toplevelにエラーが返っていないか確認してみてはいかがでしょうか。同じAPIに多数のリクエストを短時間で行うと、エラーを返すような気がします。

例えば $added_letters_array= array("a"); でも空配列になるのでしょうか。

投稿2016/10/30 11:32

kei344

総合スコア69364

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/10/30 12:04 編集

回答ありがとうございます。 $toplevelにはデータが入っていることが確認できています。 また、$$added_letters_array= array("a");で試してもエラーです。(Undefined variable)
kei344

2016/10/30 12:05

最初のコード(foreachを使っていないもの)でもう一度取得は出来ますか? > $toplevelにはxmlのデータが入っていることが確認できています。 その中に結果(CompleteSuggestin)は入っていますか? > $$added_letters_array= array("a");で試してもエラーです。 $$になっているからでは?
退会済みユーザー

退会済みユーザー

2016/10/30 12:32

最初のコードで取得できています。 結果の中にCompleteSuggestinは入っています。 (object(SimpleXMLElement)#1 (1) { ["CompleteSuggestion"]=>) 手入力をしてしまったので$を1つ間違えてつけてしまいましたが、コードではしっかりと$added_letters_array= array("a");となっています。
kei344

2016/10/30 12:39

Undefined variableはどの部分で起こりますか?
退会済みユーザー

退会済みユーザー

2016/10/30 12:41

$suggest_word_array[] = $completeSuggestion->suggestion->attributes()->data; この部分です。 Notice: Undefined variable: suggest_word_array var_dumpで出力しており、出力結果はNULLです。
kei344

2016/10/30 13:25

$suggest_word_array = array();を $added_letters_array の前に置いてみては?
退会済みユーザー

退会済みユーザー

2016/10/30 13:34

空の状態で表示されます。 array(0) { } 追記1でも書かせていただいたのですが、2つ目のforeachに入っていないようです。 こちらも調べてみましたがforeachに入らない条件がよく分からないのですが、原因としてなにがあげられるでしょうか?
kei344

2016/10/30 13:41

$toplevel->CompleteSuggestin ↓ $toplevel->CompleteSuggestion
退会済みユーザー

退会済みユーザー

2016/10/30 13:42

連続ですみません。 $toplevel->CompleteSuggestin こちらを $toplevel->CompleteSuggestion このように直したところ、動きました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問