開発ブログ

ページメニュー

<< googleAPI | main | まねきねこのなかのひと >>

カレンダー

<< March 2017 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>

  • 予告.inじゃないけど、データ集積ツールを作ってみた
  • 「ネット上の犯行予告を検知できるソフトの開発費を来年度予算の概算要求に盛り込む」と総務省が発言した
    と、いう報道を受け、犯行予告収集サイト「予告.in」が公開されました。
    関連サイト:ITメディア

    秋葉原殺傷事件は本当に痛ましい事件だったと思います。犠牲者のことを思うと、このような事件は二度とあってほしくないですし、ネットというものがこういう形で注視されるのは非常に残念なことだと思っています。
    そんな中、作成された「予告.in」。存在の是非はさておき、技術者が世の中に対して何かできること、と考える姿勢が凄く立派だと思いました。自分たちでも何かできないものか?と思い、以下のようなツールをつくってみました。

    指定アドレスから順次リンクを辿り、指定語句を含むページをリストアップする』ツール

    ※使い方は、本EXCELの『使い方』シートを参照してください。
    ※本ファイルはZIP圧縮してますので、解凍ソフトを用いて、解凍してください。
    ※本ファイルはEXCELマクロで作成しています。マクロを有効にして実施してください。


    このツールなら、犯罪の予告をしているようなサイトを探すだけじゃなく、指定ページのリンクを辿って自分が必要としてる語句を探し出す、ということも可能になります。有名サイトであれば検索エンジンのロボットも頻繁に確認しますが、そうでないサイトだとgoogleなどの検索エンジンではなかなか見つけられません。本システムなら、指定サイトからリンクを次々に辿ることで、指定語句を探し当てることができます

    利用例としては、
    • 自分で書いたmixiのデータをローカルに保存させるために利用
    • 特定のデータを列挙しているサイトからデータを取得させてEXCEL上で一覧表示
    • 特定の語句のいずれかを含む場合ではなく、特定の語句全てが含むケースを対象とする
    といったところでしょうか。拙作で恥ずかしいのですが、ソースはパスワードをかけずに公開します。各自が自分に使い勝手のよいようにカスタマイズしてご利用ください。いろいろできると思います。

    本件、開発は早かったのですが、いろいろと試行錯誤する羽目に。
    最初は、サーバサイドのプログラムにしようかと思ったのですが、順次リンクを辿っていくとサーバに負荷がかかりすぎるな、と断念(fopenして、そのHTMLをDOM解析そこからn件のリンク先を抜き出して…n件のリンクがm階層に渡れば、nのm乗数!)。1サイトの解析に1秒かかったとして、n=100でmが10だとしても1000000000000秒!サーバ側でやる処理じゃありません。。

    次に、クライアントサイドで処理させようと思ったのですが、わざわざEXEファイルにすると仰々しいので、Javascriptで書いてみました。iFrame内に指定URLを表示させ、そこからLINKを取得し、順次遷移を…と書いてたところで、ブラウザのセキュリティにひっかかる。。フレーム(iFlame)とtop.documentのドメインが異なる場合は、そのソースを参照することができないというやつです。

    こういうセキュリティの問題は面倒ですね…
    ここで、ちょっと頓挫。

    他の方法…と考えた時、結果をリスト表示するなら、EXCELでもいいか〜と久々にEXCELマクロで書いてみることに。EXCELマクロは、セキュリティの問題から敬遠されることが多いのは分かっているのですが、心配な方はウィルスチェックしてください。
    ※尚、ちゃんとウィルスチェックして問題ないことは確証済みです。

    最初はCreateObjectでIEコントロールを作っていたのですが、Createした直後にフォーカスがIEに移り、EXCEL側に戻ってこない、というハプニングがあったので、結局EXCEL上にWebBrowserコントロールを配置し、以下の処理を実施しました。
    1. 指定アドレスに遷移
    2. 「WebBrowser1_DocumentComplete」プロシージャで読み込み終了後に、リンクの一覧を取得し、セルに列挙(広告のURLなどは除く)
    3. ページの内容を確認し、指定語句を含めば、そのページのアドレスを列挙
    4. リンク一覧から次のリンクに遷移して処理を繰り返し、特定の件数に達したら終了

    難しい処理ではないですが、WebBrowserコントロールが呼び出すページがフレームになってる時にちょっと手こずりました。IEコントーロールをCreateした場合は以下で問題なかったんですけど。
    ieObj = document.frames(n).document
    もしかするとWebコントロールのバグかもしれません(本件はOFFICE2000での開発ですので、それ以外のコントロールだと挙動が異なるかもしれません)。他にも、しばらくマイクロソフトの環境で作成する機会から遠ざかってたので、いろいろ四苦八苦したところがあります。

    Do While WebBrowser1.Busy
     DoEvents
    Loop
    で、WebBrowser1.Busyが終わらず、無限ループから返ってこなくなったり…(これだけ悩むなら、WSHで書けば楽だったかしら?)

    そんなこんなで、いろいろ上手くないトコが多々あるのですが、お遊びがてら、公開してみることにしてみました。「予告.in」の矢野さんじゃないけど、数時間で作った作品です。深夜、ネットでEURO2008の試合を見ながら作りました。

    こういう自動化プログラムは、人の作業を飛躍的に向上することもできるのですが、その道具を使う人間の意志によって、悪意あるプログラムに改ざんすることも容易なのです。個々人の良心に期待したいと思っていますので、よろしくおねがいします。

    システムの公益性を考え、改変したマクロの再配布はご自由にしていただいて構いません。
    ただ…もし、面白いものができたら、おしえてください。

| 開発関連 | 11:10 | comments(0) | trackbacks(2) |


コメント

コメントする

この記事のトラックバックURL

http://blog.24th.jp/trackback/898590

犯行予告

ネット上での業務妨害? ・・・教えてgooもそうですが2ちゃんねるやyahoo掲...

| しんじの日記 | 2008/06/18 12:46 AM |

池袋 犯行予告おまち!

犯行予告くらいで逮捕するのはやりすぎじゃありませんか?冗談なのに犯行予告くらいで...

| 新鮮ネタ市 | 2008/06/18 5:11 PM |