ホーム DoRuby APIを叩いてslackから発言を取ってくる
APIを叩いてslackから発言を取ってくる
 

APIを叩いてslackから発言を取ってくる

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

目次

  • 概要
  • Slack API
  • トークンに関して
  • コード

概要

パワーメタルやシンフォニックメタルが最近のお気に入りです。
新卒はslackにDorubyのネタになりそうなアイデアの種を雑に書き込むチャンネルを作ってます。
が、slackの無料版では10000メッセージまでしか見られないので、今月の記事を書こうとしたら過去のネタが消えているという悲しい出来事がありました。
もう悲しい思いはしたくないのでslackの投稿を定期的に保存しておこう。というのがこの記事のテーマです。

Slack APIを叩く

Slackのチャンネル履歴のAPIのドキュメントです。
https://api.slack.com/methods/channels.history
一番簡単に使うには、TokenとチャンネルIDだけパラメーターで与えてやるといいです。
チャンネルIDは
https://api.slack.com/methods/channels.list/test
から取ってきてもいいし、チャンネルリストAPIを叩いてもいいです。
https://api.slack.com/methods/channels.list

トークンに関して

ここまではとても簡単なのですが、Slackのトークン関連で詰まりまくりました。
SlackのAPIトークンには2種類あって、
1. レガシートークン
2. レガシートークンじゃない方の普通のトークン
です。
レガシートークンは
https://api.slack.com/custom-integrations/legacy-tokens
から取得できますが、これではchannels.history APIは取得できないので、後述する普通のトークンを取得してください。
ちなみに、channnels.list APIは普通に叩けるので、ここで理解ができなくて詰まりました。
レガシートークンじゃない方の普通のトークンの取得
https://api.slack.com/apps
ここからAppを作成すると普通のトークンが取得できます。
Add features and functionality -> Permissions -> Select Permission Scopes からchannels:historyを選択します。
そうすると、channels.historyが選択できるようになります。

コード

# python3.6
import requests
import json
url = "https://slack.com/api/channels.history"
token = "{YOUR TOKEN}"
channel_id = "{YOUR CHANNEL ID}"
def main():
    payload = {
        "token": token,
        "channel": channel_id
        }
    response = requests.get(url, params=payload)

    json_data = response.json()
    messages = json_data["messages"]
    for i in messages:
        print(i["text"])
if __name__ == '__main__':
    main()

これを実行すると

xonsh
gitkraken
Progressive Web Apps
スクレイピング RSS
ARCore
Pyro
tse
スマートスピーカー
Prophet
Python Exception
Superset
Android Architecture Component
Headless Chrome
ラズパイ NFC
LiveData
Flux
Quantum CSS
IRKit
Hue
Puppeteer

みたいなメッセージがとれます。
コードは簡単すぎて何も書くことが無いんですが、pythonの通信ライブラリはrequestsが好きです。

記事を共有

最近人気な記事