ChartWorkのチャット履歴をPowerShellからバックアップ

$api_token = "API Token"
$headers = @{
    "X-ChatWorkToken" = $api_token
}

# ディレクトリを作成
$date = Get-Date -Format "yyyyMMdd-HHmmss"
$out_base_dir = "E:\ChatWork\${date}"
$out_messages_dir = "${out_base_dir}\messages"
$out_files_dir = "${out_base_dir}\files"
New-Item -Type Directory $out_messages_dir
New-Item -Type Directory $out_files_dir

# ルーム一覧を取得
$uri = "https://api.chatwork.com/v2/rooms"
try {
    $response = Invoke-RestMethod -Uri $uri -Headers $headers -Method GET
} catch {
    $_.Exception
}

# メッセージおよびファイルをエクスポート
$response | ForEach-Object {
    $room_id = $_.room_id
    $room_name = $_.name
    if ($room_name -ccontains "マイチャット" ) {
        $mychat_room_id = $room_id
    }
    $uri = "https://api.chatwork.com/v2/rooms/" + $room_id + "/messages?force=1"
    try {
        $response = Invoke-RestMethod -Uri $uri -Headers $headers -Method GET
        $file_name =  "${out_messages_dir}\${room_id}_${room_name}.json"
        # メッセージをエクスポート(最新から100件まで)
        $response | ConvertTo-Json | Out-File $file_name -Encoding utf8 -Append
    } catch {
        $_.Exception
    }

    if ($room_id) {
        $uri = "https://api.chatwork.com/v2/rooms/" + $room_id + "/files"
        try {
            $response = Invoke-RestMethod -Uri $uri -Headers $headers -Method GET
            $file_id = $response.file_id
        } catch {
            $_.Exception
        }
    }

    if ($file_id) {
        $uri = "https://api.chatwork.com/v2/rooms/" + $room_id + "/files/" + $file_id + "?create_download_url=1"
        try {
            $response = Invoke-RestMethod -Uri $uri -Headers $headers -Method GET
            if ($response.download_url) {
                $filename = $response.filename
                $file_name = "${out_files_dir}\${file_id}_${filename}"
                # ファイル履歴をダウンロード(最新から100件まで)
                Invoke-WebRequest -Uri $response.download_url -OutFile $file_name
            }
        } catch {
            $_.Exception
        }
    }
}

# 転送
$SERVER = "\\192.168.1.x\ChatWork"
$USER = "hoge"
$PASS = "fuga"
$BACKUP_DIR = "${SERVER}\${date}"
net use $SERVER /delete
net use $SERVER $PASS /user:$USER
robocopy $out_base_dir $BACKUP_DIR /COPY:DAT /E /R:3 /W:3 /NP /XJD /LOG:export_chatwork.log
net use $SERVER /delete

if ($mychat_room_id) {
    $uri = "https://api.chatwork.com/v2/rooms/" + $mychat_room_id + "/messages"
    try {
        Add-Type -AssemblyName System.Web
        $body = "【自動投稿】以下にチャットの履歴をバックアップしました。`n"
        $body += " - " + $out_base_dir + "`n"
        $body += " - " + $BACKUP_DIR
        $body = [System.Web.HttpUtility]::UrlEncode($body,[Text.Encoding]::GetEncoding("UTF-8"))
        Invoke-RestMethod -Uri $uri -Headers $headers -Method POST -Body "body=${body}&self_unread=0"
    } catch {
        $_.Exception
    }
}
“`

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*