2009年12月8日火曜日

PowershellでWassrの発言を取得(RSS)してはてなダイアリーに投稿する

というスクリプトを書いた、wassr結構早くログ消えちゃうみたいだしね。
ちょっと乱暴かつ適当な切り貼りをしたんだけど、元がどこだったか。。MSのサイトは結構みたな。
 

仕組み的には自分の発言のRSSを取ってきて、メールにしてはてなダイアリーに投稿する、というもの。
RSSでは20件しか取れないのでヘビー発言ラー向けではないが。
 

とりあえず成功してるもよう⇒http://d.hatena.ne.jp/sawano_hat/
 
 

これをWindowsのタスクに登録して、12時の鐘と同時に起動すればOKさ。
 

[sourcecode language='sh']
# wassr timeline sender
# 2009/12/07

[String]$wassrapi = "http://api.wassr.jp/statuses/user_timeline.rss"
[String]$wassrid = "自分のID"

[String]$smtp = "送信に使うsmtpサーバ"
[String]$port = "smtpポート"
[String]$to = "はてなのメール投稿用アドレス"
[String]$from = "wassr2hatena@example.com"
[String]$user = "SMTP認証ユーザー"
[String]$pass = "SMTP認証パスワード"


# HTTPリクエスト
$webReq = [Net.HttpWebRequest]::Create($wassrapi + "?id=" + $wassrid)
$webRes = $webReq.GetResponse()
$sr = New-Object IO.StreamReader($webRes.GetResponseStream(), $webRes.ContentEncoding)

# レスポンスのRSSをXML型の変数に
[xml]$content = $sr.ReadToEnd()


# 読み込みクローズ
$sr.Close()
$webRes.Close()

# 昨日の日付作成
[DateTime]$yesterday = (get-date).adddays(-1)
$body = "http://wassr.jp/" + $wassrid + "`n`n"

# RSSから発言単位でFroeach
foreach ($item in $content.rss.channel.item){

# 発言の日時を取得
$itemdate = [DateTime]$item.pubDate

# 発言の日時と昨日の日付を比較して、等しければメールボディに
if ($itemdate.Date -eq $yesterday.Date) {
$body = $body + ":[" + $item.link + ":title=" + $itemdate.DateTime + "]:"
$body = $body + $item.title + "`n"
$body = $body + "`n"
}
}

#サブジェクト作成
[String]$subject = "Wassr " + [String]$yesterday.Year + "/" + [String]$yesterday.Month + "/" + [String]$yesterday.Day + " の発言"

#メール準備
$mail = New-Object Net.Mail.MailMessage($from, $to)
$mail.Subject = $subject
$mail.Body = $body
$mail.SubjectEncoding = [Text.Encoding]::GetEncoding("ISO-2022-JP")
$mail.BodyEncoding = [Text.Encoding]::GetEncoding("ISO-2022-JP")

#メール投稿
$sc = New-Object Net.Mail.SmtpClient($smtp)
$sc.port = $port
$sc.Credentials = New-Object Net.NetworkCredential($user, $pass)
$sc.Send($mail)
$mail.Dispose()
[/sourcecode]
 
 

はてなほったらかしだったんで、とりあえず役目ができてよかったよかった。
 



追記:折角だから日付のところをリンクにしよう。
修正した。