Рассчитать репутацию пользователя


12

Вызов

Учитывая имя пользователя (не ID, у нас уже есть этот вызов), выведите его текущую репутацию и ID.

вход

Ввод будет единственной строкой, которая является именем пользователя. Вы можете предположить, что этот пользователь существует.

Выход

Выходными данными будут два целых числа для STDOUT или STDERR, которые будут репутацией пользователя и идентификатором пользователя. Они должны быть в указанном порядке и могут быть выведены в любом разумном формате

конкретика

  • Результат репутации не должен быть более 10 минут устаревшим.
  • Ваша программа не может выдавать ошибки во время нормального выполнения
  • Применяются стандартные лазейки (включая без URL-сокращений)
  • Если существует более одного пользователя с таким именем, вы можете вывести статистику любого пользователя с таким именем. Это также, почему вы должны вывести идентификатор.
  • Выводимая репутация - это репутация пользователя на PPCG, а не общая оценка сети.

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


Связать API обмена стека.
Волшебная Урна Осьминога

@carusocomputing Подойдет, спасибо. Мне также нужно что-то исправить, потому что несколько пользователей могут иметь одно и то же имя.
HyperNeutrino

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

@ Arnauld я скажу да. И я подтверждаю, что это просто репутация PPCG. Я уточню это в вызове. Благодарю.
HyperNeutrino

Я сделал эту запись T-SQL, но она не соответствует правилу 1, поскольку она недостаточно обновлена ​​:(
ʰᵈˑ

Ответы:


1

Bash + JQ , 93 байта

Откатил 87-байтовую версию, так как она неправильно обрабатывает многопользовательские ответы.

Golfed

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?
Cyoce

@ Дейсон Да, в этом я не был уверен; Я изменю свой ответ, когда он подтвердится.
Том

@Cyoce Это сработало, спасибо!
Том

4

Python 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 было много дополнительных параметров, я их тоже сбрил.

Щедрые пожертвования: Карусокомпьютинг, ЭльПедро, Маливил, Киртана Прабхакаран


["items"][0]это только первый результат, в случае с несколькими пользователями он все равно будет игнорировать дополнительные функции, если я не ошибаюсь.
Волшебная Урна Осьминога

import requests as rи r.get(...сохраняет 4 байта.
ElPedro

@ElPedro обновил его, спасибо за вклад.
Нил

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

1
Использование from requests import*;a=get()уменьшает байт!
Киртана Прабхакаран

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

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

РЕДАКТИРОВАТЬ: забыл использовать импорт 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 для разбора. Это очень просто.
Волшебная Урна Осьминога

Хорошо, спасибо! Я посмотрю на это.
HyperNeutrino

0

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

Un-golfed:

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.