Обчисліть репутацію користувача


12

Виклик

Враховуючи ім’я користувача (не ідентифікатор, ми вже маємо це завдання), виведіть його поточну репутацію та його ідентифікатор.

Вхідні дані

Введенням буде окремий рядок, який є іменем користувача користувача. Ви можете припустити, що цей користувач існує.

Вихідні дані

Вихід буде двома цілими числами або STDOUT, або STDERR, що буде репутацією користувача та ідентифікатором користувача. Вони повинні бути в такому конкретному порядку і можуть виводитися в будь-якому розумному форматі

Особливості

  • Вихід репутації не повинен перевищувати 10 хвилин.
  • Ваша програма може не видавати помилок під час звичайного виконання
  • Застосовуються стандартні лазівки (включаючи відсутність скорочень URL-адрес)
  • Якщо з цим ім'ям користувача є більше одного користувача, ви можете вивести статистику будь-якого користувача з цим ім'ям користувача. Це також, чому ви повинні вивести ідентифікатор.
  • Репутація, яка виводиться, - це репутація користувача на PPCG, а не загальна оцінка мережі.

Сайт API стека Exchange можна знайти тут . Ви можете прочитати документацію звідти.


Зв’яжіть API обміну стеками.
Чарівний восьминіг Урна

@carusocomputing Зробимо, спасибі Мені також потрібно щось виправити, оскільки, мабуть, кілька користувачів можуть мати одне ім’я.
HyperNeutrino

Я думаю, це правило діє? Крім того, чи можете ви підтвердити, що це загальна репутація користувача на PPCG, а не SE?
Арнольд

@Arnauld я скажу так. І я підтверджую, що це просто репутація PPCG. Я уточню це у виклику. Дякую.
HyperNeutrino

Ну, я зробив цей запис T-SQL, але він не відповідає правилу 1, оскільки він недостатньо оновлений :(
ʰᵈˑ

Відповіді:


1

Bash + JQ , 93 байти

Повернув 87-байтну версію, оскільки вона неправильно обробляла відповіді користувачів.

Гольф

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

Виведе перший ідентифікатор користувача та репутацію в окремих рядках.

Як це працює ?

1) curl + zcatвикористовуються для отримання відповіді відформатованого API JSON

2) jq ..|numbersрозгортатиме JSON рекурсивно та друкує всі числові значення, по одному на рядок

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

(номери рядків додані лише nlдля ілюстрації)

3) Далі ми використовуємо sedдля пошуку першого account_idта reputationза їх абсолютними номерами рядків

Тест

>./reputation zeppelin
3315904
6275

6

JavaScript (ES6), 145 139 136 125 123 117 байт

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

Збережено 6 байт завдяки Shaggy та 6 байтів завдяки Cyoce.

Я не впевнений, чи повинен він виводити всіх користувачів з тим самим іменем або лише одного з них; цей код виводить їх усіх.

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

f("tom")


Бий мене до цього. Збережіть 6 байт за допомогою "//api.stackexchange.com/users?site=codegolf&inname="+a.
Кудлатий

Примітка. Схоже, ви повернете більше результатів, ніж ви (можливо) повинні. Я намагався отримати відгук HyperNeutrino про те, що підходить, але ваш результат повертає значення для користувачів, ім'я яких лише містить вхідні дані - не точно відповідають. Тож ваш головний результат - для "Тома Карпентера", а не для "Тома".
Дасон

Чи можна було б замінити _=>alert(_)на просто alert?
Кіос

@Dason Yep, в цьому я не був впевнений; Я зміню свою відповідь, коли вона буде підтверджена.
Том

@Cyoce Це спрацювало, дякую!
Том

4

Пітон 2, 178 169 149 байт

Я використовую для цього запити:

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

В основному, він використовує api стека для отримання інформації як JSON, а потім отримує пункт "репутація". Крім того, в API було багато додаткових параметрів, і я їх також виголив.

Щедрі внески: Carusocomputing, ElPedro, Malivil, Keerthana Prabhakaran


["items"][0]це отримує лише перший результат, у випадку з кількома користувачами він все одно буде ігнорувати додаткові, якщо я не помиляюся.
Чарівний восьминіг Урна

import requests as rі r.get(...економить 4 байти.
ElPedro

@ElPedro оновив його, дякую за вклад.
Ніл

1
Якщо змінити параметри так, щоб вони читали, ?site=codegolf&inname="ви можете зберегти 3 байти (+ "")
Малівіль,

1
Використання from requests import*;a=get()зменшує байт!
Keerthana Prabhakaran

3

Groovy, 144 156 байт

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

Анонімне закриття.

EDIT: забув використовувати імпорт groovy.json.для JSON Slurper + 14 байт.

Приклад виводу [[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


@HyperNeutrino, якщо ви коли-небудь отримаєте можливість подивитися його, я вважаю це моєю улюбленою бібліотекою JSON для розбору. Це так легко.
Magic Octopus Urn

Добре, дякую! Я погляну на це.
HyperNeutrino

0

Свіфт, 225 201 байт

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

Без гольфу:

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

Приклад виводу:

["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;
}
)
]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.