どんなサイトでも、マッシュアップすることができる。APIが公開されていなくてもいい。新たなまとめサイトを構築し、情報付加価値を高めるための手法を解説しよう。
このコンテンツは、オンライン・ムックPlus「まとめサイト2.0」の一部です。関連する記事は、こちらでご覧になれます。
さまざまなコンテンツを組み合わせて、好みに合ったページ(サービス)を作り上げる「マッシュアップ」。これの最たるものは、コンテンツ提供者が公開する「WebAPI」の組み合わせで実現するものだ。
しかし、利用する仕様を整備して、効果的なデータだけをメータデータ配信するWebAPIは、まだそれほど普及していない。つまりマッシュアップというキーワードから流行っている兆しはあっても、対象として使うことができるものは、意外と少ない。思い出してほしい。
このような状況を打開するのが、HTMLコンテンツを抜き出して加工する「スクレイピング(scraping)」という手法だ。
このオンライン・ムックPlus「まとめサイト2.0」では、例として「ITmediaオルタナティブ・ブログ」で公開されているコンテンツをスクレイピングし、人気記事の順位を集計したり、各ブログでよく使われている語句を抽出することなどを試みていく。主な対象読者は、Webサーバのシェル権限を持つサーバ管理者となるだろう。幾つかのツールを駆使し、本家サイトの情報量を超えるようなまとめサイトを作り上げる。これが、この記事の目的である。
さまざまなコンテンツを組み合わせて、一つの新しいサイトを構築したい。そんなユーザーの要望を叶えたのが、「WebAPI」だ。
WebAPIは、コンテンツ制作者が公開する公式のAPIである。HTTPを経由してWebAPIを呼び出すと、結果が戻される。この結果を利用者が好きな形にデータ加工し、HTMLを生成することができるのだ。
マッシュアップの種別は、主に2つへと分けることができる(図1)。
1)サーバサイドで生成する
一つは、サーバに配置したCGI(PerlやPHPのプログラム)からWebAPIを呼び出し、サーバ側でHTMLを生成するというものだ。これはプログラミングのハードルが高いだけでなく、CGIが動くサーバが必要となる。
サーバサイドで生成する場合、コンテンツ提供元サーバとCGIが配置されたサーバとで通信が発生する。そのため、ユーザー数が多いと、サーバの回線帯域が不足する恐れもある。
メモ■ 正確に表現すれば、「CGI」はCommon Gateway Interfaceの略。現在のWebサーバでは、mod_perlやmod_phpなどモジュール化された方法でプログラムが動くため、CGIという用語は不適切だ。本来は、「Webアプリケーション」や「Webサーバプログラム」などと呼ぶのが正しい。しかしこれでは分かりづらくなるため、本連載では、Webサーバ側で動作するプログラムを「CGI」と称する。
2)クライアントサイドで結びつける
もうひとつの方法は、クライアントサイドで動くJavaScriptからWebAPIを呼び出して、動的にコンテンツを生成する方法だ。
JavaScriptはクライアントサイドで動作するため、JavaScriptのコードをHTML内に入れるだけで実装できる。つまり、どんなサーバでも動くし、HTML内にJavaScriptのコードをコピペするだけでよいという手軽さがある。
そして通信についても、各ユーザーのWebブラウザが行うため、サーバの負荷も少なくて済む。近年マッシュアップ人気が高まってきたのは、JavaScriptに対応したWebAPIが増えてきたためだ。
メモ■ ここでは詳細な説明を省くが、JavaScriptを使ったWebAPIでは、JSONP(JavaScript Object Notation with Padding)という手法を用いて通信する。これはAjaxアプリケーションで使われる通信方式の派生だ。多くのAjaxアプリケーションでは、XMLHttpRequestオブジェクトを使って通信するが、これはクロスドメイン(異なるドメインのURL)での通信ができない。そこで、代わりの方法として編み出されたのが、動的にscript src="https://image.itmedia.co.jp/enterprise/articles/0712/03/URL"のタグを作るというJSONPである。
マッシュアップできるのは、通常であればWebAPIが提供されているコンテンツに限られる……、という認識が多い。しかし、それではWebAPIが提供されていないコンテンツは、マッシュアップできないのかといえば、実はそういうわけでもない。よくよく考えると、コンテンツはHTMLデータとして公開されている。よって、そのHTMLをパースして解析し、ほしいところを抜き出せばよいわけだ。
この手法を「スクレイピング(scraping)」と呼ぶ。
図2を見ることから分かるように、幾つかのサイトをスクレイピングして、1つのHTMLページを作ると、ユーザーからは、まとめあげられたサイトとして見えるのだ。
そこでこの連載では、このようなサイトのことを「まとめサイト」と呼ぶことにしよう。
以下、スクレイピングして、どのように「まとめサイト」を作っていけばよいのかを考察していく。
図2を見ると分かるように、「まとめサイト」は、とても下品な言い方をすれば、「コンテンツの一部を切り貼りしてパクる」というものだ。
確かに、一部だけを、そのまま掲載すれば、パクり行為に過ぎない。しかしここでは、コンテンツの一部を、そのまま掲載するのではなく、「集計や解析処理もできる」という点に注目したい。WebAPIとして公開されているもののほとんども、要約された情報を公開し、自由に組み立てることができるよう一部を提供しているだけだ。
実例を挙げよう。
1)ランキングをグラフ化する
サイトによっては、記事の週間ランキングや月刊ランキングが過去に渡って掲載されていることがある。このようなサイトでは、それらの過去ページをたどって集計し、グラフ化すれば、ランキングの変動を視覚化できるだろう。
2)注目のキーワードの傾向を調べる
サイトのコンテンツをすべてたどり、語句分析を行い、語句の出現頻度を調べるというアプローチだ。ニュースやブログのサイトであるならば、出現頻度順に並べることで、「注目のキーワード」の傾向が分かってくるはずだ。
ここでポイントとなるのは、スクレイピングはHTMLを抜き出すものの、単純なコピペではないという点だ。
実際、スクレイピングする際には、少なくともHTMLのタグを自身のサイトに合うように変更する。そうしなければ、複数のサイトをまとめ上げる時に統一感が出ない。そしてさらなる応用として、いま挙げたように、「集計」や「解析」の処理があるわけだ。
Copyright © ITmedia, Inc. All Rights Reserved.