Finder上でファイルをドラッグすると、そのドラッグされたファイルをFTPでアップロードするというスクリプトを、よく分からないAppleScriptを書いてみました。初めて書いたAppleScriptです。よくわかってなくてすみません。

AppleScriptでと言いつつ、FTPでアップする部分に関して、面倒くさくなってPHPで書いてしました。そのため、以下の2つのファイルが必要になります。

AppleScriptエディタで、Dropletのテンプレートを作成。以下を記述。

on open names -- OS X Drag and drop
  tell application "Finder" to set current_dir to parent of (path to me)
  set current_dir to POSIX path of (current_dir as Unicode text)
  set my_script to current_dir & "up-sozai2.php"
  repeat with i in names
    set i_path to POSIX path of i --UNIX式のパスに変換
    set r to do shell script my_script & " " & i_path
    display dialog "Uploaded" default answer r
  end repeat
  quit
end open

そして、PHPでFTPアップロードするスクリプト:

file:up-sozai2.php

#!/usr/bin/php
<?php
date_default_timezone_set('Asia/Tokyo');

$ftp_host = "***.jp";
$ftp_user = "***";
$ftp_pass = "***";
$ftp_dir  = "/home/***/www/hoge/";
$httphead = "http://***.jp/hoge/";

// $argc/$argv checker
if (count($argv) <= 1) {
  echo "(USAGE) $ up-sozai.php file1\n";
  exit;
} 
$local = $argv[1];
$base = basename($local);
$fname = date("YmdHis").rndstr(3)."_".$base;
echo "read: $local\n";
# send file
$ftp = ftp_connect($ftp_host);
if (!$ftp) {
  echo "error: connect : $ftp_host\n"; exit;
}
ftp_pasv($ftp, true);
if (!ftp_login($ftp, $ftp_user, $ftp_pass)) {
  echo "error: login error\n"; exit;
}
if (!ftp_chdir($ftp, $ftp_dir)) {
  echo "error: chdir : $ftp_dir\n"; exit;;
}
if (!ftp_put($ftp, $fname, $local, FTP_BINARY)) {
  echo "error: upload : $local"; exit;
}
ftp_close($ftp);
//
echo "{$httphead}{$fname}\r\n";
function rndstr($cnt) {
  $str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  $s = "";
  for ($i = 0; $i < $cnt; $i++) {
    $r = rand(0, strlen($str)-1);
    $s .= substr($str, $r, 1);
  }
  return $s;
}
  • TODO
    • アップロード後、そのファイルのURLを得られるようにしておけば、かなり使い勝手がよくなりそうです。