使用PowerShell的StackOverflow信誉

时间:2009-06-03 18:01:07

标签: powershell

如何使用PowerShell功能查看我的声誉?

3 个答案:

答案 0 :(得分:29)

您可以使用以下功能

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,但这将完成工作。

答案 1 :(得分:19)

这个问题看起来非常有趣,我不得不尝试一下,即使它已经有了一个可接受的答案。此外,对于大于999的声誉(即 1,000 包含逗号也正在被拆分),接受的答案似乎不适用。

由于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

答案 2 :(得分:6)

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