第2章「メディアライブラリへの登録〜パイプライン処理〜」

メディアライブラリを作ろう

動画はまだ準備中です。

ポイント解説:

作成するスクリプトは、結構、分量があります。ChatGPTを使い、ゆっくり進めるのがいいです。以下のスクリプトをChatGPTへコピペして、(1)「このスクリプトの解説をしてください」と、まず解説をしてもらう(2)その解説の中で、自分向けに修正する箇所を指摘して、スクリプトの記述を指示する、そのようなやり方が効率的です。表の右欄に、スクリプトをリンクします。

パイプライン処理(画面入力をトリガーに、一品料理で一連の処理を行う)
⬇️<マイライブラリ画面入力>
Finderで選択したファイルを処理し、対応するDropbox共有リンクを自動取得して送信スクリプトに渡すAppleScript。ファイルのパスや拡張子を取得し、日本語などを除去してDropbox形式のファイル名に整形。Python仮想環境のget_dropbox_link.pyでリンクを生成し、ファイル名の整合性を確認後、send_request.pyでリンク情報を送信。
⬇️<マイライブラリDropboxAPI認証リンク取得GAS通信>
DropboxのOAuth認証設定、リンク自動取得、GASとの通信を行う3本のPythonスクリプト群。
①dropbox_auth_setup.pyはローカルHTTPサーバで認証コードを受け取り、Dropboxのアクセストークンとリフレッシュトークンを取得する。
②get_dropbox_link.pyはリフレッシュトークンを用いてDropbox APIに接続し、指定ローカルファイルの共有リンクを取得または生成し、dl=0をraw=1に変換して出力する。
③send_request.pyはAppleScriptから受け取ったDropboxリンクやファイル情報をGASのエンドポイントへJSON形式で送信し、更新処理を実行する。
⬇️<マイライブラリ生成更新処理>
mediaLibrary.gsは、Dropbox等のメディアファイル情報をF1シートで一元管理し、その変更を自動反映するGASです。ファイル名・パスから一意なwpidexを生成し、sb付き一時ファイル名や?v=付きURL、NFC差、連続スラッシュなどを正規化して突合します。doPostはmodeにより、ライブラリのフル再構築やvideoembed.jsonのみ更新、通常の作業行追加+処理を切り替えます。processWorkingRecordはF3のパス変更履歴を反映しつつ、K=ADD行をADD2に更新し、JSON生成とライブラリ整理、pcloudidシートへの同期を行います。cleanMediaLibraryはDEL行や重複を除去し、更新日時で並べ替え、フラグをFALSEに戻します。videoembed関連は「動画パッケージ」シートから埋め込みHTMLを集約し、XserverのPHPにJSONをPOST送信します。
⬇️<メディアおよびJSONをXserverへ更新>
Dropbox → Xserver 同期用のメインスクリプトは、pmedia・mmedia・meta_gd_wp_data を Homebrew 版 rsync で転送し、SSH鍵を自動ロードして毎分同期するよう LaunchAgent から実行される。ログは /tmp と $HOME/scripts/logs に記録される。
しかし rsync が残留してフリーズすることがあるため、毎日 3:30 に自動復旧スクリプトが動作し、pmedia/mmedia 関連の rsync プロセスを検出して kill し、メインの LaunchAgent(com.xxxxxxxxm1.sync_dropbox_xserver_m1)を unload/load し直して正常状態へ戻す仕組みとなっている。
⬇️<配信サーバー切り替えリダイレクト処理>
rd.phpは、指定されたidに対応するメディア情報をJSONから取得し、該当URLへ転送または中継出力するPHPスクリプト。txt・vtt・srtなど文字ファイルの場合は、文字化け防止のためサーバー側でUTF-8へ変換して直接配信する。Dropbox・Xserver・pCloudなど複数サーバーのURLを動的に切り替え、キャッシュ防止や診断表示(?diag=1)にも対応する。

バックグラウンド処理(常時監視する)
<ファイルパス変更処理>
mmedia・pmedia フォルダを常時監視し、ファイルやフォルダの移動・リネーム(MOVED)を検出して記録する Python スクリプト。検出時には変更前・変更後パス、JST の更新時刻、更新フラグ TRUE を Google スプレッドシート(sheet1)へ追記し、その後シート全体を読み込んで (A,B) が同じ重複記録は「最も古いものだけ残す」形に正規化し、更新日時の降順で再整列して書き戻す。scripts_pub や .dropbox など特定パスは無視するフィルタを搭載。watchdog によりディレクトリを監視し続け、ログは ~/Library/Logs に記録。LaunchAgent(com.xxxxxxxx.filewatcher.plist)を用いて macOS 起動時に自動実行される構成となっている。
ファイルパス変更処理

上の処理はMacを使った処理ですが、ChatGPTの分析では、Windowsへの移植には、以下が変更点になります。Mac、Windowsで共通して使えるGAS、AppSheetを中心に据える作り方がベターと言えます。

Windowsへの変更点
処理MacWindoowsでの代替
GUI自動処理AppleScriptPowerShell or Python GUI
クリップボードthe clipboardpyperclip (Python)
パス処理POSIXパスos.path (Python)
sed/basenameshellコマンドPythonの標準ライブラリ
GAS通信requests.postそのままOK
フォルダ監視shell + find/commPowerShell + Compare-Object
自動同期rsyncrobocopy / WinSCP
タスク自動実行Automator or cronWindowsタスクスケジューラ

次回予告:

第3章では、「YouTube(大手)に依存しないで配信するについてご紹介します。

第3章を読む


🔗 目次ページへ戻る