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

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

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

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

Q&A

解決済

2回答

2986閲覧

PHPのfile_get_contentsの結果が、ブラウザに直接入力した時と異なってしまう。

GiveAHand

総合スコア286

PHP

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

1グッド

0クリップ

投稿2016/04/25 23:37

指定したキーワードでのyahooの検索結果で、自分のサイトが何位に表示されるかというSEO対策のプログラムを作成しています。

http://search.yahoo.co.jp/search?p=キーワード&aq=-1&oq=&ei=UTF-8&fr=top_ga1_sa&x=wrt&n=50

このURLをブラウザに直接入力すると、きちんと50位までの結果がブラウザに表示されるのですが、これを、

php

1file_get_contents("http://search.yahoo.co.jp/search?p=キーワード&aq=-1&oq=&ei=UTF-8&fr=top_ga1_sa&x=wrt&n=50");

このようにして、PHPのfile_get_contentsで検索結果ページを取得しようとすると、何故か10位までしか検索結果が表示されません。

ブラウザに直接入力した時と、PHPのfile_get_contentsで取得した時では、結果が違うのは何故なのでしょう?

また、このような場合、ブラウザに直接URLを入力した時と同じ結果のHTMLを取得するには、どうしたらいいのでしょう?

ikuwow👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

UserAgent 見て切り替えているのですかね。ぱっと見プログラムからだとわかるリクエストにはちょっとした防御策として件数を抑えて対応しているとか。
UserAgent 変えたら結果は変わりますか。

投稿2016/04/25 23:54

unau

総合スコア2468

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

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

GiveAHand

2016/04/29 03:49

unau様 お世話になります。 ご回答ありがとうございます。 UserAgentの切り替えなんですが、 ページにアクセスしたユーザーエージェントを切り替える方法がよくわかりません。 何かサンプル的なプログラムなどの掲載のある、 参考のページなどないでしょうか?
unau

2016/04/29 03:57

「file_get_contents useragent」でググると例がいくつも出てきます。 が、CHERRY さんの回答の方がアタリかもしれません。そちらもお試しください。
unau

2016/04/29 08:41

GiveAHand さん、yodel さんがやってらっしゃるように、curl とか wget とかでお手軽に試す方法も知っているといいかもです。どちらも cookie も扱えますしね。
GiveAHand

2016/04/29 11:41

yodel様 わざわざありがとうございます! そうなんですね! ただ、file_get_contents、curl、2つの方法でユーザーエージェントを指定してやってみたのですが、ステータスコード999が返ってきて取得出来ません。 でもこれは、また別の問題だと思います。 いろいろ試してみます。 ありがとうございました!
GiveAHand

2016/04/29 11:42

unau様 そうですね。 私はあまりにも無知なようです。 これを機に、いろいろ学んでみます。
guest

0

いくつか確認ですが、ブラウザは、Yahooにログインしていたりしていますか?
また、Yahoo の検索設定は、どうなっていますか?

表示件数や文字サイズ、言語設定などの検索設定は、Yahooにログインしている場合は、一度設定した値が引き継がれるみたいですが、ログインしていない場合は Cookieがあれば Cookieに設定されている条件、ない場合は、初期値が使われるようです。

検索結果の表示件数の初期値は、10件ですので、初期値が使われているのでしょう。

対応としては、HTTP/Request などを使って、Yahooにログインしてから、検索するようにするようなプログラムを書くことになると思います。

投稿2016/04/26 03:07

編集2016/04/26 03:14
CHERRY

総合スコア25171

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

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

GiveAHand

2016/04/29 03:27

CHERRY様 ご回答ありがとうございます。 いいえ、PHPでyahooブラウザにログインはしていません。 ただ、いろいろ試しているのですが、 そのYahooにログインするというのが出来なくて。。。 ネットを検索しますと、yahooにログインするには、 http://comeonly.hatenablog.com/entry/20120702/1341218892 このような記事が見つかるのですが、 これを実行するためには、 yahoo_browser.php が必要で、さらにyahoo_browser.phpを 実行するためには、 http://pear.php.net/manual/en/package.http.http-request.php ここから、HTTP_Requestをダウンロードしなくてはいけないみたいなのですが、 これのダウンロード方法がわからずに頭がいたいです。 お門違いな質問かもしれませんが、HTTP_Requestはどうやってダウンロードしたらいいのでしょう?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問