Yammer Basicのエクスポートしたメッセージを、Slack用インポートデータにする方法

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ファイルを選択、『インポートを開始する

しばらく待ち、画面を更新すると『必要な情報』ボタンが表示されるのでクリック。
ユーザーチャンネル設定し『変更を保存する

ユーザー・チャンネルがきちんと設定されているのを確認して『はい、このインポートを続行します』

これで作業完了です。
しばらく待っているとチャンネルに情報が表示されます。

インポートしたデータは、なぜかタイムラインに所々しか表示されませんが、検索では表示されていないメッセージも表示されます。

注意点

なぜかインポートできないメッセージがあり問い合わせをしました。

インポート可能なデータ量に制限は設けられていないのですが、メッセージ一件につき 4000 byte の文字数制限があります。日本語の文章の場合は、おおよそ1000〜 1500文字が目安になります。

ということで、長いメッセージは分割が必要のようです。

Yammer

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次