Calculer la réputation d'un utilisateur

12

Défi

Étant donné le nom d' un utilisateur (et non son ID, nous avons déjà ce défi), affichez sa réputation actuelle et son ID.

Contribution

L'entrée sera une chaîne unique qui est le nom d'utilisateur de l'utilisateur. Vous pouvez supposer que cet utilisateur existe.

Production

La sortie sera deux entiers à STDOUT ou STDERR qui seront la réputation de l'utilisateur et l'ID de l'utilisateur. Ils doivent être dans cet ordre spécifique et peuvent être sortis dans n'importe quel format raisonnable

Détails

  • La sortie de réputation ne doit pas être dépassée de plus de 10 minutes.
  • Votre programme ne doit pas générer d'erreurs pendant l'exécution normale
  • Des échappatoires standard s'appliquent (y compris aucun raccourcisseur d'URL)
  • S'il y a plus d'un utilisateur avec ce nom d'utilisateur, vous pouvez afficher les statistiques de n'importe quel utilisateur avec ce nom d'utilisateur. C'est aussi pourquoi vous devez sortir l'ID.
  • La réputation à produire est la réputation de l'utilisateur sur PPCG, pas le score total du réseau.

Le site de l'API Stack Exchange se trouve ici . Vous pouvez lire la documentation à partir de là.

HyperNeutrino
la source
Liez l'API d'échange de pile.
Magic Octopus Urn
@carusocomputing Oui, merci. J'ai aussi besoin de réparer quelque chose car apparemment plusieurs utilisateurs peuvent avoir le même nom.
HyperNeutrino
Je suppose que cette règle s'applique? Pouvez-vous également confirmer qu'il s'agit de la réputation totale de l'utilisateur sur PPCG plutôt que sur SE?
Arnauld
@Arnauld je dirai oui. Et je confirme que c'est juste la réputation de PPCG. Je vais clarifier cela dans le défi. Merci.
HyperNeutrino
Eh bien , je l'ai fait cette entrée T-SQL , mais il ne règle pas de rencontrer 1 car il ne suffit pas à jour :(
ʰᵈˑ

Réponses:

1

Bash + JQ , 93 octets

Annulé la version 87 octets, car elle ne gérait pas correctement les réponses multi-utilisateurs.

Golfé

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

Sortira le premier identifiant utilisateur et la réputation sur les lignes séparées.

Comment ça fonctionne ?

1) curl + zcatsont utilisés pour récupérer la réponse de l'API au format JSON

2) jq ..|numbersdépliera JSON récursivement et imprimera toutes les valeurs numériques, une par ligne

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

(les numéros de ligne ont été ajoutés à nldes fins d'illustration uniquement)

3) Ensuite, nous utilisons sedpour rechercher le premier account_idet reputation, par leurs numéros de ligne absolus

Tester

>./reputation zeppelin
3315904
6275
Zeppelin
la source
6

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

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

6 octets enregistrés grâce à Shaggy et 6 octets grâce à Cyoce.

Je ne sais pas s'il devrait afficher tous les utilisateurs du même nom, ou seulement l'un d'entre eux; ce code les renvoie tous.

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

f("tom")

À M
la source
Battez-moi. Économisez 6 octets avec "//api.stackexchange.com/users?site=codegolf&inname="+a.
Shaggy
Remarque: Il semble que vous retourniez plus de résultats que vous ne le devriez (peut-être). J'ai essayé d'obtenir les commentaires d'HyperNeutrino sur ce qui est approprié, mais votre résultat renvoie des valeurs pour les utilisateurs dont le nom ne contient que l'entrée - ne correspond pas exactement. Votre meilleur résultat est donc "Tom Carpenter" et non "Tom".
Dason
Serait-il possible de remplacer _=>alert(_)par juste alert?
Cyoce
@Dason Yep, c'est un point dont je n'étais pas sûr; Je changerai ma réponse quand elle sera confirmée.
Tom
@Cyoce Cela a fonctionné, merci!
Tom
4

Python 2, 178 169 149 149 octets

J'utiliserais des demandes pour cela:

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

Fondamentalement, il utilise l'API de la pile pour récupérer les informations au format JSON, puis obtient l'élément «réputation». De plus, l' API comportait de nombreux paramètres supplémentaires, je les ai également rasés.

De généreuses contributions de: carusocomputing, ElPedro, Malivil, Keerthana Prabhakaran

Neil
la source
["items"][0]cela n'obtient que le premier résultat, dans le cas de plusieurs utilisateurs, il ignorera toujours les extras si je ne me trompe pas.
Urne de poulpe magique
import requests as ret r.get(...enregistre 4 octets.
ElPedro
@ElPedro l'a mis à jour, merci pour la contribution.
Neil
1
Si vous réorganisez les paramètres pour qu'ils ?site=codegolf&inname="
soient lus,
1
L'utilisation from requests import*;a=get()réduit un octet!
Keerthana Prabhakaran
3

Groovy, 144 156 octets

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

Fermeture anonyme.

EDIT: oublié d'utiliser l'importation de groovy.json.pour JSON Slurper + 14 octets.

Exemple de sortie [[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]]
Urne de poulpe magique
la source
8
JsonSlurper ... o_O
HyperNeutrino
slurrrrrrrrrp
Urne de poulpe magique
@HyperNeutrino si jamais vous en avez l'occasion, je le considère comme ma bibliothèque d'analyse JSON préférée. Il est si facile.
Urne de poulpe magique
D'accord merci! Je vais y jeter un œil.
HyperNeutrino
0

Swift, 225 201 octets

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

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

Exemple de sortie:

["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
la source