Open Source WEB

Alexaのサービスが12月より有償化してしまったにおいて、

実は、もう1つの選択もありうる。いや、これは、貧乏人戦略で、お金をなんとか払わなくても済む方法である。ブラウザではなく、何等かのソフトでブラウザの振りをしてHTMLを取りだして、その中をプログラムで解析して必要なデータを取り出すのである。

と書いておいたが、実際にこの方法を使っていた。 つまり、wgetを使ってhtmlファイルを取得し、その中味を解析して利用していた訳だ。

しかし、そう言う風にして動いていたプログラムが、ある日動かなくなってしまった。 色々調べたら、wgetでデータが取得できていないことが判明してしまった。 やはり、セコイ、貧乏臭い方法は駄目になってしまった。

という訳で、ちゃんと登録し、データを取得することにしたので、 どのようにしたかをさらっと書いておこうと思う。


http://www.alexa.com/ の左側の DATA SERVICE という中に、 Web Information Service があり、その中の Service Detail に各種サービスが並んでいるが、 ここでは、Url Information を選ぶ。

すると、Alexa Web Information Service というページにたどり着き、 お値段とかも書いてある。右上に

のボタンが有り、上のボタンを押して、Account Activity を選んで New Customer を選択し、その後指示に従ってやっていくと登録できる。

そして、Access Key Identifiers のページへ行くと、 Access Key ID:Secret Access Key: の2つが表示され、 これを利用すると、http://www.alexa.com/ でブラウザに表示されるデータが XMLで取得できるのである。

それで、確かにXMLが取得できるようになったのだが、 よく見てみるとデータとしては AWS.NotAuthorized しか入っていない。 つまり認められていないアクセス、つまり不正アクセスとみなされたようだ。 Access Key ID: と Secret Access Key: のいずれもちゃんと指定しているのに、 何かおかしい。

と思って一晩挫折してから調べ直したら、まだ登録手続が半分しか済んでいない ことに気がついた。カギをもらっただけでは駄目で、それを有効にするために、 下側のボタン「Sign Up For Web Service」を押して、 さらに手続を続けなければならないのだった。 ここでの手続の中で、ちゃんとカード番号が要求された。 そういえば、カード番号を入れなくてもサービスが開始されるのは 親切な作りだな、と思ったのだが、そこで気がつくべきであった。

WEBで調べてみたら、http://sho.tdiary.net/20051120.html に同じ ことをしてしまった人が発見できて、1人ではなかったので安心した。

正規の方法でデータを取得してみたら、ずいぶん細かいデータまで 提供してくれることが分かった。

詳しい使い方、パラメータの指定まで書くと大変なことになるので、 Alexaの説明を読んで確かめて欲しい。

Perlから使ってみたが、その他の例もいっぱいあり、 使い方は、プログラミングと英語がそれなりに出来れば大丈夫だと思う。

これでやっと普通の利用者になれたかな。


Perlのプログラム

Perl初心者なんだが、作ったプログラムのうちの、Alexaからデータを取りだす 部分だけを公開しておこうと思う。目がつぶれたりするかも知れないので、 どう利用するかは自己責任ということで、あくまで参考、無保証! なお、Linuxしか使っていないので、他の場合は自己調整ということで。

#!/usr/bin/perl -w
use  Digest::HMAC_SHA1 qw(hmac_sha1);
use  URI::Escape;
use  MIME::Base64;
use  LWP::Simple;
use  XML::XPath;

no warnings "uninitialized";

$AWS_ACCESS_KEY_ID = "ここに Access Key ID: の値を書く";
$SECRET_ACCESS_KEY = "ここに Secret Access Key: の値を書く";
$BASE_URL = "http://awis.amazonaws.com/onca/xml";
$target = "調べたいドメインを書く";
$timestamp = generate_timestamp();
$signature = calculate_RFC2104_HMAC
       ("AlexaWebInfoServiceUrlInfo$timestamp", $SECRET_ACCESS_KEY);

$url = "$BASE_URL?Service=AlexaWebInfoService"
        . "&Operation=UrlInfo"
        . "&AWSAccessKeyId=$AWS_ACCESS_KEY_ID"
        . "&Signature=$signature"
        . "&Timestamp=$timestamp"
        . "&Url=$target"
        . "&ResponseGroup=TrafficData";

$xml = get($url);

$xp = XML::XPath->new(xml => $xml);

以下省略。XMLの処理を頑張ってくれたまえ。

$signature を作るときの最初の引数が、利用するサービスによって異なる ので注意が必要だ。AlexaWebInfoService の UrlInfo サービス を利用している ので、最初の引数が上のようになっている。

sub calculate_RFC2104_HMAC , sub generate_timestamp があるが、 これらのサブルーチンは、Alexaのサイトの中のPerlサンプルのを そのまま使えば大丈夫だ。


戻る:難しい表現しか使えない人は無能である

次へ:一晩寝かせてから公開するだけで品質が向上する


フィードバック:

Name:
Comment:

There is no comment.

このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us