2011-06-12 25 views
3

有沒有人使用過下面的代碼?我如何讓它發佈推文?我知道我必須使用「$req.Context.RawUri = [Uri]'http://api.twitter.com/version/statuses/update.xml」,但我無法獲得「$res = [xml][DevDefined.OAuth.Consumer.ConsumerRequestExtensions]::ReadBody($req)」的權利。如何使用Powershell發推文給推特?

Add-Type -Path C:\OAuthDevDefined\DevDefined.OAuth.dll 

$cons = New-Object devdefined.oauth.consumer.oauthconsumercontext 

$cons.ConsumerKey = 'key' 

$cons.ConsumerSecret = 'key' 

$cons.SignatureMethod = [devdefined.oauth.framework.signaturemethod]::HmacSha1 

$session = new-object DevDefined.OAuth.Consumer.OAuthSession $cons, $null, $null, $null 

$accessToken = new-object DevDefined.OAuth.Framework.TokenBase 

$at = import-cliXml C:\temp\myTwitterAccessToken.clixml 

$accessToken.ConsumerKey, $accessToken.Realm, $accessToken.Token, $accessToken.TokenSecret = ` 
    $at.ConsumerKey, $at.Realm, $at.Token, $at.TokenSecret 

$req = $session.Request($accessToken) 

$req.Context.RequestMethod = 'GET' 

$req.Context.RawUri = [Uri]'http://api.twitter.com/1/statuses/friends_timeline.xml?count=5' 

$res = [xml][DevDefined.OAuth.Consumer.ConsumerRequestExtensions]::ReadBody($req) 

$res.statuses.status | % { $_.user.Name } 
+0

爲什麼你想使用PowerShell的呢?你不能使用C#並在PowerShell中使用它? – manojlds 2011-06-12 20:20:09

+0

建立一個輕量級的應用程序,可以用簡單的命令啓動。 – troz123 2011-06-12 20:23:57

+0

任何最終解決方案與完整的源代碼示例工作? – Kiquenet 2014-01-08 15:17:03

回答

7

我也使用DevDefined的OAuth。我的功能看起來是這樣的:

function Post-Twitter { 
    param(
     [Parameter(Mandatory=$true)][string]$url 
    ) 
    if (!$script:accessToken) { 
     throw 'token is not initialized' 
    } 

    try { 
    $cons = New-Object devdefined.oauth.consumer.oauthconsumercontext 
    $cons.ConsumerKey = $consumerKey 
    $cons.ConsumerSecret = $consumerSecret 
    $cons.SignatureMethod = [devdefined.oauth.framework.signaturemethod]::HmacSha1 
    $session = new-object DevDefined.OAuth.Consumer.OAuthSession ` 
     $cons, 
     "http://twitter.com/oauth/request_token", 
     "http://twitter.com/oauth/authorize", 
     "http://twitter.com/oauth/access_token" 
    $token = Get-AccessToken 
    $req = $session.Request($token) 
    $req.Context.RequestMethod = 'POST' 
    $req.Context.RawUri = new-object Uri $url 
    [DevDefined.OAuth.Consumer.ConsumerRequestExtensions]::ReadBody($req) 
    } catch { 
    Write-Warning "Exception: $_" 
    $null 
    } 
} 

然後爲簡單起見我通過查詢字符串狀態:

add-type -assembly System.Web 
$status = [system.Web.Httputility]::UrlEncode('some tweet') 
Post-Twitter "http://api.twitter.com/1/statuses/update.xml?status=$status" 

看來你瞭解消費者鍵/祕密和令牌的事情,所以我會離開它沒有進一步的解釋。

+0

感謝您的回覆...但是我不能得到它的工作...... :( – troz123 2011-06-12 21:48:01

+0

我一直在收到錯誤「遠程服務器返回錯誤417期望失敗」,所以我添加了[System.Net.ServicePointManager] :: Expect100Continue = $ false,但現在我得到了奇怪的html代碼。 – troz123 2011-06-12 21:48:49

+0

nm我想通了!再次感謝您的幫助!!! – troz123 2011-06-12 22:02:45

0

我剛剛在TechNet圖庫上發佈了Powershell Twitter REST API 1.1模塊...您將可以從Twitter API發佈/獲取! https://goo.gl/s7pmmA