【问题标题】:How to post a tweet to twitter using Powershell?如何使用 Powershell 在 Twitter 上发布推文?
【发布时间】:2011-09-13 12:59:26
【问题描述】:

有人用过下面的代码吗?如何让它发布推文?我知道我必须使用“$req.Context.RawUri = [Uri]'http://api.twitter.com/version/statuses/update.xml”,但我无法正确使用“$res = [xml][DevDefined.OAuth.Consumer.ConsumerRequestExtensions]::ReadBody($req)”。

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 }

【问题讨论】:

  • 为什么要为此使用 powershell?不能用c#在powershell中使用吗?
  • 构建一个可以通过简单命令启动的轻量级应用程序。
  • 任何带有完整源代码示例的最终解决方案?

标签: powershell twitter twitter-oauth


【解决方案1】:

我也使用 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"

您似乎知道消费者密钥/秘密和令牌的事情,所以我将不做进一步解释。

【讨论】:

  • 感谢您的回复...但是我无法正常工作... :(
  • 我不断收到错误“远程服务器返回错误 417 预期失败”所以我添加了 [System.Net.ServicePointManager]::Expect100Continue = $false 但现在我得到了奇怪的 html 代码.
  • 您对 417 代码的解决方案是什么?没见过。
【解决方案2】:

我刚刚在 TechNet Gallery 上发布了一个 Powershell Twitter REST API 1.1 模块……您将能够从 Twitter API 发布/获取! https://goo.gl/s7pmmA

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-07
    • 2020-03-05
    • 2019-03-06
    • 1970-01-01
    • 2023-04-09
    • 2012-10-27
    • 1970-01-01
    • 2013-06-08
    相关资源
    最近更新 更多