RSS の重複記事を削除するマクロ


先週に引き続き RSS に関するマクロです。
Outlook 2007 で RSS フィードの購読をしていると、時々同じ記事が重複して受信されることがあります。
重複するシナリオは以下のようなものです。

1. RSS によりある記事を受信する。
2. 次の RSS の受信のタイミングで、1. で受信した記事がない XML データを受信する。
3. さらに次の RSS の受信のタイミングで 1. の記事が XML データに含まれる。→ 復活した記事は 1. とは異なる記事として認識されて重複する。

つまり、RSS を配信しているサイトで何らかのトラブルがあった場合に、このような状態が発生して記事が重複してしまうようです。
記事が重複しているかどうかは、通常その記事の URL で判断できますので、重複する URL を持つ RSS の記事があった場合に削除するマクロを作ってみました。


Public Sub DeleteDuplicatedRSSItems()
    Dim objRssFeeds 'As Folder
    Dim objRssFeed 'As Folder
    Dim objPost 'As PostItem
    Dim objOldPost 'As PostItem
    Dim dictURLs 'As Dictionary
    Dim strURL 'As String
    Dim bDeleted 'As Boolean
    Dim i 'As Integer
    '
    On Error Resume Next
    '
    Const SCHEMA_RSSFEED = "http://schemas.microsoft.com/mapi/id/{00062041-0000-0000-c000-000000000046}/8901001e"
    
    Set objRssFeeds = Application.Session.GetDefaultFolder(olFolderRssFeeds)
    '
    For Each objRssFeed In objRssFeeds.Folders
        Set dictURLs = CreateObject("Scripting.Dictionary")
        For i = objRssFeed.Items.Count To 1 Step -1
            Set objPost = objRssFeed.Items(i)
            strURL = objPost.PropertyAccessor.GetProperty(SCHEMA_RSSFEED)
                '
            If dictURLs.Exists(strURL) Then
                Set objOldPost = Application.Session.GetItemFromID(dictURLs.Item(strURL))
                '
                If objOldPost.ReceivedTime <= objPost.ReceivedTime Then
                    If Not objPost.UnRead Then objOldPost.UnRead = False
                    objPost.UnRead = False
                    objPost.Delete
                    bDeleted = True
                Else
                    If Not objOldPost.UnRead Then objPost.UnRead = False
                    objOldPost.UnRead = True
                    objOldPost.Delete
                    dictURLs.Remove strURL
                    dictURLs.Add strURL, objPost.EntryID
                End If
            Else
                dictURLs.Add strURL, objPost.EntryID
            End If
            DoEvents
        Next
    Next
End Sub


マクロの登録方法やメニューへの追加について

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中