33
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Microsoft Teams Scraping

Last updated at Posted at 2018-10-07

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タグですらない変なゴミは残る.

参考

以上です.

33
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?