Calcular a reputação de um usuário

12

Desafio

Dado o nome de um usuário (não o ID, já temos esse desafio), mostre sua reputação atual e seu ID.

Entrada

A entrada será uma única sequência que é o nome de usuário do usuário. Você pode assumir que esse usuário existe.

Resultado

A saída será dois números inteiros para STDOUT ou STDERR, que serão a reputação e o ID do usuário. Eles devem estar nessa ordem específica e podem ser impressos em qualquer formato razoável

Específicos

  • A saída da reputação não deve estar mais do que 10 minutos desatualizada.
  • Seu programa não pode gerar erros durante a execução normal
  • Aplicam-se brechas padrão (incluindo Sem encurtadores de URL)
  • Se houver mais de um usuário com esse nome de usuário, você poderá gerar as estatísticas de qualquer usuário com esse nome de usuário. É também por isso que você deve gerar o ID.
  • A reputação a ser gerada é a reputação do usuário no PPCG, não a pontuação total da rede.

O site da API do Stack Exchange pode ser encontrado aqui . Você pode ler a documentação de lá.

HyperNeutrino
fonte
Vincule a API de troca de pilhas.
Magic Octopus Urn
@carusocomputing Vai fazer, obrigado. Também preciso corrigir algo, porque aparentemente vários usuários podem ter o mesmo nome.
HyperNeutrino
Suponho que esta regra se aplique? Além disso, você pode confirmar que é a reputação total do usuário no PPCG e não no SE?
Arnauld
@ Arnauld vou dizer que sim. E confirmo que é apenas a reputação do PPCG. Vou esclarecer isso no desafio. Obrigado.
HyperNeutrino
Bem, eu fiz essa entrada T-SQL, mas ela não atende à regra 1, pois não é atualizada o suficiente :(
#

Respostas:

1

Bash + JQ , 93 bytes

Retrocedeu a versão de 87 bytes, pois não estava lidando corretamente com as respostas de vários usuários.

Golfe

curl "api.stackexchange.com/users?site=codegolf&inname=$1"|zcat|jq ..\|numbers|sed -n 4p\;12p

Produzirá a primeira identificação do usuário e reputação nas linhas separadas.

Como funciona ?

1) curl + zcatsão usados ​​para buscar a resposta da API formatada em JSON

2) jq ..|numbersdesdobra JSON recursivamente e imprime todos os valores numéricos, um por linha

...
1   35
2   8
3   2
4   3315904
5   1487694154
6   1492702469
7   4565
8   82
9   82
10  60
11  20
12  6275
...

(os números de linha foram adicionados nlapenas para fins ilustrativos)

3) Em seguida, usamos seda pesquisa do primeiro account_ide reputation, por seus números absolutos de linha

Teste

>./reputation zeppelin
3315904
6275
zepelim
fonte
6

JavaScript (ES6), 145 139 136 125 123 123 117 bytes

a=>fetch(`//api.stackexchange.com/users?site=codegolf&filter=!)LgZAmQ6ls0hH&inname=`+a).then(_=>_.text()).then(alert)

Economizou 6 bytes graças a Shaggy e 6 bytes graças a Cyoce.

Não tenho certeza se deve gerar todos os usuários com o mesmo nome ou apenas um deles; esse código gera todos eles.

f=a=>fetch(`//api.stackexchange.com/users?site=codegolf&filter=!)LgZAmQ6ls0hH&inname=`+a).then(_=>_.text()).then(alert)

f("tom")

Tom
fonte
Bata-me para isso. Salve 6 bytes com "//api.stackexchange.com/users?site=codegolf&inname="+a.
Salsicha
Nota: parece que você retorna mais resultados do que deveria (possivelmente). Eu tenho tentado obter o feedback do HyperNeutrino sobre o que é apropriado, mas seu resultado retorna valores para usuários cujo nome contém apenas a entrada - não corresponde exatamente. Portanto, seu principal resultado é para "Tom Carpenter" e não para "tom".
Dason
Seria possível substituir _=>alert(_)por apenas alert?
precisa saber é o seguinte
@ Jason Sim, esse é um ponto que eu não tinha certeza; Vou mudar minha resposta quando for confirmada.
Tom
@ Cyy Isso funcionou, obrigado!
Tom
4

Python 2, 178 169 149 Bytes

Eu usaria solicitações para isso:

from requests import*
a=get("http://api.stackexchange.com/users?site=codegolf&inname="+input()).json()["items"][0]
print a["reputation"],a["user_id"]

Basicamente, ele usa a API da pilha para buscar as informações como JSON e, em seguida, obtém o item "reputação". Além disso, a API apresentava muitos parâmetros extras, eu os raspei também.

Contribuições generosas de: carusocomputing, ElPedro, Malivil, Keerthana Prabhakaran

Neil
fonte
["items"][0]isso só obtém o primeiro resultado; no caso de vários usuários, ele ainda ignorará os extras se não me engano.
Magic Octopus Urn
import requests as re r.get(...salva 4 bytes.
ElPedro 19/04
A @ElPedro atualizou, obrigado pela contribuição.
Neil
1
Se você reorganizar os parâmetros para que ele lê ?site=codegolf&inname="você pode economizar 3 bytes (+ "")
Malivil
1
Usar from requests import*;a=get()reduz um byte!
Keerthana Prabhakaran
3

Groovy, 144 156 bytes

{new groovy.json.JsonSlurper().parse(new URL("http://api.stackexchange.com/2.2/users/?site=codegolf&inname=$it")).items.collect{[it.user_id,it.reputation]}}

Fechamento anônimo.

EDIT: esqueceu de usar a importação de groovy.json.JSON Slurper + 14 bytes.

Exemplo de saída [[UserID, Reputation],...]:

[[20260, 60695], [20469, 21465], [3103, 8856], [41805, 7783], [134, 6829], [42643, 5622], [45268, 4389], [10732, 3976], [32, 3635], [53745, 3392], [10801, 3216], [49362, 2418], [2104, 2160], [3563, 1988], [18280, 1491], [742, 1466], [59487, 1362], [19039, 1330], [56642, 1133], [9522, 951], [34438, 886], [1744, 793], [52661, 778], [18187, 768], [11426, 751], [26850, 711], [178, 637], [29451, 631], [19700, 616], [15862, 601]]
Urna de polvo mágico
fonte
8
JsonSlurper ... o_O
HyperNeutrino
slurrrrrrrrrp
Urna de polvo mágico
@HyperNeutrino, se você tiver a chance de vê-lo, considero-o minha biblioteca de análise JSON favorita. É tão fácil.
Magic Octopus Urn
Tudo bem, obrigado! Vou dar uma olhada nisso.
HyperNeutrino
0

Rápido, 225 201 bytes

import Foundation;var f:(String)->Any={return try!JSONSerialization.jsonObject(with:Data(contentsOf:URL(string:"http://api.stackexchange.com/users?site=codegolf&filter=!)LgZAmQ6ls0hH&inname=\($0)")!))}

Sem golfe:

import Foundation

var f:(String) -> [String: Any] = {
    return try! JSONSerialization.jsonObject(with:Data(contentsOf:URL(string:"http://api.stackexchange.com/users?site=codegolf&filter=!)LgZAmQ6ls0hH&inname=\($0)")!)) as! [String:Any]
}

Exemplo de saída:

["items": <__NSArrayI 0x6180001ffc00>(
{
    reputation = 2820;
    "user_id" = 42295;
},
{
    reputation = 2468;
    "user_id" = 31203;
},
{
    reputation = 2106;
    "user_id" = 2800;
},
{
    reputation = 1479;
    "user_id" = 6689;
},
{
    reputation = 1287;
    "user_id" = 64424;
},
{
    reputation = 1037;
    "user_id" = 64070;
},
{
    reputation = 644;
    "user_id" = 25193;
},
{
    reputation = 641;
    "user_id" = 3171;
},
{
    reputation = 639;
    "user_id" = 743;
},
{
    reputation = 590;
    "user_id" = 33233;
},
{
    reputation = 571;
    "user_id" = 26993;
},
{
    reputation = 563;
    "user_id" = 1730;
},
{
    reputation = 321;
    "user_id" = 18570;
},
{
    reputation = 309;
    "user_id" = 39156;
},
{
    reputation = 291;
    "user_id" = 7880;
},
{
    reputation = 281;
    "user_id" = 25190;
},
{
    reputation = 261;
    "user_id" = 40820;
},
{
    reputation = 231;
    "user_id" = 14154;
},
{
    reputation = 206;
    "user_id" = 2774;
},
{
    reputation = 196;
    "user_id" = 48231;
},
{
    reputation = 181;
    "user_id" = 1230;
},
{
    reputation = 176;
    "user_id" = 64077;
},
{
    reputation = 171;
    "user_id" = 31365;
},
{
    reputation = 171;
    "user_id" = 43455;
},
{
    reputation = 163;
    "user_id" = 21469;
},
{
    reputation = 161;
    "user_id" = 11845;
},
{
    reputation = 157;
    "user_id" = 25181;
},
{
    reputation = 131;
    "user_id" = 263;
},
{
    reputation = 131;
    "user_id" = 3922;
},
{
    reputation = 128;
    "user_id" = 67227;
}
)
]
Caleb Kleveter
fonte