Berechnen Sie die Reputation eines Benutzers

12

Herausforderung

Wenn Sie den Namen eines Benutzers (nicht die ID, wir haben diese Herausforderung bereits) angeben, geben Sie dessen aktuellen Ruf und dessen ID aus.

Eingang

Die Eingabe ist eine einzelne Zeichenfolge, die dem Benutzernamen des Benutzers entspricht. Sie können davon ausgehen, dass dieser Benutzer existiert.

Ausgabe

Die Ausgabe erfolgt in zwei Ganzzahlen, entweder STDOUT oder STDERR. Dies ist die Reputation des Benutzers und die ID des Benutzers. Sie müssen in dieser bestimmten Reihenfolge vorliegen und können in jedem vernünftigen Format ausgegeben werden

Besonderheiten

  • Die Reputationsausgabe darf nicht älter als 10 Minuten sein.
  • Ihr Programm darf während der normalen Ausführung keine Fehler auslösen
  • Es gelten Standardlücken (einschließlich "Keine URL-Kürzungen")
  • Wenn es mehr als einen Benutzer mit diesem Benutzernamen gibt, können Sie die Statistiken aller Benutzer mit diesem Benutzernamen ausgeben. Aus diesem Grund müssen Sie auch die ID ausgeben.
  • Die auszugebende Reputation ist die Reputation des Benutzers in PPCG, nicht die Gesamtpunktzahl des Netzwerks.

Die Stack Exchange API-Site finden Sie hier . Sie können die Dokumentation von dort lesen.

HyperNeutrino
quelle
Verknüpfen Sie die Stack-Exchange-API.
Magic Octopus Urn
@carusocomputing Will tun, danke. Ich muss auch etwas reparieren, da anscheinend mehrere Benutzer den gleichen Namen haben können.
HyperNeutrino
Ich nehme an, diese Regel gilt? Können Sie auch bestätigen, dass es sich bei PPCG nicht um SE, sondern um die Gesamtreputation des Benutzers handelt?
Arnauld
@ Arnauld werde ich ja sagen. Und ich bestätige, dass es nur der PPCG-Ruf ist. Ich werde das in der Herausforderung klarstellen. Vielen Dank.
HyperNeutrino
Nun, ich habe diesen T-SQL-Eintrag gemacht, aber er entspricht nicht der Regel 1, da er nicht ausreichend aktualisiert wurde :(
ʰᵈˑ

Antworten:

1

Bash + JQ , 93 Bytes

Die 87-Byte-Version wurde zurückgesetzt, da Mehrbenutzerantworten nicht korrekt verarbeitet wurden.

Golf gespielt

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

Gibt die erste Benutzer-ID und den Ruf in den separaten Zeilen aus.

Wie es funktioniert ?

1) curl + zcatwerden verwendet, um die JSON-formatierte API-Antwort abzurufen

2) jq ..|numbersentfaltet JSON rekursiv und druckt alle numerischen Werte, einen pro Zeile

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

(Zeilennummern wurden nlnur zu Illustrationszwecken hinzugefügt )

3) Als nächstes sedsuchen wir die erste account_idund reputationnach ihren absoluten Zeilennummern

Prüfung

>./reputation zeppelin
3315904
6275
Zeppelin
quelle
6

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

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

6 Bytes dank Shaggy und 6 Bytes dank Cyoce.

Ich bin nicht sicher, ob alle Benutzer mit demselben Namen oder nur einer von ihnen ausgegeben werden sollen. Dieser Code gibt alle aus.

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

f("tom")

Tom
quelle
Schlagen Sie mich zu. Sparen Sie 6 Bytes mit "//api.stackexchange.com/users?site=codegolf&inname="+a.
Shaggy
Hinweis: Anscheinend geben Sie mehr Ergebnisse zurück, als Sie (möglicherweise) sollten. Ich habe versucht, HyperNeutrinos Feedback zu erhalten, aber Ihr Ergebnis gibt Werte für Benutzer zurück, deren Name nur die Eingabe enthält - nicht genau übereinstimmt. So ist Ihr Top-Ergebnis für "Tom Carpenter" und nicht "Tom".
Dason
Wäre es möglich, _=>alert(_)mit nur zu ersetzen alert?
Cyoce
@Dason Ja, das ist ein Punkt, bei dem ich mir nicht sicher war. Ich werde meine Antwort ändern, wenn sie bestätigt ist.
Tom
@Cyoce Das hat funktioniert, danke!
Tom
4

Python 2, 178 169 149 Bytes

Ich würde Anfragen dafür verwenden:

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

Grundsätzlich verwendet es die API des Stacks, um die Informationen als JSON abzurufen und erhält dann den Eintrag "Ruf". Darüber hinaus enthielt die API viele zusätzliche Parameter, die ich ebenfalls deaktiviert habe.

Großzügige Beiträge von: carusocomputing, ElPedro, Malivil, Keerthana Prabhakaran

Neil
quelle
["items"][0]Dies liefert nur das erste Ergebnis. Bei mehreren Benutzern werden die Extras trotzdem ignoriert, wenn ich mich nicht irre.
Magic Octopus Urn
import requests as rund r.get(...speichert 4 Bytes.
ElPedro
@ElPedro hat es aktualisiert, danke für die Eingabe.
Neil
1
Wenn Sie die Parameter neu anordnen, so dass es liest ?site=codegolf&inname=", können Sie 3 Bytes (+ "")
speichern
1
Mit from requests import*;a=get()wird ein Byte reduziert!
Keerthana Prabhakaran
3

Groovy, 144 bis 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]}}

Anonyme Schließung.

BEARBEITEN: Import von groovy.json.für JSON Slurper + 14 Bytes vergessen .

Beispielausgabe [[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]]
Magic Octopus Urn
quelle
8
JsonSlurper ... o_O
HyperNeutrino
slurrrrrrrrrp
Magic Octopus Urn
@HyperNeutrino Wenn Sie jemals die Gelegenheit haben, es sich anzusehen, dann halte ich es für meine Lieblings-JSON-Parsing-Bibliothek. Es ist so einfach.
Magic Octopus Urn
Gut, danke! Ich werde es mir ansehen.
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)")!))}

Nicht golfen:

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

Beispielausgabe:

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