Use javascript puro para rastrear dados históricos de Shuangseqiu

I. Introdução

Preciso de dados históricos de uma bola de duas cores para concluir meu próprio aplicativo. Portanto, verifique várias interfaces API online. Verifica-se que a maioria das interfaces são carregadas e a interface só pode obter dados históricos dos últimos 50-100 períodos. Depois de muita pesquisa, finalmente encontrei um site que pode fornecer uma interface de consulta gratuita 100 vezes por dia. Dê uma olhada em todas as edições, desde a primeira edição em 2003 até o presente. Mas para nós como programadores, hehe. No final do artigo, anexarei meu próprio token. Mas, como não há ouro criptônio, há apenas 100 ligações por dia. Aqueles que estão destinados podem usá-lo diretamente. Porque obter esse token requer autenticação de nome real.

Em segundo lugar, o processo

Cole diretamente no site:

https://www.juhe.cn/docs

Pesquise na loteria aqui, você pode obter uma API:

Insira a descrição da imagem aqui

Registre-se conforme necessário (você pode usar meu token diretamente, não há necessidade de se registrar) e assine os dados da bola de duas cores. Obtemos uma interface da seguinte forma:
http://apis.juhe.cn/lottery/history?key=afc556731226f0ea785fd87fe5383d62&lottery_id=ssq&page_size=50&page=1

Por meio do atributo pagesizesoma page, podemos obter os dados históricos de um determinado período. O resultado retornado é o seguinte:
Insira a descrição da imagem aqui
Não posso deixar de sorrir quando vejo isso. JSON. Haha, pensei imediatamente em usar a pesquisa elástica.

Tres, pratico

Eu estava pensando em obter um ajax local, repetindo 50 vezes para fazê-lo. Mas o teste descobriu que a interface: não suporta vários domínios!

Assim, usando jsonp, verifica-se que não pode ser chamado. A interface não suporta jsonp.

O que fazer? Então minha mente mudou. Tentar com o mesmo domínio? Verifique a interface da API, tente visitar
http://apis.juhe.cn/ e você pode visitar:

Insira a descrição da imagem aqui
Então pressionei F12 ...

Entre no console e digite o código de teste ajax. Sem ajax? Não importa, copie o conteúdo de jquery.min.js e cole no console. Claro, você também pode usar fetch e XmlhttpRequest nativo.

O resto é construir uma biblioteca. es construir uma biblioteca e, em seguida, escrever o código de inserção js. O código está abaixo. Se você usar elasticsearch, poderá copiá-lo para o console e executá-lo. Se você não está familiarizado com o elasticsearch , pode consultar o javascript do meu blog para brincar com o ElasticSearch (1)

Claro, se você não quiser usar es como seu meio de armazenamento de dados, você pode modificar o código e usar o Blobobjeto para criar um arquivo para download. Existem muitos exemplos na Internet, então não os postarei.



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)

resultado da operação:
Insira a descrição da imagem aqui

kibana
Insira a descrição da imagem aqui

4. Conclusão:

Anexe os dois tokens que usei, você pode usá-los à vontade, 100 vezes por dia. De acordo com 50 itens de cada vez, um token pode ser usado duas vezes por dia.

afc556731226f0ea785fd87fe5383d62
50656fe3d4ea32cd98c31c19192136b3

Tipo, por favor, obrigado ~

Acho que você gosta

Origin blog.csdn.net/qq_29722281/article/details/103100363
Recomendado
Clasificación