【VBAリファレンス】VBAでアメブロ記事を完全バックアップする技術的アプローチと自動化の実装

スポンサーリンク

概要

アメブロ(Amebaブログ)は多くのブロガーやビジネスマンに利用されていますが、プラットフォーム依存のリスクを考慮すると、自身の資産である記事データをローカル環境にバックアップしておくことは極めて重要です。本稿では、Excel VBAを活用し、アメブロの公開済み記事をスクレイピングして、記事タイトル、投稿日時、および本文を自動的にExcelシートへ抽出・保存する手法を解説します。手動でのコピー&ペーストから解放され、効率的かつ安全にデータ管理を実現するための技術的指針を提供します。

詳細解説

アメブロの記事をVBAで取得するには、主にInternet Explorerコンポーネント(現在は非推奨)ではなく、Microsoft HTML Object LibraryとXMLHTTP、あるいはSelenium VBAを利用するのが現代的な手法です。今回は環境構築のハードルが低く、多くのPCで実行可能な「XMLHTTP」と「HTMLDocument」を用いた手法に焦点を当てます。

この手法の核心は、Webサーバーに対してHTTPリクエストを送信し、返却されたHTMLソースを解析(パース)することにあります。アメブロの記事ページ構造は比較的規則的であり、特定のクラス名やID属性を指定することで、必要なテキストノードに直接アクセス可能です。

具体的には、以下のステップで処理を構築します。
1. 特定のブログの過去記事一覧ページへアクセスし、各記事のURLリストを抽出する。
2. 抽出したURLをループ処理で一つずつ読み込む。
3. 各記事ページのHTMLから、タイトルタグ(h1)や記事本文エリア(通常は特定のdivクラス)のinnerTextを取得する。
4. 取得したデータをExcelの各セルにマッピングし、CSVやExcel形式で保存する。

サンプルコード

以下のコードは、指定したURLから記事タイトルと本文を取得するための基本的な実装例です。実行には、VBAの参照設定にて「Microsoft HTML Object Library」および「Microsoft XML, v6.0」を追加してください。


Sub BackupAmebloArticle()
    Dim xmlHttp As Object
    Dim htmlDoc As Object
    Dim targetUrl As String
    Dim articleTitle As String
    Dim articleBody As String
    
    ' バックアップ対象の記事URL
    targetUrl = "https://ameblo.jp/your-blog-id/entry-xxxxxxxxxxx.html"
    
    Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
    Set htmlDoc = CreateObject("htmlfile")
    
    xmlHttp.Open "GET", targetUrl, False
    xmlHttp.send
    
    If xmlHttp.Status = 200 Then
        htmlDoc.write xmlHttp.responseText
        
        ' タイトルの取得(h1タグ)
        On Error Resume Next
        articleTitle = htmlDoc.getElementsByTagName("h1")(0).innerText
        
        ' 本文の取得(アメブロ特有のクラス名:ameblo-entry-textなど)
        ' ※サイトの構造変更によりクラス名は適宜調整が必要
        articleBody = htmlDoc.getElementById("js_entryBody").innerText
        On Error GoTo 0
        
        ' Excelシートへの書き込み
        With ThisWorkbook.Sheets(1)
            Dim nextRow As Long
            nextRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            .Cells(nextRow, 1).Value = Now
            .Cells(nextRow, 2).Value = articleTitle
            .Cells(nextRow, 3).Value = articleBody
        End With
    Else
        MsgBox "記事の取得に失敗しました。ステータスコード: " & xmlHttp.Status
    End If
    
    Set htmlDoc = Nothing
    Set xmlHttp = Nothing
End Sub

実務アドバイス

実務レベルでこのバックアップシステムを運用する際、注意すべき点がいくつかあります。

第一に「サーバーへの負荷」です。短時間に数千件の記事に対して連続アクセスを行うと、アメブロ側のサーバーから「Bot」とみなされ、IPアドレスが制限される可能性があります。各リクエストの間に「Application.Wait」を用いて数秒間の待機時間を設けるなど、常識的な配慮が不可欠です。

第二に「構造の変化への対応」です。アメブロはプラットフォーム側の改修により、HTMLのIDやクラス名が変更されることがあります。コードが動かなくなった場合は、ブラウザの開発者ツール(F12キー)を使い、現在のHTML構造を再度確認してください。

第三に「例外処理の強化」です。インターネット接続が途切れた際や、記事が限定公開(ログイン必須)になっている場合、コードはエラーで停止します。`On Error GoTo`文を用いて、エラー発生時のスキップ処理やログ出力を実装することで、長時間の自動処理を安定させることができます。

第四に「文字コードの問題」です。XMLHTTPはUTF-8を標準で扱いますが、環境によっては文字化けが発生することがあります。その場合は、ADODB.Streamを使用してバイナリとして取得し、文字列にデコードする手法が有効です。

まとめ

VBAを用いたブログバックアップは、単なるデータ保存以上の価値をもたらします。蓄積したデータをExcel上で管理することで、過去記事のキーワード分析や、リライトが必要な古い記事の抽出など、ブログ運営の戦略的な分析が可能になります。

今回ご紹介した手法は、プログラミング初心者にとっては少し難易度が高いかもしれませんが、一度仕組みを作ってしまえば、どんなに膨大な記事数であっても数分でバックアップが完了します。ぜひこの技術を習得し、あなたの大切なデジタル資産を自身の管理下に置いてください。VBAは、こうした「面倒な繰り返し作業」を自動化するための最強の武器となります。継続的な改善を繰り返し、より高度なバックアップシステムへと進化させていきましょう。

タイトルとURLをコピーしました