「... Googleを改善しますか?」

64ビットおよび並列プログラムの問題を見つけるためのPVS-Studioコードアナライザーの開発中に、いくつかのトピックに関するインターネット上の最新情報を収集する必要がありました。 例えば、私たちのツールに興味があるかもしれないプログラマーのフォーラムやブログの質問に答えることは常に役に立ちます。 収集の過程で、ネットワーク上に多くの情報があり、非常に長くて疲れる期間を手動で検索していることがわかりました。そこから、新しいデータの検索を自動化するタスクが登場しました。 この投稿では、これを行う方法を紹介します。





確かに、あなたはすぐに言うでしょう:「ハハ! 彼らは自転車を思いつき、Googleアラートについて知らない。」 Googleアラートについて知っています。 これはほとんど必要なものですが、それではありません:-)。 Googleアラートを使用してから6か月以上、必要なものを取得できませんでした。 必要なものは次のとおりです。





そのため、自転車を作ろうとすることにしました。



このタスクの一部として、指定されたサイトで最大30個の新しいマテリアルを検索し、自動検索を開始する24時間以内に作成する必要があります。 つまり、大雑把に言えば、誰が最後の日にインターネットで何を書いたのか。 入力は次のようになります。





アイデア



ネットワークには検索サービスを提供する多くのサービスがあり、その機能を使用してタスクを実装するのが論理的です。 google.com検索エンジンは、私たちの意見では最も適切なものとして選択されました。



Google検索



操作の原則は、他の検索エンジンと同じです。リクエストがGoogleに送信され、応答が返されます。 同時に、検索エンジンにはリクエストを生成するための柔軟な設定があるため、目的のリクエストを生成できます。



Google検索オプション



最も興味深い(タスクのフレームワーク内の)検索パラメーターを検討してください。



www.google.com/search 実際にアドレス
as_q 検索語句(語句ではなく語句)
ページに表示される結果の数
as_eq 検索結果に表示すべきではない単語
as_sitesearch 検索するサイトのURL


検索エンジンには他のパラメーターもありますが、タスクの一部としては面白くありません。 検索パラメーターを使用したGoogleリクエストの例:



 http://www.google.com/search?as_q=64-bit+portability+&hl=en&newwindow=1&num=30&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0 %B2 + Google&as_epq =&as_oq =&as_eq =%D0%BA%D1%83%D0%BF%D0%B8%D1%82%D1%8C +%D1%81%D0%BA%D0%B0%D1%87% D0%B0%D1%82%D1%8C +&lr = lang_ru&cr =&as_ft = i&as_filetype =&as_qdr = d&as_occt = any&as_dt = i&as_sitesearch = http://www.codeguru.com/&as_rights=&safe=images


使い方



上記から、Google検索エンジンを使用して検索を自動化する可能性があることになります。 アルゴリズムは次のようになります。





実装



スクリプトはphpで記述されています。



入力データ



入力データには、検索するURLサイトのリスト、検索フレーズのリスト、検索結果に含まれてはならない単語のリストの3種類があります。 このデータを表すには、次の形式のxmlファイルが使用されます。



 <?xml version = "1.0" encoding = "utf-8"?>
 <search_params lang = "en">
	 <サイト>
		 <url> http://www.dreamincode.net </ url>
		 <url> http://forum.vingrad.ru/ </ url>
		 <url> http://forum.sources.ru/ </ url>
		 <url> http://groups.google.com/ </ url>
	 </ sites>
	 <単語>
		 <ホワイトリスト>
			 <phrase> "64ビット" c ++ </ phrase>
			 <phrase> 64ビットの移行</ phrase>
			 <phrase> viva64 </ phrase>
		 </ white_list>
		 <black_list>
			 <phrase>購入</ phrase>
			 <phrase>ダウンロード</ phrase>
		 </ black_list>
	 </ words>
 </ search_params>


XML解析



XMLファイルの構造はシンプルでサイズが小さいため、 PHPスクリプトSimple HTML DOM Parserを使用できます。



スクリプトの使用法はドキュメントで説明されていますが、DOMで使用する技術は、有名なjavascriptライブラリであるJQueryの方法と非常に似ていることに注意してください。 たとえば、次のコードは、google.comのhtmlページからすべてのリンクを取得し、画面に表示します。



 include( '../ simple_html_dom.php');
 // URLまたはファイルからDOMを取得します
 $ html = file_get_html( 'http://www.google.com/');
 //すべてのリンクを見つける
 foreach($ html-> $ eとして( 'a')を検索)
     echo $ e-> href。  '<br>';


ただし、Simple HTML DOM Parserを使用する場合、わずかなメモリの問題があります。 file_get_html関数は、呼び出しごとにsimple_html_domクラスの新しいオブジェクトを作成します。この関数がループで呼び出されると、メモリが不足します。 何らかの理由で、強制的にリリースすることはできません。 解決策は、この関数をループで使用するのではなく、一度呼び出して、simple_html_domクラスの1つのオブジェクトのみを操作することです。



スクリプト作成



MVCパターンを使用して記述された通常のphpスクリプトは、実際には興味深いものではありません。 ソースコードも複雑ではありません。



ユーザーインターフェイスは非常に禁欲的です-ページにアクセスするとき、「リクエストを送信」ボタン(ブラウザウィンドウ内)が1つあり、それを押すとしばらくしてから結果が表示されます。



まとめ



このスクリプトを実装した後、過去24時間に対象領域(64ビットおよび並列プログラミング)で世界で何が起こったのかを常に把握しています。




All Articles