Edited at

Microsoft Teams Scraping


Microsoft Teams Scraping

更新履歴

- 2019/02/13 Application Registration Portalが,AzurePortalと統合されたことにより画面イメージが変更になったことと,トークンの更新にoffline_readが必要なので更新.

- 2019/02/25 いいね・被いいねの関係性や,メッセージの投稿に対する返答の関係性のデータを抽出できるようにしました.

image.png


目的


  • Microsoft Teams上でやりとりされているメッセージを全て取得します.

  • 個人的なチャットは2018/10/06現在取得できません.

  • 取得できる範囲は,AD認証したユーザーが所属している全チームのメッセージです.


結論


全コード


使い方


ADアプリ登録



  • Registragion Portalにアクセス,ログイン.


  • 下記の通りに登録する.


    • 名前:任意

    • リダイレクトURL:http://localhost:3000/token

    • アクセス許可(Mailとかは本当は不要なので削ってOK)
      image.png



  • 発行されたキーと,パスワードを控えておく.



アプリの準備


  • 下記からClone

  • GitHub

  • 変数の書き換え(環境変数にセットするのが面倒であれば,直接書き換えで良い)
    image.png


    • LoginURL:Azure Portalの右上で確認できる,下記値を設定
      image.png

    • clientId:アプリ登録時に控えたキー

    • secret:アプリ登録時に控えたシークレット



  • 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


解説


概要


  • AD認証して,Microsoft Graph API経由でTeamsのデータを取得する.

  • つい最近できるようになった.以前はできなかった.
    image.png


APIのクセ


  • 一度に取得できるメッセージの上限が決まっている.

  • テキスト全体を取得しようとすると,上限数で切られた状態でテキストが返ってきて,HTTP HeaderのOdataにNextLinkが設定される.NextLinkで再度取得すると,前回取得した次の部分からテキストを取得できる.

  • このようにNextLinkを繰り返していき,メッセージをリカーシヴに取得し続ける.

  • なお,メッセージに対する返信も取得している.
    image.png


所感


  • Twitterなどのスクレイピングとかとクセは変わらない.AD認証がひと手間いるぐらい.

  • いいね数や,いいねした人も取得できる. →取得するように修正しました(2019/02/285)

  • 添付ファイルも取得できる.

  • 今回のテキストクリーニングは,URLとHTMLタグの削除のみ.

  • それでもHTMLタグですらない変なゴミは残る.


参考

以上です.