Calcular la reputación de un usuario

12

Desafío

Dado el nombre de un usuario (no ID, ya tenemos ese desafío), generar su reputación actual y su ID.

Entrada

La entrada será una sola cadena que es el nombre de usuario del usuario. Puede suponer que este usuario existe.

Salida

La salida será dos enteros para STDOUT o STDERR, que serán la reputación del usuario y la ID del usuario. Deben estar en ese orden específico y pueden emitirse en cualquier formato razonable

Detalles específicos

  • El rendimiento de la reputación no debe estar más de 10 minutos desactualizado.
  • Su programa no puede arrojar ningún error durante la ejecución normal
  • Se aplican lagunas estándar (incluidos los Sin acortadores de URL)
  • Si hay más de un usuario con ese nombre de usuario, puede mostrar las estadísticas de cualquier usuario con ese nombre de usuario. Esta es también la razón por la que debe generar la ID.
  • La reputación que se generará es la reputación del usuario en PPCG, no la puntuación total de la red.

El sitio API de Stack Exchange se puede encontrar aquí . Puede leer la documentación desde allí.

Hiperneutrino
fuente
Enlace la API de intercambio de pila.
Urna mágica de pulpo
@carusocomputing Lo haré, gracias. También necesito arreglar algo porque aparentemente varios usuarios pueden tener el mismo nombre.
HyperNeutrino
Supongo que esta regla se aplica? Además, ¿puede confirmar que es la reputación total del usuario en PPCG en lugar de SE?
Arnauld
@Arnauld Diré que sí. Y confirmo que es solo la reputación de PPCG. Lo aclararé en el desafío. Gracias.
HyperNeutrino
Bueno, hice esta entrada T-SQL pero no cumple con la regla 1 ya que no está lo suficientemente actualizada :(
ʰᵈˑ

Respuestas:

1

Bash + JQ , 93 bytes

Retrocedió la versión de 87 bytes, ya que no estaba manejando las respuestas de múltiples usuarios correctamente.

Golfed

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

Producirá la identificación y la reputación del primer usuario en las líneas separadas.

Cómo funciona ?

1) curl + zcatse utilizan para recuperar la respuesta de la API con formato JSON

2) jq ..|numbersdesplegará JSON recursivamente e imprimirá todos los valores numéricos, uno por línea

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

(los números de línea se agregaron solo con nlfines ilustrativos)

3) Luego usamos sedpara buscar el primero account_idy reputation, por sus números de fila absolutos

Prueba

>./reputation zeppelin
3315904
6275
zepelín
fuente
6

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

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

Guardado 6 bytes gracias a Shaggy y 6 bytes gracias a Cyoce.

No estoy seguro si debería mostrar a todos los usuarios con el mismo nombre, o solo uno de ellos; este código genera todos ellos.

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

f("tom")

Tom
fuente
Gáname a eso. Ahorre 6 bytes con "//api.stackexchange.com/users?site=codegolf&inname="+a.
Shaggy
Nota: Parece que devuelve más resultados de los que (posiblemente) debería. He estado tratando de obtener comentarios de HyperNeutrino sobre lo que es apropiado, pero su resultado devuelve valores para los usuarios cuyo nombre solo contiene la entrada, no coincide exactamente. Entonces, su resultado principal es "Tom Carpenter" y no "tom".
Dason
¿Sería posible reemplazarlo _=>alert(_)por solo alert?
Cyoce
@Dason Sí, ese es un punto del que no estaba seguro; Cambiaré mi respuesta cuando se confirme.
Tom
@Cyoce Eso funcionó, ¡gracias!
Tom
4

Python 2, 178 169 149 Bytes

Usaría solicitudes para esto:

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

Básicamente, utiliza la API de la pila para obtener la información como JSON y luego obtiene el elemento "reputación". Además, la API presentaba muchos parámetros adicionales, también los eliminé.

Generosas contribuciones de: carusocomputing, ElPedro, Malivil, Keerthana Prabhakaran

Neil
fuente
["items"][0]esto solo obtiene el primer resultado, en el caso de múltiples usuarios aún ignorará los extras si no me equivoco.
Urna mágica del pulpo
import requests as ry r.get(...ahorra 4 bytes.
ElPedro
@ElPedro lo actualizó, gracias por el aporte.
Neil
1
Si reorganiza los parámetros para que se lea ?site=codegolf&inname=", puede guardar 3 bytes (+ "")
Malivil
1
¡Usar from requests import*;a=get()reduce un byte!
Keerthana Prabhakaran
3

Maravilloso, 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]}}

Cierre anónimo.

EDITAR: olvidé usar la importación de groovy.json.JSON Slurper + 14 bytes.

Salida de ejemplo [[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 pulpo mágico
fuente
8
JsonSlurper ... o_O
HyperNeutrino
slurrrrrrrrrp
Urna de pulpo mágico
@HyperNeutrino si alguna vez tienes la oportunidad de verlo, considero que es mi biblioteca de análisis JSON favorita. Es tan fácil.
Urna de pulpo mágico
¡OK gracias! Lo echaré un vistazo.
HyperNeutrino
0

Swift, 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)")!))}

Sin golf:

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]
}

Salida de ejemplo:

["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
fuente