課題:
Dropboxリンクを使って画像や動画をWordPressなどのブログに貼り付けることはできますが、意外とやっている人は少ないです。その理由はいくつかあると思いますが、一番大きな理由は、Dropboxリンクの文字列を見たときに、例えば以下のような画像ファイルの文字列を見たときに、
これだけでは、その画像ファイルが自分のMac,PCのどこにあるのか全くわからない。さらにDropboxフォルダのどこにあるのかもわからない。迷子になるからです。
つまり、後になってその画像や動画を修正したい時、ローカルにあるファイルがすぐに見つからないという壁にぶつかってしまうのです。というか、安全対策上、ある場所をマル見せしない、それが基本ではありますが。

(※正しくいうと、Dropboxの場合、おうちはDropboxのクラウドストレージ、出先がローカルフォルダ、という関係になります。ですから、エラーが続くからといって、Dropboxのクラウド側を空っぽにして、ローカルのファイルを送り込むようなことをするのは大間違いです。Dropboxリンクは全て新しいものに置き換わってしまいます。正しくは、いつも、ローカル側を空にして、クラウドストレージ側からダウンロードします。)
ポイント解説:
その対処ですが、3つ考えられます。
1つ目は、ローカルで常に記録することです。
つまり、Dropboxリンクを取得するときに、そこに紐づくファイルパス(フルパスで)を記録しておくようにします。さらに、その後でファイルの名前を変えたり、フォルダを変更したりすることがあります。したがって、変更前のファイルパスと変更後のファイルパスをペアで記録しておくようにします。ローカルで確実に管理できますね。
2つ目は、Dropbox APIを利用する方法です。
Dropbox APIを使うと、Dropboxリンク及びローカルにあるDropboxフォルダ以下のパスがペアで取得できます。この情報を使って照合します。
3つ目は、正確さは欠けますが、発見的方法(ヒューリスティック・アプローチ)です。
そこまで丁寧な方法ではなくて、ざっくりと推測する、候補を複数ピックアップする、それだけでもかなり有用です。
APIを使わずに、
「すでにMac上にあるDropboxフォルダ内の実ファイルと照合する」だけでも、かなり役に立ちます。
今回は、一番シンプルな、この3つ目の方法を紹介します。
手順:
[考え方] Dropbox APIは使わず、すでにMac上にあるDropboxフォルダ内の実ファイルと照合する、発見的方法です。 Dropboxリンクは、”***/********?rlkey=*******&raw=1″における/と?に挟まれた赤字の部分に、ファイル名から日本語文字列を削除した部分が残されています。ローカルの対象フォルダの中のファイル名の日本語文字列を削除した部分と一致するものを抽出する方法です。 AppleScriptのアプリで、以下のような手順を行うようにします。 (1)Dropbox共有リンクの入力を受け付ける (2)そのURLから、共有リンクに埋め込まれたファイル名(dropboxStyleName)を抽出する (3)Macのローカルディスク(Dropboxと同期されているフォルダ)内のファイルを find コマンドで検索し、 (4)ファイル名を変換(日本語文字を – に)して、dropboxStyleName と一致するかどうかを照合する (5)一致したファイルの ローカルパス をリストアップして表示する 以上 |

スクリプト:
AppleScript dropboxリンクに一致するフルパス検索.app 下欄のスクリプトをコピペしてください。 青字の部分は、自分の条件に置き換えてください。 |
— ▼ 対象フォルダ、2つある場合です(サブフォルダも含めて検索) set folder1 to “/Volumes/NO3_SSD/Dropbox/********/********“ set folder2 to “/Volumes/NO3_SSD/Dropbox/********/********“ repeat — ▼ Dropboxリンクの入力 display dialog “Dropboxの共有リンクを入力してください(キャンセルで終了):” default answer “” buttons {“キャンセル”, “OK”} default button “OK” set dropboxURL to text returned of result — ▼ Dropboxリンクからファイル名を抽出 set dropboxStyleName to do shell script “ echo ” & quoted form of dropboxURL & ” | sed -E ‘s|.*/([^/?]+).*|\\1|’ | tr -d ‘\\r\\n ‘” — ▼ ファイル名確認ダイアログを表示 display dialog “ファイル名から日本語を除いた部分が「” & dropboxStyleName & “」となるフルパスを検索します。” buttons {“OK”} default button “OK” — ▼ Shellスクリプトで一致ファイルを検索 set shellScript to “ find ” & quoted form of folder1 & ” ” & quoted form of folder2 & ” -type f | while read f; do base=$(basename \”$f\”) converted=$(echo \”$base\” | sed -E ‘ s/[一-龯ぁ-んァ-ンー々〆〤]+/-/g; s/-+/-/g; s/-([.][^.]+)$/\\1/; s/^-(.*)$/\\1/’) if [ \”$converted\” = ” & quoted form of dropboxStyleName & ” ]; then echo \”$f\” fi done” try set matchResult to do shell script shellScript on error set matchResult to “” end try if matchResult is not “” then set resultList to paragraphs of matchResult set the clipboard to matchResult if (count of resultList) > 1 then display dialog “一致するファイルパスが複数存在します。” buttons {“OK”} default button “OK” end if — ▼ 結果表示と次の選択 set userChoice to button returned of (display dialog “一致したファイルパス:” & return & return & matchResult buttons {“処理を続ける”, “終了”} default button “処理を続ける”) if userChoice is “終了” then exit repeat else set userChoice to button returned of (display dialog “一致するファイルは見つかりませんでした。” buttons {“処理を続ける”, “終了”} default button “処理を続ける”) if userChoice is “終了” then exit repeat end if end repeat |
結果:
ファイル名に、日本語を多用している場合は、複数の候補が表示されるようになっています。しかし、ファイル名には日付や連番、バージョンなどの英数字を含めるように気を配れば、複数の候補がある場合は、非常に少ないでしょう。したがって、今回の紹介の方法は、実用的であると思います。
以上