Oblicz reputację użytkownika


12

Wyzwanie

Biorąc pod uwagę nazwę użytkownika (nie ID, mamy już to wyzwanie), podaj jego bieżącą reputację i identyfikator.

Wejście

Dane wejściowe będą stanowić pojedynczy ciąg znaków, który jest nazwą użytkownika. Możesz założyć, że ten użytkownik istnieje.

Wynik

Dane wyjściowe będą dwie liczby całkowite do STDOUT lub STDERR, które będą reputacją użytkownika i identyfikatorem użytkownika. Muszą być w tej określonej kolejności i mogą być generowane w dowolnym rozsądnym formacie

Specyfika

  • Dane wyjściowe dotyczące reputacji nie mogą być dłuższe niż 10 minut.
  • Twój program nie może zgłaszać błędów podczas normalnego wykonywania
  • Obowiązują standardowe luki (w tym brak skracaczy adresów URL)
  • Jeśli z tą nazwą użytkownika jest więcej niż jeden użytkownik, możesz wyświetlić statystyki każdego użytkownika o tej nazwie. Dlatego też musisz wyprowadzić identyfikator.
  • Reputacja, którą należy uzyskać, to reputacja użytkownika w PPCG, a nie łączny wynik sieci.

Witrynę interfejsu API stosu wymiany można znaleźć tutaj . Możesz przeczytać dokumentację stamtąd.


Połącz interfejs API wymiany stosów.
Magic Octopus Urn

@ carusocomputing Zrobi, dzięki. Muszę też coś naprawić, ponieważ najwyraźniej wielu użytkowników może mieć tę samą nazwę.
HyperNeutrino,

Przypuszczam, że ta zasada ma zastosowanie? Czy możesz również potwierdzić, że jest to całkowita reputacja użytkownika w PPCG, a nie w SE?
Arnauld,

@Arnauld powiem tak. I potwierdzam, że to tylko reputacja PPCG. Wyjaśnię to w ramach wyzwania. Dzięki.
HyperNeutrino

Cóż, zrobiłem ten wpis w języku T-SQL, ale nie spełnia on reguły 1, ponieważ nie jest wystarczająco zaktualizowany :(
ʰᵈˑ

Odpowiedzi:


1

Bash + JQ , 93 bajty

Wycofano wersję 87-bajtową, ponieważ nie obsługiwała ona poprawnie odpowiedzi wielu użytkowników.

Grał w golfa

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

Wyświetli identyfikator pierwszego użytkownika i reputację w osobnych wierszach.

Jak to działa ?

1) curl + zcatsą używane do pobrania odpowiedzi API sformatowanej w JSON

2) jq ..|numbersrozwinie rekurencyjnie JSON i wydrukuje wszystkie wartości liczbowe, po jednej w wierszu

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

(numery wierszy zostały dodane nlwyłącznie w celach ilustracyjnych)

3) Następnie używamy seddo wyszukiwania pierwszego account_idi reputationwedług ich bezwzględnych numerów wierszy

Test

>./reputation zeppelin
3315904
6275

6

JavaScript (ES6), 145 139 136 125 123 117 bajtów

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

Zaoszczędź 6 bajtów dzięki Shaggy i 6 bajtów dzięki Cyoce.

Nie jestem pewien, czy powinien wypisać wszystkich użytkowników o tej samej nazwie, czy tylko jednego z nich; ten kod wypisuje je wszystkie.

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

f("tom")


Pokonaj mnie do tego. Zaoszczędź 6 bajtów "//api.stackexchange.com/users?site=codegolf&inname="+a.
Kudłaty

Uwaga: Wygląda na to, że zwrócisz więcej wyników (prawdopodobnie) powinieneś. Próbowałem uzyskać opinię HyperNeutrino na temat tego, co jest właściwe, ale twój wynik zwraca wartości dla użytkowników, których nazwa zawiera tylko dane wejściowe - niezupełnie zgodne. Więc twój najlepszy wynik to „Tom Carpenter”, a nie „Tom”.
Dason,

Czy można by wymienić na _=>alert(_)just alert?
Cyoce

@Dason Tak, to jeden punkt, którego nie byłem pewien; Zmienię odpowiedź, gdy zostanie potwierdzona.
Tom

@Cyoce To działało, dzięki!
Tom

4

Python 2, 178 169 149 bajtów

Użyłbym próśb o to:

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

Zasadniczo używa interfejsu API stosu, aby pobrać informacje jako JSON, a następnie otrzymuje pozycję „reputacja”. Dodatkowo interfejs API zawierał wiele dodatkowych parametrów, które też ogoliłem.

Hojny wkład od: carusocomputing, ElPedro, Malivil, Keerthana Prabhakaran


["items"][0]otrzymuje to tylko pierwszy wynik, w przypadku wielu użytkowników nadal będzie ignorował dodatki, jeśli się nie mylę.
Magic Octopus Urn

import requests as ri r.get(...oszczędza 4 bajty.
ElPedro

@ElPedro zaktualizował go, dzięki za wkład.
Neil,

1
Jeśli zmienisz parametry w taki sposób, aby ?site=codegolf&inname="
odczytał

1
Używanie from requests import*;a=get()zmniejsza bajt!
Keerthana Prabhakaran

3

Groovy, 144 156 bajtów

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

Anonimowe zamknięcie.

EDYCJA: zapomniałem użyć importu groovy.json.dla JSON Slurper + 14 bajtów.

Przykładowe dane wyjściowe [[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, jeśli kiedykolwiek będziesz mógł na to spojrzeć, uważam to za moją ulubioną bibliotekę parsującą JSON. To takie proste.
Magic Octopus Urn

W porządku, dzięki! Rzucę na to okiem.
HyperNeutrino,

0

Szybki, 225 201 bajtów

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

Bez golfa:

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

Przykładowe dane wyjściowe:

["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;
}
)
]
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.