人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

他のサイトのHTMLを自分のサイト内に表示する方法が知りたいです。

やりたい事
ヤフーなどの検索結果(件数のみ)を取得して自分のサイトに表示したいと考えています。 この場合、相手のサイトのHTMLを取得して該当する件数を抜き出すという考え方でいいのでしょうか? また、このような事は可能でしょうか? 可能ならどのような技術を必要としますか?おすすめなやり方などアドバイスお願いします。

●質問者: mayo33
●カテゴリ:ウェブ制作
✍キーワード:HTML おすすめ アドバイス サイト ヤフー
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● b-wind
●10ポイント

Yahoo! の場合は API が公開されているので JavaScript 等を使用して結果を得る事が出来ます。

http://developer.yahoo.co.jp/


このようにウェブ API が公開されている場合は大抵 JavaScript で扱えますが、API が用意されていない場合は Perl や PHP 等で自分で処理するしかありません。

◎質問者からの返答

b-windさんありがとうございます。

アドバイスいただいたサイト拝見しました。

用意されていないサイトも取得したいと考えています。

>PHPでしょりするしかありません。

これに対するヒントになるサイトやアドバイスを教えてください。


2 ● falcosapiens
●10ポイント

多くの検索エンジンがAPIを公開しており

htmlを経由するまでもなく

直接にデータベースから結果を得ることができるようになっています。

http://e-words.jp/w/API.html

GoogleのAPIについての情報がもっとも多いと思われるので

このあたりから始められると良いでしょう。

http://www.asahi-net.or.jp/~cs8k-cyu/gglwebapi/index.html

◎質問者からの返答

falcosapiensさんありがとうございます。

アドバイスいただいたサイト参考にさせていただきます。

上の回答に返信したようにAPIを公開していないサイトの結果も取得したいと考えています。

それならやはりHTMLを取得する方法になるのでしょうか? 自分では以下のサイトのようにHTMLを取得してから何かを変更するのかなっと勝手に考えているのですが。 的外れでしょうか?

http://openlab.ring.gr.jp/k16/htmllint/htmllint.html


3 ● Asuca
●50ポイント ベストアンサー

たとえばYAHOO検索結果の件数を取得する場合

検索するキーワードを&keyとしてGETかPOSTして

$key = $_GET['key'];

$url = "http://search.yahoo.co.jp/search?p=$key";

$contents .= file_get_contents($url);

$contents = mb_convert_encoding($contents,"EUC-JP","auto");

preg_match("/ \/ .*strong>/", $contents, $res);

$res[0] = str_replace("約","",$res[0]);

$res[0] = str_replace("","",$res[0]);

$res[0] = str_replace(" / ","",$res[0]);

echo $res[0];

?>

こんな感じで件数が取得できます

mb_convert_encoding は自サイトにより必要ないかもしれないしS-JISかもしれない

どこを抜き出し(preg_match)変更(str_replace)するかは上記の応用です。

通常検索結果はAPIを使うのが推奨されます

検索結果を加工するのは規約に反するかもしれません

自己責任で、、(^^

◎質問者からの返答

Asucaさん 返事が遅くなりすいません。

ズバリなアドバイスありがとうございました。早速試してみました。 教えていただいた通り検索結果を取得できました。

一つ気になる点は時々リンク先の件数と表示される件数の数字が異なることです。 これはどういう現象なんでしょうか? あまり気にする事ではないのかもしれませんが。

あと、googleの検索結果を取得する場合はpreg_matchの部分を変更すればいいのですね? 勉強することが多そうですががんばります。

どうもありがとうございました!


4 ● Asuca
●50ポイント

>一つ気になる点は時々リンク先の件数と表示される件数の数字が異なることです

検索のタイミングにより変わることがあります(特にGoogle)

これはサーバがいくつにも分かれているからです。

preg_matchで抜き出す部分は結果ページのソースを見て判断してください

ちなみにGoogleは

$key = $_GET['key'];

$url = "http://www.google.co.jp/search?hl=ja&q='$key'";

$contents .= file_get_contents($url);

$contents = mb_convert_encoding($contents,"EUC-JP","auto");

preg_match("/ .*件中/", $contents, $res);

$res[0] = str_replace("件中","",$res[0]);

$res[0] = str_replace("","",$res[0]);

$res[0] = str_replace(" ","",$res[0]);

echo $res[0];

?>

これでいけると思います

◎質問者からの返答

Asucaさんこんにちは。 本当にご親切な回答ありがとうございました。

現在の状況を報告します。

今、同じページで7つくらいの結果を取得しようとしています。 思い教えていただきましたpreg_matchを使い取得には成功しました。 しかしながら表示されるまでが遅い^^; これは仕方のない事でしょうか? もう少し早く表示する方法がないか調べてみます。 ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ