その他
    ホーム 技術発信 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が好きです。