Использование репутации StackOverflow PowerShell

Python, javascript, обычный lisp, ruby, smalltalk, haskell и ocaml, с макушки моей головы. Это не совсем экзотическая комбинация.

22
задан George Stocker 3 June 2009 в 18:05
поделиться

2 ответа

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

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

29
ответ дан 29 November 2019 в 04:04
поделиться

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

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

Далее используется класс 3.5 JavaScriptSerializer , который требует, чтобы мы загрузили сборку в наш сценарий.

Обновление

С 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
19
ответ дан 29 November 2019 в 04:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: