Подтвердить что ты не робот

Репутация StackOverflow с использованием PowerShell

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

4b9b3361

Ответ 1

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

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, но это выполнит эту работу.

Ответ 2

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

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

В следующем примере используется класс 3.5 JavaScriptSerializer, который требует загрузки сборки в нашем script.

Update

С 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

Ответ 3

В 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>