其の1と其の2をまとめるとこんな感じ。手抜きコードですが。。。
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$site = New-Object Microsoft.SharePoint.SPSite("http://wssv3/")
$web = $site.OpenWeb()
function AddListItem([string]$listName, [System.Xml.XmlElement]$item)
{
$isExists= $false
$list = $web.Lists[$listName]
$list.get_items() | foreach{ if($_["ContentId"] -eq $item.guid.get_innertext()){$isExists = $true};}
if ($isExists) {return}
$newItem = $list.items.Add()
$newItem["タイトル"] = $item.title
$newItem["url"] = $item.link
$newItem["本文"] = $item.description
$newItem["ContentId"] = $item.guid.get_innertext()
$newItem.Update()
}
function GetRss([string]$url, [string]$listName)
{
$wc = New-Object System.Net.WebClient
$stream = $wc.OpenRead($url)
$reader = New-Object System.IO.StreamReader($stream)
$xml = New-Object System.Xml.XmlDocument
$xml.LoadXml($reader.ReadToEnd())
$xml.rss.channel.item | ForEach-Object { AddListItem $listName $_ }
}
GetRss "http://blogs.msdn.com/MainFeed.aspx?Type=AllBlogs" "Blog - MSDN"
GetRss "http://blogs.technet.com/MainFeed.aspx?Type=AllBlogs" "Blog - TechNet"
細かい説明は省きますが、重複してたらはじく仕組みも実装してます。
が、コンテンツが増えるに従って処理時間が伸びること、OOになってないことは改良ポイント。