Help us understand the problem. What is going on with this article?

Slackで投稿したファイルを保存したい

概要

  • Slackで毎日挙げているファイルがあり、それを全部読みたいと思った
  • しかも月別にまとめたい
  • 検索でも出来るが一々ダウンロードするのが面倒
  • 楽に、早く作る必要があった(1時間以内)
  • 全然汎用的じゃないですが、何かの役に立てば幸いです!

使うもの

方法

SlackのLegacyTokenを取得する

  • あまりおすすめされていないけど、自分だけで利用するなら楽
  • GitHubなどにあげないように注意

TestページでAPIを叩いてリクエストとレスポンスを確認する

  • ts_from, ts_toで期間を指定(UnixTime)
  • レスポンスのurl_private_downloadを取得し、こちらにアクセスするとファイルをダウンロードできる

コード

import requests
import json
import os.path

def fileDownload():
    print('fileDownload')

    # 大文字の所は自分の欲しいファイルなどに変換
    # ts_from, ts_toなどはUnixTimeで記述
    url = "https://slack.com/api/files.list?token=LEGACYTOKEN&channel=CHANNELID&ts_from=1535727600&ts_to=1538319600&user=USERID&pretty=1"

    result = requests.get(url)

    data = json.loads(result.text)

    # ファイルをダウンロードするためにヘッダーが必要
    headers = {'Authorization': 'Bearer '+LEGACYTOKEN}
    count = 0
    for file in data["files"]:
        file_url = file["url_private_download"]
        file_title = file["title"]

        # 同じファイル名の物があると上書きされてしまうため存在を確認する
        if os.path.exists(file_title):
            print("重複しました")
            count = count + 1
            file_title = file_title + str(count)
        response = requests.get(file_url, headers=headers)
        with open(file_title, 'wb') as f:
            # ファイルを保存する  
            f.write(response.content)

if __name__ == '__main__':
    fileDownload()
  • 最後にこのファイルをpython ファイル名で叩くだけです
  • お役に立てたら幸いです
yuma1217
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away