YammerからSlackへメッセージを移行する際のメモ
Yammerのデータをバックアップ(エクスポート)
左上の設定アイコンから『設定の編集』 – 『ネットワーク』 – 『データのダウンロード 』でデータ(export-xxxxxxxxxxxxx.zip)をダウンロード
ダウンロードしたファイルを解凍
Messages.csv
がメッセージのバックアップファイルになります。
適当な場所にファイルをコピーします。
Slackにインポートできるようにファイルを加工
Messages.csv
を以下のフォーマットに準拠するように、ファイル情報を加工し別の名前で保存します。
“タイムスタンプ (unix タイムスタンプ)”,”チャンネル”,”ユーザー名”,”テキスト”
簡単なサンプルプログラム
複数ファイルを加工するのが面倒なので、プログラムを作成しました。
コードはGitHubにもアップしてあります。
PHP
<?php
$CHANNEL = 'チャンネル'; // インポートするチャンネル名
$IMPORT = 'Import'; // 入力用ディレクトリ
$EXPORT = 'Export'; // 出力用ディレクトリ
define("SENDER_EMAIL", 13);
define("BODY", 14);
define("CREAED_AT", 20);
$d = glob('./' . $IMPORT . '/*.csv');
echo 'File: ' . count($d) . '<br /><br />';
foreach ($d as $fn) {
$f = new SplFileObject($fn);
$f->setFlags(
SplFileObject::READ_CSV |
SplFileObject::READ_AHEAD |
SplFileObject::SKIP_EMPTY
);
$csv = '';
$name = '';
$i = 0;
foreach ($f as $v) {
if ($i == 1) { // 最初の有効データを使う
$name = strstr($v[SENDER_EMAIL], '@', true); // メールアドレスのアカウント名
$w = './' . $EXPORT . '/' . $name . '.csv';
}
if ($i != 0) { // 最初の行(ヘッダー)以外は処理
$csv .= '"' . strtotime($v[CREAED_AT]) . '","' . $CHANNEL . '","' . $name . '","' . $v[BODY] . '"' . "\n";
}
$i++;
}
echo $fn . ' => ' . $w . ' ( ' . number_format($i) . ' )<br />';
file_put_contents($w, $csv);
}
Python
import csv
import glob
import datetime
CHANNEL_NAME = 'チャンネル' # インポートするチャンネル名
IMPORT_DIR = 'Import' # 入力用ディレクトリ
EXPORT_DIR = 'Export' # 出力用ディレクトリ
MAIL_POS = 13
BODY_POS = 14
TIME_POS = 20
file_list = glob.glob(f'.\{IMPORT_DIR}\*.csv')
print('File: '+str(len(file_list)))
for file_name in file_list :
csv_data = ''
with open(file_name, 'r', encoding='utf-8') as f:
i = 0
csv_reader = csv.reader(f)
for value in csv_reader:
if i == 1: # メールアドレスを使用して出力ファイル名の設定
name_num = value[MAIL_POS].find('@')
name = value[MAIL_POS][0:name_num]
w = f'.\{EXPORT_DIR}\{name}.csv'
if i != 0: # 最初の行(ヘッダー)以外を処理
ut = int((datetime.datetime.strptime(value[TIME_POS],"%Y-%m-%dT%H:%M:%S.%fZ")).timestamp())
csv_data += f'"{ut}","{CHANNEL_NAME}",{name}","{value[BODY_POS]}"\n'
i += 1
with open(w, 'w', encoding='utf-8', newline='\n') as wf:
wf.write(csv_data)
こんな感じでフォルダを作成し、Messages.csv
を適当にリネームしてImportフォルダに入れます。php または Pythonスクリプト
にアクセス/実行すれば、Yammerに登録してある『メールアカウント名(@より左の文字列).csv』がExportフォルダに作成されます。
名前はなぜか漢字だとうまくインポートできなかったのであえてメールアドレスにしています。
Slackにインポート
Slackを開き左上のワークスペースをクリックし、『設定と管理』 – 『ワークスペースの設定』 – 画面右上にある『データのインポート/エクスポート』 – CSV/テキストファイルの『インポート』を選択。
『ファイルの選択』ボタンを押して変換したCSVファイルを選択、『インポートを開始する』
しばらく待ち、画面を更新すると『必要な情報』ボタンが表示されるのでクリック。
ユーザー・チャンネルを設定し『変更を保存する』
ユーザー・チャンネルがきちんと設定されているのを確認して『はい、このインポートを続行します』
これで作業完了です。
しばらく待っているとチャンネルに情報が表示されます。
インポートしたデータは、なぜかタイムラインに所々しか表示されませんが、検索では表示されていないメッセージも表示されます。
注意点
なぜかインポートできないメッセージがあり問い合わせをしました。
ということで、長いメッセージは分割が必要のようです。
コメント