10
8

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 3 years have passed since last update.

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

Last updated at Posted at 2018-10-06

概要

  • 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 ファイル名で叩くだけです
  • お役に立てたら幸いです
10
8
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
10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?