2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

API Lab for LINE WORKSAdvent Calendar 2024

Day 6

LINE WORKS API Bot コンテンツ ダウンロード

Last updated at Posted at 2024-12-05

LINE WORKS API を使用して Bot で受信したファイルをダウンロードする

この記事では、LINE WORKS API を使用して Bot で受信したファイルをダウンロードする方法を説明します。

以下の URL で Google Colab を使って簡単に試せます。
Google Colab で試す

必要な準備

  1. LINE WORKS Developer Console での設定

    • Bot を作成し、Bot ID を取得します。
  2. Access Token の発行

    • LINE WORKS API を使用するためのアクセストークンを取得します。
  3. 添付ファイルの fileId を取得

    • 対象のファイル ID を確認します。

使用するスクリプト

以下のスクリプトは、LINE WORKS API を使用してBot で受信したファイルをダウンロードする方法を示しています。

import requests
import re

# 必要な変数を設定
ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"  # @param {type:"string"}
BOT_ID = 2000001  # @param {type:"integer"}
FILE_ID = "jp1.1733205053418691464.1733291453.1.3725434.0.0.0"  # @param {type:"string"}
DEFAULT_DOWNLOAD_PATH = "downloaded_file"  # ファイル名が取得できなかった場合のデフォルト保存先

# API エンドポイント
DOWNLOAD_URL = f"https://www.worksapis.com/v1.0/bots/{BOT_ID}/attachments/{FILE_ID}"

# ヘッダー
headers = {
    "Authorization": f"Bearer {ACCESS_TOKEN}",
}

# ステップ 1: ダウンロード URL の取得
response = requests.get(DOWNLOAD_URL, headers=headers, allow_redirects=False)

if response.status_code == 302:
    # HTTP Location ヘッダーから実際のダウンロード URL を取得
    download_location_url = response.headers.get("Location")
    print(f"ダウンロード URL が取得されました: {download_location_url}")
else:
    print(f"ダウンロード URL の取得に失敗しました: {response.status_code}")
    print("レスポンス内容:", response.text)
    raise Exception("ダウンロード URL の取得に失敗しました。")

# ステップ 2: ファイルのダウンロード
download_response = requests.get(download_location_url, headers=headers, stream=True)

if download_response.status_code == 200:
    # ファイル名を `Content-Disposition` ヘッダーから取得
    content_disposition = download_response.headers.get("Content-Disposition", "")
    file_name_match = re.search(r'filename="?([^"]+)"?', content_disposition)
    if file_name_match:
        file_name = file_name_match.group(1)
    else:
        file_name = DEFAULT_DOWNLOAD_PATH  # ヘッダーにファイル名がない場合のデフォルト名

    # ファイルを保存
    with open(file_name, "wb") as file:
        for chunk in download_response.iter_content(chunk_size=8192):
            file.write(chunk)
    print(f"ファイルが正常にダウンロードされました: {file_name}")
else:
    print(f"ファイルのダウンロードに失敗しました: {download_response.status_code}")
    print("レスポンス内容:", download_response.text)
    raise Exception("ファイルのダウンロードに失敗しました。")

スクリプトのポイント

必要なパラメータ

  1. ACCESS_TOKEN

    • LINE WORKS API の認証に使用されるアクセストークンです。
  2. BOT_ID

    • 使用する Bot の ID です。
    • LINE WORKS Developer Console から取得できます。
  3. FILE_ID

    • ダウンロード対象のファイル ID です。

ファイル名の取得と保存

  • スクリプトは Content-Disposition ヘッダーからファイル名を抽出します。
  • 抽出できない場合は、デフォルト名(downloaded_file)で保存します。

実行結果

  • 成功時:

    ダウンロード URL が取得されました: https://apis-storage.worksmobile.com/...
    ファイルが正常にダウンロードされました: example.png
    
  • 失敗時:

    ファイルのダウンロードに失敗しました: 401
    レスポンス内容: {
        "code":"UNAUTHORIZED",
        "description":"Authentication failed."
    }
    

応用例

  • ダウンロードしたファイルを加工・送信する。
  • ファイル名を自動生成して保存する。

まとめ

このスクリプトを使用することで、LINE WORKS API を利用したファイルのダウンロードを簡単に実現できます。ぜひお試しください!

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?