Microsoft Teams Scraping
更新履歴
- 2019/02/13 Application Registration Portalが,AzurePortalと統合されたことにより画面イメージが変更になったことと,トークンの更新にoffline_readが必要なので更新.
- 2019/02/25 いいね・被いいねの関係性や,メッセージの投稿に対する返答の関係性のデータを抽出できるようにしました.
目的
- Microsoft Teams上でやりとりされているメッセージを全て取得します.
- 個人的なチャットは2018/10/06現在取得できません.
- 取得できる範囲は,AD認証したユーザーが所属している全チームのメッセージです.
結論
全コード
使い方
ADアプリ登録
-
Registragion Portalにアクセス,ログイン.
-
下記の通りに登録する.
- 名前:任意
- リダイレクトURL:http://localhost:3000/token
- アクセス許可(Mailとかは本当は不要なので削ってOK)
-
発行されたキーと,パスワードを控えておく.
アプリの準備
- 下記からClone
- GitHub
- 変数の書き換え(環境変数にセットするのが面倒であれば,直接書き換えで良い)
npm intall
node index.js
- http://localhost:3000 にアクセスすると,ADログイン画面に飛ばされる.ログイン後,ログインしたユーザーが所属するチームのスクレイピングが始まり,スクレイピングが終了すると「teams.tsv」が吐き出される.
出力形式
i.e. (IDはでたらめな数字に置き換えています.)
teams.tsv
teamId | teamName | channelId | channelName | userId | name | content |
---|---|---|---|---|---|---|
9d93a0d9-c462-4cbb-9cb8-9badb0b65f45 | マネージャーチーム | 05:6d03b62a324042e6885d2f8bf2d80b6e@thread.skype | General | b0543ed0-a012-4653-bbd7-9fe60c967af7 | 高橋 | みなさんこんにちは.本日のアジェンダをお送りします. |
teams_relations.tsv
relationType | fromUserId | toUserId |
---|---|---|
like | 7de1cc33-077b-42c3-9fdd-2d5c62a31522 | 95eecce7-f85e-4c4b-9df3-4a7e1d02d03b |
like | d9db64c1-bd8c-45a2-8552-012e54ebcb20 | bde2bf3e-5307-416b-b469-d2c730f2ab65 |
reply | 4a543f69-917d-4eb5-8f56-14955fde3ea1 | bde2bf3e-5307-416b-b469-d2c730f2ab65 |
like | bde2bf3e-5307-416b-b469-d2c730f2ab65 | 4a543f69-917d-4eb5-8f56-14955fde3ea1 |
reply | 7de1cc33-077b-42c3-9fdd-2d5c62a31522 | 5095ec96-e9be-492a-a8e7-7b1ce466a5dc |
解説
概要
APIのクセ
- 一度に取得できるメッセージの上限が決まっている.
- テキスト全体を取得しようとすると,上限数で切られた状態でテキストが返ってきて,HTTP HeaderのOdataにNextLinkが設定される.NextLinkで再度取得すると,前回取得した次の部分からテキストを取得できる.
- このようにNextLinkを繰り返していき,メッセージをリカーシヴに取得し続ける.
- なお,メッセージに対する返信も取得している.
所感
- Twitterなどのスクレイピングとかとクセは変わらない.AD認証がひと手間いるぐらい.
- いいね数や,いいねした人も取得できる. →取得するように修正しました(2019/02/285)
- 添付ファイルも取得できる.
- 今回のテキストクリーニングは,URLとHTMLタグの削除のみ.
- それでもHTMLタグですらない変なゴミは残る.
参考
以上です.