純粋なjavascriptを使用してShuangseqiuの履歴データをクロールします

I.はじめに

自分のアプリケーションを完成させるには、2色のボールの履歴データが必要です。したがって、さまざまなAPIインターフェースをオンラインで確認してください。ほとんどのインターフェースは課金されており、インターフェースは最新の50〜100期間の履歴データしか取得できないことがわかりました。何度も検索した結果、1日100回無料のクエリインターフェイスを提供できるWebサイトがようやく見つかりました。2003年の最初の号から現在までのすべての号をご覧ください。しかし、プログラマーとしての私たちにとっては、へへ。記事の最後に、自分のトークンを添付します。しかし、クリプトンゴールドがないため、1日あたりの呼び出しは100しかありません。運命の方は直接ご利用いただけます。このトークンを取得するには、実名認証が必要です。

第二に、プロセス

ウェブサイトに直接貼り付けます:

https://www.juhe.cn/docs

ここで宝くじを検索すると、APIを取得できます。

ここに画像の説明を挿入

必要に応じて登録し(私のトークンを直接使用でき、登録する必要はありません)、このダブルカラーボールデータを購読します。次のようなインターフェースを取得します
。http //apis.juhe.cn/lottery/history?key = afc556731226f0ea785fd87fe5383d62&lottery_id = ssq&page_size = 50&page = 1

スルーpagesizepage属性、我々は、一定期間の履歴データを取得することができます。返される結果は次のとおりです
ここに画像の説明を挿入
。私はそれを見ると微笑まざるを得ません。JSON。はは、私はすぐにelasticsearchを使うことを考えました。

3、実践

私はローカルのajaxを取得することを考えていました。それを実行するために50回ループしました。しかし、テストにより、インターフェースがクロスドメインをサポートしていないことがわかりました!

したがって、jsonpを使用すると、それを呼び出すことができないことがわかります。インターフェースはjsonpをサポートできません。

何をすべきか?だから私の心は変わった。同じドメインを試しますか?APIインターフェイスを確認し、
http://apis.juhe.cn/ にアクセスしてみてください。

ここに画像の説明を挿入
F12を押しました...

コンソールに入り、ajaxテストコードを入力します。Ajaxなし?問題ではありません。jquery.min.jsの内容をコピーして、コンソールに貼り付けます。もちろん、フェッチとネイティブのXmlhttpRequestを使用することもできます。

残りはライブラリを構築することです。esライブラリを構築し、js挿入コードを記述します。コードは以下のとおりです。elasticsearchを使用している場合は、コードをコンソールにコピーして実行できます。elasticsearchに慣れていない場合は、私のブログのJavaScriptを参照して、ElasticSearch(1)で遊ぶことができます。

もちろん、esをデータストレージメディアとして使用したくない場合は、コードを変更し、Blobオブジェクトを使用してダウンロード用のファイルを作成できます。インターネットには多くの例があるので、掲載しません。



function req(page, callback) {
    
    
    var xmlHttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");

    xmlHttp.open("get", 'http://apis.juhe.cn/lottery/history?key=afc556731226f0ea785fd87fe5383d62&lottery_id=ssq&page_size=50&page='+page, true);      //打开连接

    xmlHttp.onreadystatechange = function () {
    
    
        try {
    
      //判断是否成功返回数据
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
    
    
                objData = JSON.parse(xmlHttp.responseText);   //解析文本格式的json数据并赋给json对象
                callback(objData.result.lotteryResList);
            }
        }
        catch (err) {
    
     alert(err); }
    }
    xmlHttp.send(null);//发送
}

function insertToES(data) {
    
    
    data.lottery_no = Number(data.lottery_no);
    $.ajax({
    
    
        "type": "post",
        "contentType": 'application/json',
        "url": `http://localhost:9200/lottery_ssq/lottery_ssq?refresh=wait_for`,
        "data": JSON.stringify(data),
        "success": () => {
    
    
            console.log(data.lottery_no + " 导入成功")
        },
        "error": (e) => {
    
    
            console.error(data.lottery_no + "导入失败")
        }
    })

}
var page = 1;
var interval = setInterval(() => {
    
    
    req(page, function (reqs) {
    
    
        if (!reqs)
            clearInterval(interval);
        var length = reqs.length;
        var index = 0;
        var interval_inner = setInterval(() => {
    
    
            if (index == length) {
    
    
                clearInterval(interval_inner);
                return;
            }
            insertToES(reqs[index++]);
        }, 100)
        page++;
    });

}, 40000)

演算結果:
ここに画像の説明を挿入

kibana截图:
ここに画像の説明を挿入

4.結論:

私が使った二つのトークンをつければ、1日100回自由に使えます。毎回50アイテムで、1日に2回トークンが使える。

afc556731226f0ea785fd87fe5383d62
50656fe3d4ea32cd98c31c19192136b3

好きにしてください、ありがとう〜

おすすめ

転載: blog.csdn.net/qq_29722281/article/details/103100363