twitter で大学のネットワークを監視 [これでも大学職員のブログ -情報センター勤務中-]
http://d.hatena.ne.jp/daigaku-syokuin/20100326/p1
と、いうわけで探してみました。
やはりPowerShell経由でTwitter投稿するスクリプトを作っている方がいました。
SAPIEN Technologies
http://blog.sapien.com/index.php/2008/06/23/out-twitter/
Mike Ormond's Blog
http://blogs.msdn.com/mikeormond/archive/2009/01/30/updated-twitter-powershell-script.aspx
素晴らしい。で、二つのスクリプトの良いとこ取りをしてくっつけてみた。
以下をFixtwit.ps1 として保存してください。
Function Out-Twitter {じゃば、使ってみる。
BEGIN {
#check for global Twitter credential
if (!$global:Twitter_Credential) {
$global:Twitter_Credential=Get-Credential
}
}
PROCESS {
#turn off error pipeline
$erroractionpreference="SilentlyContinue"
[string]$tweet=$_
##Twitter投稿関数
function SubmitWebRequest(
[string] $RequestUrl,
[string] $RequestMethod,
[string] $RequestContentType,
[string] $PostString,
[string] $Username,
[string] $Password
)
{
[System.Net.ServicePointManager]::Expect100Continue = $false
$request = [System.Net.WebRequest]::Create($RequestUrl)
if ($Username) {
$request.Credentials = new-object System.Net.NetworkCredential($Username, $Password)
}
$request.Method = $RequestMethod
if ($RequestMethod -ieq "POST") {
$request.ContentType = $RequestContentType
$formdata = [System.Text.Encoding]::UTF8.GetBytes($PostString)
$request.ContentLength = $formdata.Length
$requestStream = $request.GetRequestStream()
$requestStream.Write($formdata, 0, $formdata.Length)
$requestStream.Close()
}
$response = $request.GetResponse()
$reader = new-object System.IO.StreamReader($response.GetResponseStream())
$returnvalue = $reader.ReadToEnd()
$reader.Close()
return $returnvalue
} #end function
#Short Url
Function Get-Snurl {
Param([string]$link="http://www.google.com")
$tinyurlrequest = "http://tinyurl.com/api-create.php?url=$link"
write-progress "Tweeting" "Getting tiny URL" -cu $tinyurlrequest
$tinyurl = SubmitWebRequest $tinyurlrequest "GET"
write-debug "Tweeting - Received tiny URL Response: $($tinyurl)"
write $tinyurl
}
#search for web links using Regex
[regex]$regex="(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?"
If ($tweet -match $regex) {
$link=$matches[0]
}
#if an embedded url was found, convert it to a snurl link
if ($link) {
$snurl=Get-Snurl $link
$tweet=$tweet.Replace($link,$snurl)
}
if ($tweet.Length -gt 140) {
Write-Warning ("Your message is " + (($tweet.length)-140) + " characters too long.")
$clear=$True
return
}
$tweetstring = [String]::Format("status={0}", $tweet)
$request = [Net.WebRequest]::Create($url)
$twitusername=$global:Twitter_Credential.GetNetworkCredential().Username
$twitpassword=$global:Twitter_Credential.GetNetworkCredential().Password
$twitResponseText = SubmitWebRequest `
"http://twitter.com/statuses/update.xml" `
"POST" `
"application/x-www-form-urlencoded" `
$tweetstring `
$twitusername `
$twitpassword
write-debug "Tweeting - Posted status update. Response: $($twitResponseText)"
}
END {
#if there was an error, then don't keep the global Twitter
#credential
if ($clear) {
Remove-Variable Twitter_Credential -scope Global
}
}
} #end Function
PS 2010/03/28 12:23> . .\fixtwit.ps1fixtwit.ps1 をドット化して実行。
PS 2010/03/28 12:24> "もう昼・・お腹すいた・・" | Out-Twitter
つぶやきたい言葉をはいて、パイプを通し Out-Twitter を実行。
実行すると資格情報を聞かれるので、
Twitterのアカウントとパスワードを入力する。
入力すると処理が走り、投稿完了。
投稿されていることが確認できた。
↑修正しました。
あくまでツギハギなので本家のスクリプトを見に行ってください。
これをPowerShellのバックグラウンド処理を使えば監視っぽいことはできるかもですね。