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.


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

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


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


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

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;
}
)
]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.