Python, javascript, обычный lisp, ruby, smalltalk, haskell и ocaml, с макушки моей головы. Это не совсем экзотическая комбинация.
Вы можете использовать следующую функцию
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, но это выполнит свою работу.
Этот вопрос выглядел очень забавным, и мне пришлось попробовать, хотя на него уже есть принятый ответ. Кроме того, принятый ответ, похоже, не работает должным образом для репутации выше 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