如何使用PowerShell功能查看我的声誉?
答案 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">●</span><span class="badgecount">1</span></span><span title="7 bronze badges"><span lass="badge3">●/span><span class="badgecount">7</span></span>