Alexa Top Sites APIの使い方

Alexaから、国別に人気のサイトのURLを取得できるAPIです。

総合案内:https://support.alexa.com/hc/en-us/articles/200461990-Can-I-get-a-list-of-top-sites-from-an-API-

なおこのAPIを使わなくても525位までならウェブサイトのスクレイピングで得られるらしいです。
https://qiita.com/saxsir/items/a85ee3c5fb9d3bd76dde

登録方法

Getting Started with Alexa Top Sitesを見てやります。

AWSのコンソールにアクセスし、AWSのアカウントをつくります。クレカと電話番号が必要!1年間はAWSの無料期間ですが、Alexa Top Sitesは対象ではないようなので注意です!
登録したらコンソールでIAMの設定を画面に行きます。下の画像のように検索すれば出てきます。
ユーザの管理をクリック します。
アクセスの種類は2つとも選択して次に進んでください。
「ポリシーを作成」ボタンを押します。

これをコピペします。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "AlexaTopSites:GET"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

図のようにエラーが出ますが、これはバグらしいので気にしないでください。

このあと、さっきの画面(「ポリシーを作成」ボタンを押した画面)に戻り、「既存のポリシーを選択」から今回作成したポリシーを選ぶ必要があったかもしれません。忘れました。

そのあと次へとか押すと作成が終わったと思います。

できたらアカウントの詳細画面で、認証情報タブを見ます。

APIの使用に必要なアクセスキーIDとシークレットを得るには、この「アクセスキーの作成」ボタンを押します。
シークレットは作成時にしか見ることができません。
見忘れたら作成し直してください。

Pricing

0.0025perURLreturned(e.g..25 for 100 URLs)

とあります。この料金は安いのか高いのかわかりません。
私は9万個のURLをfetchしたため税込241ドル(=27,000円くらい)払う羽目になりました。

Rate Limit

レート制限はないらしいです。

Sample code

公式(Getting Started with Alexa Top Sites)のサンプルコードにはPythonがないっぽいです。
オープンソースだと
  1. https://github.com/davedash/Alexa-Top-Sites
  2. https://github.com/everping/aws-alexa-top-sites
というのがありました。2番目が使いやす気がします。
ダウンロードしてそのディレクトリに移動し、
$ ./ats.py -country US -count 10 -secret <アクセスシークレット> -key <アクセスキーID> -start 200

とやると、200番目から10個のURLをfetchできます。

Alexa Top Sites APIは一度のクエリで最大1000件まで取ってこれます。
よって、1万件とかをfetchする際は、1000件ずつクエリを投げます。

そのときにこのオープンソースのats.pyというスクリプトは一切の待ち時間を挟まないでクエリを投げ続けるので、ときどきコネクションが確立できません。
(詳しくは忘れたけどとりあえず問題が起こります)
ats.pyの197行目、クエリを投げ続けるfor文の中にtime.sleep() でも挟んで少し待たせると良いです。

コメント