Репутация StackOverflow с помощью PowerShell - PullRequest
22 голосов
/ 03 июня 2009

Как я могу просмотреть свою репутацию с помощью функции PowerShell?

Ответы [ 3 ]

29 голосов
/ 03 июня 2009

Вы можете использовать следующую функцию

Function Get-StackOverFlowReputation {
param($userID)
    $client = new-object System.Net.WebClient
    $JSONFlair = $client.DownloadString("http://stackoverflow.com/users/flair/$userid.json")
    $JSONFlair.split(",") | select-string "reputation","displayName"
}


260 >  Get-StackOverFlowReputation -userID 45571

"displayName":"Andy Schneider"
"reputation":"344"

Это быстро и грязно. Я уверен, что вы могли бы использовать некоторую изящную библиотеку для преобразования JSON в PSobject, но это сделает работу.

19 голосов
/ 17 июля 2009

Этот вопрос выглядел очень забавным, и мне пришлось попробовать его, хотя на него уже был принят ответ. Кроме того, принятый ответ не работает должным образом для репутаций, которые превышают 999 (то есть 1000 содержит запятую , которая также разделяется).

Поскольку формат Flair представлен в JSON, простое разбиение на него не всегда работает, и регулярное выражение для JSON практически невозможно. Несмотря на то, что есть библиотеки .NET JSON, я хотел сохранить решение в PowerShell (включая V1).

Далее используется класс JavaScript *erializer 3.5 * 1009, который требует от нас загрузки сборки в нашем скрипте.

Обновление

С PowerShell 2.0 гораздо проще создавать «пользовательские объекты» с хешами.

function Get-StackOverflowReputation 
{
    param ( $UserId )
    $assembly = [Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions")
    $client = New-Object System.Net.WebClient
    $json = $client.DownloadString("http://stackoverflow.com/users/flair/$UserId.json")
    $transmogrifer = New-Object System.Web.Script.Serialization.JavaScriptSerializer
    $jsonFlair = $transmogrifer.DeserializeObject( $json ) 
    $flair = New-Object PSObject -Property @{ user = $jsonFlair["displayName"]; rep = $jsonFlair["reputation"] }
    $flair
}

1> Get-StackOverflowReputation -UserId 45571      
    user                 rep
    ----                 --- 
    Andy Schneider       779
6 голосов
/ 06 ноября 2011

В Powershell v3 CTP1 он короче и проще:

function Get-StackOverflowReputation {
param($userID)
  $JSON = (Invoke-WebRequest "http://stackoverflow.com/users/flair/$userid.json").content
  convertfrom-Json $JSON
}

работает

Get-StackOverflowReputation 1021945

возвращается:

id           : 1021945
gravatarHtml :
profileUrl   : http://stackoverflow.com/users/1021945/jon-z
displayName  : jon Z
reputation   : 1,271
badgeHtml    : <span title="1 silver badge"><span class="badge2">&#9679;</span><span class="badgecount">1</span></span><span title="7 bronze badges"><span lass="badge3">&#9679;/span><span class="badgecount">7</span></span>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...