ワイティのものづくりブログ

機械設計と電気工事士からみたホーム、デジタルガジェットに関するものづくりを応援するブログ

FAXをLINEで受け取る方法

FAX→NASWindowsで監視PythonDropboxで共有→LINEに通知→スマホで見る方法

今時FAXかよって思った人は黙ってブラウザのバックボタンを押して戻ってください。

ただ日本の中小企業ではまだまだ使われていることが多いのです。

メールに送信して見れる人には不要だと思いますが、紙で印刷されなきゃダメな人も対応してないのでごめんなさい

ただ最近のFAXはペーパーレス対応していて備え付けのネットワークハードディスクや内部に保存しPCからネットワーク経由でアクセスできる機種は多いのでそう言う人向けにまとめてみました。

色々使いますが全て無料範囲で大丈夫です。

1. Pythonのインストール

まず、Pythonがインストールされていない場合は、以下の手順でインストールします。

手順:

  1. 公式Pythonダウンロードページにアクセスします。
  2. 最新のPythonのバージョンをダウンロードしてインストールします。インストール時に「Add Python to PATH」にチェックを入れてください。
  3. インストール後、コマンドプロンプトまたはターミナルで次のコマンドを実行し、インストールが成功したことを確認します。
    python --version
    Pythonのバージョンが表示されればインストール成功しています
    python
    だけの表示は2.のチェック部分を確認してください

2. 必要なPythonライブラリのインストール

次に、必要なPythonライブラリをインストールします。これには、dropboxDropbox API用)、watchdog(ファイル監視用)、line-bot-sdk(LINE Messaging API用)があります。

手順:

  1. コマンドプロンプト(適当なフォルダで右クリックで「ターミナルで開く」)を開き、以下のコマンドでライブラリをインストールします。
    pip install dropbox watchdog line-bot-sdk
    ※上手く動かない人はAIチャットのCopilotに聞いてください

3. Dropbox APIの設定

Dropbox APIを使用するために、アクセストークンを取得します。

手順:

  1. Dropbox Developersサイトにアクセスし、Dropboxアカウントでログインします。
  2. 「Create App」をクリックして新しいアプリを作成します。
  3. アプリの作成時に、以下の設定を行います:
    • Choose an API: 「Scoped access」を選択。
    • Choose the type of access you need: 「Full dropbox」または「App folder」を選択(必要に応じて)。
    • Name your app: 任意のアプリ名を設定。
  4. アプリが作成されたら、アプリの詳細ページに移動します。
  5. OAuth 2セクションで「Generate」ボタンをクリックして、アクセストークンを取得します。

  6. 取得したアクセストークンをコピーして、config.jsonに保存しておきます下記記載。
  7. 送信時にエラーが起きるのでこの二つをチェックしておきます

4. LINE Messaging APIの設定

LINEのメッセージングAPIを使うためには、LINE Developerコンソールでチャネルを作成し、アクセストークンを取得します。

手順:

  1. LINE Developersサイトにアクセスし、LINEアカウントでログインします。
  2. 「コンソール」に移動し、「プロバイダー」や「チャネル」を作成します。
  3. チャネル作成時に、次の情報を入力します:
    • チャネル名: 任意の名前
    • チャネルの種類: 「Messaging API
    • チャネルのカテゴリ: 任意
  4. チャネル作成後、チャネル設定画面で Channel access token(アクセストークン)を生成します。
  5. 生成された Channel access token をコピーして、Pythonコードで使用します。

5. DropboxとLINEの設定をPythonコードに反映

以下のPythonコードのサンプルを使用して、Dropboxにファイルをアップロードし、LINEで通知を送信します。

pythonコード

import os
import time
import json
import dropbox
from watchdog.observers import Observer

from watchdog.events import FileSystemEventHandler
from linebot import LineBotApi
from linebot.models import TextSendMessage

# 設定ファイルの読み込み
def load_config():
    with open("config.json", "r", encoding="utf-8") as f:
        config = json.load(f)
    return config

# 設定情報を読み込み
config = load_config()

# Dropbox APIの設定
DROPBOX_ACCESS_TOKEN = config["dropbox_access_token"]
DROPBOX_BASE_FOLDER = config["dropbox_base_folder"]

# LINE Messaging APIの設定
LINE_CHANNEL_ACCESS_TOKEN = config["line_channel_access_token"]
line_bot_api = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN)

# 監視するローカルフォルダ
MONITOR_FOLDER = config["monitor_folder"]

# Dropboxクライアントの初期化
dbx = dropbox.Dropbox(DROPBOX_ACCESS_TOKEN)

class PDFEventHandler(FileSystemEventHandler):
    def __init__(self):
        self.notified_files = set()  # 通知済みのファイルを保持するセット

    def on_created(self, event):
        """PDFファイルが作成されたときに呼び出される"""
        if not event.is_directory and event.src_path.endswith(".pdf"):
            file_path = event.src_path
            file_name = os.path.basename(file_path)
            if file_name not in self.notified_files:  # まだ通知していないファイルの場合
                print(f"PDFファイルが検出されました: {file_name}")
                # ファイルが完全に同期されるまで少し待機
                time.sleep(5)  # 5秒待機(必要に応じて調整)
                self.upload_to_dropbox(file_path, file_name)

    def upload_to_dropbox(self, file_path, file_nam

e):
        """Dropboxにファイルをアップロードし、共有リンクを生成"""
        try:
            # Dropboxのアップロードパス
            dropbox_path = f"{DROPBOX_BASE_FOLDER}/{file_name}"

            # ファイルをDropboxにアップロード
            with open(file_path, "rb") as f:
                dbx.files_upload(f.read(), dropbox_path, mode=dropbox.files.WriteMode.overwrite)

            # 共有リンクを生成
            shared_link_metadata = dbx.sharing_create_shared_link_with_settings(dropbox_path)
            shared_link = shared_link_metadata.url.replace("?dl=0", "?dl=1")  # ダウンロードリンクに変更

            print(f"Dropboxリンクを生成しました: {shared_link}")

            # 通知済みのファイルとして追加
            self.notified_files.add(file_name)

            # LINEに通知を送信
            self.notify_line(file_name, shared_link)

        except Exception as e:
            print(f"Dropboxへのアップロードまたはリ

ンク生成中にエラーが発生しました: {e}")
            self.notify_line(file_name, f"エラーが発生しました: {e}")  # LINEにエラーメッセージを送信

    def notify_line(self, file_name, shared_link=None):
        """LINEに通知を送信"""
        try:
            if shared_link:
                message = f"新しいFAXが届きました:\n{file_name}\nリンク: {shared_link}"
            else:
                message = f"エラー: {file_name}\n{shared_link}"  # shared_linkにエラーメッセージを入れる

            # LINEにメッセージを送信
            line_bot_api.broadcast(TextSendMessage(text=message))  # すべてのユーザーに送信
            print("LINE通知を送信しました")
        except Exception as e:
            print(f"LINE通知の送信中にエラーが発生し

ました: {e}")

def start_observer():
    """フォルダ監視を開始"""
    event_handler = PDFEventHandler()
    observer = Observer()
    observer.schedule(event_handler, MONITOR_FOLDER, recursive=False)
    observer.start()
    print(f"Monitoring directory: {MONITOR_FOLDER}")
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

if __name__ == "__main__":
    start_observer()

※動かない場合はCopilotに投げつけて、修正コードは私に報告してください
 
 

6. 実行方法

  1. 上記のコードを folder_watch.py で保存し
  2. config.jsonを新規作成し以下のようコードを登録しますconfig.jsonの中身は以下
    {
    "dropbox_access_token": "YOUR_DROPBOX_ACCESS_TOKEN",  "dropbox_base_folder": "","line_channel_access_token": "YOUR_LINE_CHANNEL_ACCESS_TOKEN",  "monitor_folder": "/path/to/local/folder"
    }
  3. 必要に応じて、DROPBOX_ACCESS_TOKEN, LINE_CHANNEL_ACCESS_TOKEN, MONITOR_FOLDER を自分の環境に合わせて変更します。
  4. Monitor_Folderの記述で¥と/を気を付けてください

  5.  
    python folder_watch.py
    をダブルクリックすれば起動します

    この画面が出っぱなしになれば成功です。ダブルクリックしても出ないとか、すぐ閉じた場合はエラーが起きています。コードをAIチャットに投げて聞いてください。Copilot程度でも解決できます。
  6. これで、指定されたフォルダ内にPDFファイルが作成されると、そのファイルがDropboxにアップロードされ、LINEに通知が送信される仕組みが動作します。
  7. スタートアップにショートカットを登録すればPCが起動している間監視通知してくれます。
    スタートアップはブラウザでshell:startupでフォルダが開けます。


7. 注意事項

  • アクセストークンの取り扱い: アクセストークンは他人と共有しないようにしましょう。プライベートな情報ですので、コードに直書きせず、環境変数や設定ファイルから読み取る方法を推奨します。
  • フォルダのパス: MONITOR_FOLDERDROPBOX_BASE_FOLDER のパスは、実際のパスに合わせて設定してください。