目次
★ Basp21のダウンロードとインストール
★ 「Basp21でのFTPとタグ生成.uws」
★ 設定例
★ 「Basp21でのFTPとタグ生成.uws」プログラム解説コメントつき
★ 「src.jpg」から「src - コピー.jpg」をいちいち作る手間を解消
※Shift+TABキー、もしくは、Homeキー、Homeキー+TAB数回、を押すと、目次付近に戻れます。
このプログラムは「OnePress Image Elevator 」プラグインのかわりです。
ここんとこ「OnePress Image Elevator 」プラグインを使っていたのですが、記事と画像が増えるとMySQLが肥大化しそうでバックアップが大変そうな気がしたので(バックアップで障害が出るのも嫌なので)、画像をMySQLの外に置きたいと思いました。
それと、「テキストモード」で貼り付けしたいとき、なぜか僕のはCtrl+Vですべてが貼り付けができず、右クリックして「貼り付け」しないといけないのですが、原因究明するのも面倒くさいので、UWSCで処理する方法を考えてみました。
Ctrl+Vが常時使えない状況になってしまったので「OnePress Image Elevator 」プラグインは削除することにしようと思います。(後日悩んでから削除しましたが、やっぱり、削除して良かったです。)
というわけで、UWSCとBasp21でデスクトップ画面やWord画面をキャプチャした画像を、自動でFTP送信して、Imgタグの自動生成(とりあえず以下のサンプルではクリップボードに送るところまで)をやってみました。
次のような操作でできます。
(a)デスクトップに「src.jpg」(50×50ピクセルの白画像)をひながたとして置いておく。
(b)「src.jpg」をデスクトップ上で右ドラッグでコピー。必ず「src - コピー.jpg」というファイル名になりますのでそれを利用します。
(c)キャプチャした画像を「src - コピー.jpg」に貼り付けして上書き保存
(d)あとは後述のUWSファイル(「Basp21でのFTPとタグ生成.uws」)を作ってダブルクリックすれば、指定したFTPディレクトリへの画像の自動FTP送信とそのURLでのImgタグの自動生成をしてくれます。
生成されたImgタグをWprdPressの画面に直接タグを貼り付けることもできますが、とりあえず、トラブル回避のため、クリップボードに送るとこまでにしてみました。
UWSファイルをダブルクリックした後の動作の流れとしては次のような感じです。
(e)「src - コピー.jpg」をPCの「D:\WPIMG\」フォルダに、日時のファイル名を付けてコピー
(f)Basp21を呼び出し
(g)FTPサーバに接続
(h)よくわからないけど一応パッシブモードにする
(i)バイナリモードで画像をFTPでアップロード
(j)FTPサーバから切断
(k)FTPディレクトリの設定情報をもとに画像のURLを生成
(l)生成されたURLをもとにImgタグを生成
(m)生成されたImgタグをクリップボードに送る
操作の前半で「OnePress Image Elevator」より少し手間がかかりますが、でも、白地のひな型jpgを右ドラッグでコピーして画像を貼り付けて保存するだけなので、十分代用になるかな・・・と思いました。UWSCなら右クリックコピーからやって、画像の貼り付けの判別もできるかもしれないですね。(保存しますか?のダイアログが出るまで待機させとくとか・・・)
ファイル名をコピーしたりするのはUWSCの作法を調べるのが面倒でしたので、コマンドプロンプトを使ってしまいました。
あと、PDFのアップロードとリンクへのタグ生成も同じような形でできそうです。
いずれにしましても、これでMySQLの中はテキスト中心にできそうなので、バックアップ容量がアホみたいに増えなさそうですこし安心・・・、というか、ホッとしています。
FTPディレクトリの構造によっては、少し作り変えが必要だと思います。
★ Basp21のダウンロードとインストール
http://www.hi-ho.ne.jp/babaq/basp21.html からダウンロードできます。
今回の記事では、ちょっと古いバージョンを使いました。
このページの「?Down Load! Bsmtp20070303.lzh (70.1KB) 2007/03/24 Update! 」と書かれたダウンロードリンクからダウンロードしたものです。32bitのWin10でも64bitのWin10でもこれでいいみたいです。
インストールは、普通にやれはOKです。ただ、64bitのWin10Proにインストールする際は、経過を示すプログレスバーの画面が出てからかなり長かったです。気長に待ってインストールしてください。
なお、僕は常に、Windows10の「Program Compatibility Assistant Service(プログラム互換アシスタント?)」というサービス(目には見えない裏方で動くソフト)を無効に設定しているのですが、もしインストールがうまくいかなかったら同様にそのサービスをOFFにしてインストールしてみてください。本来なら、多分OFFにせずともインストールできるとは思うのですが・・・。
インストールが完了すれば、UWSCからもVBAからも呼び出してFTP送受信やメール送信などができるようになります。
では以降、UWSCのファイルの内容です。
コピペしてテストしてみてください。
ダメだったらご自分の環境に合うようにプログラム自体を書き換えてください。
D:\WPIMG\に FTPのログも残るのでそれも見て参考にしてください。
ホームページが初めて、という方には少々難しいかもしれませんので、よくわかる方に見てもらってください。でも運が良ければ、ご自分でも設定や動作が成功すると思います。頑張ってみてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
// // //デスクトップにあるJpeg画像を、いったんD:\WPIMG\にコピーしてFTPし、 //そのURLをもとにImgタグを自動生成する。 //「OnePress Image Elevator 」のかわりです。 //MySQL内に画像を置きたくないときに使えると思います。 //事前にBasp21のインストールが必要です。 //Win10Pro32bit、64bit、両方で動くと思います。 //事前にBasp21の最終バージョンのインストールが必要です。 //ただ、こちらは 「BASP21-2003-0211.exe」でも動きました。 //最新版のダウンロードは以下です。 // http://www.hi-ho.ne.jp/babaq/basp21.html // PCUserName = "user01" PCDesktopSrcJpegName = "src - コピー.jpg" PCImgFolder01 = "D:\WPIMG\" FtpHostName = "FTPのホスト名" FtpAccountName = "FTPのユーザー名" FtpAccountPsw = "FTPのパスワード" FtpTildeName = "/~チルダがある場合その名前" // 「/」を先頭だけに書きます。無ければ""のままで。 HttpName = "http://" //httpやhttps?ご自分の環境に合わせて。 //アップロードする場所の指定 FtpUserDir01 = "/「public_html」などルートの階層のディレクトリ名" // 「/」を先頭に書きます。 FtpSubDir01 = "/FTPのサブディレクトリ名。もしあれば。" // 「/」を先頭に書きます。無ければ""のままで。 FtpSubDir02 = "" FtpSubDir03 = "" //画像のURLを生成するとき、FTPとしてのホスト名とURLとしてのホスト名前が違う時用の設定です。 //先頭に「/」を付けずに、「http://」以降のホスト名だけを指定します。必ず指定します。 //たとえば、FTPのホスト名には「ftp.」が付いているけど、実際の「http://」以降のホスト名には //それはついてない、という場合、ついてないほうのホスト名を指定します。 //URLに「/~xxxx」とチルダの名前も付いていたらそれは含めません。既に「FtpTildeName」で指定していますので。 //FTPサーバ名と、URLの「http://」以降のホスト名が全く同じ場合は、FtpHostName の設定値とまったく同じ値になります。 URLHostName = "URL用のホスト名" GETTIME() fname01 = G_TIME_YY4 + "-" _ + G_TIME_MM2 + "-" _ + G_TIME_DD2 + "---"_ + G_TIME_HH2 + "-" _ + G_TIME_NN2 + "-" _ + G_TIME_SS2 + ".jpg" CopyDistFullPath = PCImgFolder01 + fname01 DosCmd("copy <#DBL>C:\Users\" + PCUserName + "\Desktop\" + PCDesktopSrcJpegName + "<#DBL> <#DBL>" + CopyDistFullPath + "<#DBL>" ) ftp = CreateOLEObj("basp21.FTP") ftp.Openlog( PCImgFolder01 + "samplelog.txt") ftp.Connect(FtpHostName, FtpAccountName, FtpAccountPsw) ftp.Command ("pasv") FtpPutDirPath = FtpUserDir01 + _ FtpSubDir01 + _ FtpSubDir02 + _ FtpSubDir03 ftp.PutFile(CopyDistFullPath, FtpPutDirPath, 1) ftp.Close ImgURL = HttpName + _ URLHostName + _ FtpTildeName + _ FtpSubDir01 + _ FtpSubDir02 + _ FtpSubDir03 + _ "/" + fname01 ImgTAG = "<a href=<#DBL>" + ImgURL + "<#DBL> target=<#DBL>_blank<#DBL>>" + "<img src=<#DBL>" + ImgURL + "<#DBL> alt=<#DBL><#DBL> width=<#DBL>70%<#DBL> height=<#DBL>70%<#DBL> ></a>" SENDSTR(0,ImgTAG) // |
例えばプロバイダからもらった情報が以下のような場合・・・、
ホームページのURL:http://www.12345678900.ne.jp/~myhp01/
FTPサーバ名:www.12345678900.ne.jp
FTPユーザー名:piyopiyo
FTPパスワード:12345
ルートの階層のディレクトリ名:public_html
アップしたい場所のFTPのサブディレクトリ名(1階層め):imgfoider01
・・・以降に示したような設定になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// // // FtpHostName = "www.12345678900.ne.jp" FtpAccountName = "piyopiyo" FtpAccountPsw = "12345" FtpTildeName = "/~myhp01" // 「/」を先頭だけに書きます。無ければ""のままで。 HttpName = "http://" //httpやhttps?ご自分の環境に合わせて。 //アップロードする場所の指定 FtpUserDir01 = "/public_html" // 「/」を先頭に書きます。 FtpSubDir01 = "/imgfoider01" // 「/」を先頭に書きます。無ければ""のままで。 FtpSubDir02 = "" FtpSubDir03 = "" URLHostName = "www.12345678900.ne.jp" // |
上記はレンタルサーバじゃない場合の一例でしたが、逆にレンタルサーバなどの場合で以下のような設定の場合なら・・・、
ホームページのURL:http://12345678900.ne.jp/ (wwwとか付いてない場合)
FTPサーバ名:ftp.12345678900.ne.jp
FTPユーザー名:piyopiyo
FTPパスワード:12345
ルートの階層のディレクトリ名:12345678900.ne.jp (URLと同じ)
アップしたい場所のFTPのサブディレクトリ名(1階層め):imgfoider01
・・・以降に示したような設定になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// // // FtpHostName = "ftp.12345678900.ne.jp" FtpAccountName = "piyopiyo" FtpAccountPsw = "12345" FtpTildeName = "" // 「/」を先頭だけに書きます。無ければ""のままで。 HttpName = "http://" //httpやhttps?ご自分の環境に合わせて。 //アップロードする場所の指定 FtpUserDir01 = "/12345678900.ne.jp" // 「/」を先頭に書きます。 FtpSubDir01 = "/imgfoider01" // 「/」を先頭に書きます。無ければ""のままで。 FtpSubDir02 = "" FtpSubDir03 = "" URLHostName = "12345678900.ne.jp" // |
★ 「Basp21でのFTPとタグ生成.uws」プログラム解説コメントつき
では、以下、プログラムの解説です。
横に長いですので、メモ帳か他のテキストエディタにコピペしてお読みください。
例えばTerapadというテキストエディタだと、表示→編集モード→PHPで、コメント部分だけが緑色になるので読みやすくなると思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
// // //デスクトップにあるJpeg画像を、いったんD:\WPIMG\にコピーしてFTPし、 //そのURLをもとにImgタグを自動生成する。 //「OnePress Image Elevator 」のかわりです。 //MySQL内に画像を置きたくないときに使えると思います。 //事前にBasp21のインストールが必要です。 //Win10Pro32bit、64bit、両方で動くと思います。 //事前にBasp21の最終バージョンのインストールが必要です。 //ただ、こちらは 「BASP21-2003-0211.exe」でも動きました。 //最新版のダウンロードは以下です。 // http://www.hi-ho.ne.jp/babaq/basp21.html // PCUserName = "user01" //自分が今開いているデスクトップのユーザー名です PCDesktopSrcJpegName = "src - コピー.jpg" //デスクトップに置いた白地の50×50のjpgをひな型に、それを右ドラッグコピーしてソース画像に使うのですが、右ドラッグすると必ずこの名前になるのでそれを利用します。 PCImgFolder01 = "D:\WPIMG\" //ソース画像を、ファイル名をリネームしつつ複製する先のフォルダを作り、それを指定します。ここではDドライブにWPIMGというフォルダを作り、それをコピー先に指定します。 FtpHostName = "FTPのホスト名" //プロバイダから指定されたFTPサーバー名です。「public_html」とかそういうものは要りません。IPアドレスでも良いかもです。基本、末尾には「/」要らないと思いますが、もしテストしてみて無いとダメなら少しプログラムを書き換える必要があります。もしくは、FtpUserDir01 で/を先頭に付けないか、です。それでだめならプログラムをそういう状況に合うように書き換えます。分からなかったら誰かに書き換えてもらってください。 FtpAccountName = "FTPのユーザー名" //プロバイダから指定されたFTPユーザー名です。メールやインターネット接続のためのユーザー名とはまた別のユーザー名となりますのでご注意ください。 FtpAccountPsw = "FTPのパスワード" //プロバイダから指定された、あるいは自分で変更したFTPパスワードです。こちらもメールやインターネット接続のためのものとは違うのでご注意ください。 FtpTildeName = "/~チルダがある場合その名前" // 「/」を先頭に書きます。無ければ""のままで。自分のホームページアドレスが「http://xxxxx.jp/~xxxxx/」のように「/~xxxxx/」の部分があるときは指定します。ただ、「/~xxxxx/」がある場合であっても実際にFTP送信テストしてみたらここが空白のほうが正常につながるということなら、ここは""のままとします。 HttpName = "http://" //httpやhttps?ご自分の環境に合わせて。https、まだ経験したことが無いのでよくわかりません。すみません。 FtpUserDir01 = "/「public_html」など、ルートの階層のディレクトリ名" // 「/」を先頭だけに書きます。末尾には要りません。なお、送信テストしてみて、もし逆に指定の必要が無いなら""のままで。 FtpSubDir01 = "/FTPのサブディレクトリ名。もしあれば。" // 「/」を先頭だけに書きます。末尾には要りません。無ければ""のままで。1階層目のサブフォルダの指定です。 FtpSubDir02 = "" // もし2階層目のサブフォルダがあれば「/」と共に書きます。無ければ""のままで。 FtpSubDir03 = "" // もし3階層目のサブフォルダがあれば。以下同文。 //画像のURLを生成するとき、FTPとしてのホスト名とURLとしてのホスト名前が違う時用の設定です。 //先頭に「/」を付けずに、「http://」以降のホスト名だけを指定します。必ず指定します。 //たとえば、FTPのホスト名には「ftp.」が付いているけど、実際の「http://」以降のホスト名には //それはついてない、という場合、ついてないほうのホスト名を指定します。 //URLに「/~xxxx」とチルダの名前も付いていたらそれは含めません。すでに「FtpTildeName」で指定していますので。 //FTPサーバ名と、URLの「http://」以降のホスト名が全く同じ場合は、FtpHostName の設定値とまったく同じ値になります。 URLHostName = "URL用のホスト名" GETTIME() //今現在の日時を取得 //取得した日時をもとに、画像のファイル名を生成します。 //「G_TIME_YY4」や「G_TIME_MM2」などはその取得した日付データから年や月を切り出すためのUWSCの関数です。 //そして「G_TIME_YY4」や「G_TIME_MM2」などの末尾に数字のあるものは文字列型で、数字の無い「G_TIME_YY」や「G_TIME_MM」は数値型か何かみたいです。 //「G_TIME_YY4」と「G_TIME_MM」を混在させるとエラーになる??(未調査)みたいですので、ここでは末尾に2や4のついた文字列型の切り出しデータで統一します。 fname01 = G_TIME_YY4 + "-" _ + G_TIME_MM2 + "-" _ + G_TIME_DD2 + "---"_ + G_TIME_HH2 + "-" _ + G_TIME_NN2 + "-" _ + G_TIME_SS2 + ".jpg" CopyDistFullPath = PCImgFolder01 + fname01 //デスクトップの「src - コピー.jpg」をコマンドプロンプトでコピーする際の、コピー先文字列を生成 DosCmd("copy <#DBL>C:\Users\" + PCUserName + "\Desktop\" + PCDesktopSrcJpegName + "<#DBL> <#DBL>" + CopyDistFullPath + "<#DBL>" ) //コマンドプロンプトにて、「src - コピー.jpg」をD:\WPIMG\へ日付ファイル名でコピー。「<#DBL>」はコマンドプロンプト上で使うダブルクォーテーションを意味しています。 ftp = CreateOLEObj("basp21.FTP") //Basp21の呼び出し ftp.Openlog( PCImgFolder01 + "samplelog.txt") //FTPアップロードのログファイルをD:\WPIMG\へ出力する設定にします。 ftp.Connect(FtpHostName, FtpAccountName, FtpAccountPsw) //FTPサーバへの接続。「Rc = ftp.Connect(FtpHostName, FtpAccountName, FtpAccountPsw) 」のように書くと、接続が成功したかしないかの戻り値が返ってくるので、それを基準にした条件分岐のコードも書けます。他の各Basp21コマンドもそうです。 ftp.Command ("pasv") //よくわかってないのですが、一応パッシブモードにします。ファイアウォールのせいでアップできない時用。ぼくんちは無くても大丈夫でしたが・・。不要なら「//」でコメントアウトしてもいいです。 //FTPへのアップロード用のパスを生成 FtpPutDirPath = FtpUserDir01 + _ FtpSubDir01 + _ FtpSubDir02 + _ FtpSubDir03 //アップロードの実行。 //最後の数字の「1」 はバイナリーモードでの送信を意味します。画像を送るときは1にします。 //詳しくは http://www.hi-ho.ne.jp/babaq/basp21f.html の //「●PutFile(local,remote[,type]) : リモートへファイルを送信」をお読みください。 //その他のファイルを送るときの送信形式は以下の設定をご参考に。(上記Webページより引用) // 0 : ASCII(省略値)。txt/html などのテキストファイルの場合。 // 1 : バイナリ。jpg/gif/exe/lzh/tar.gz などのバイナリファイルの場合。 // 2 : ASCII + 追加(Append)モード。 // 3 : バイナリ + 追加(Append)モード。 ftp.PutFile(CopyDistFullPath, FtpPutDirPath, 1) ftp.Close //FTPサーバから切断 //アップロードした画像のURLを、冒頭で設定した各種情報をもとに生成します。 ImgURL = HttpName + _ URLHostName + _ FtpTildeName + _ FtpSubDir01 + _ FtpSubDir02 + _ FtpSubDir03 + _ "/" + fname01 //WordPressに貼り付けるための、アップした画像にリンクする Imgタグを生成します。「<#DBL>」はHTMLで使うダブルクォーテーションを意味しています。元画像の70%の大きさで表示する設定です。 ImgTAG = "<a href=<#DBL>" + ImgURL + "<#DBL> target=<#DBL>_blank<#DBL>>" + "<img src=<#DBL>" + ImgURL + "<#DBL> alt=<#DBL><#DBL> width=<#DBL>70%<#DBL> height=<#DBL>70%<#DBL> ></a>" SENDSTR(0,ImgTAG) //生成したタグをクリップボードへ送ります。 // |
★ 「src.jpg」から「src - コピー.jpg」をいちいち作る手間を解消
2017/07/29追記
「src.jpg」から「src - コピー.jpg」をいちいち作るのが手間だったので作業が終わった後、「src.jpg」の内容を「src - コピー.jpg」に上書きして白地にしてしまうことにしました。
これでキャプチャ画像を貼り付けるときに、「src.jpg」から「src - コピー.jpg」をいちいち作る手間がなくなり、「src - コピー.jpg」をダブルクリックで開くだけになりますので、また少し手数が減るので、使いやすくなると思います。
プログラムを追記するのは2か所です。
まず一番先頭の行の
PCUserName = "user01"
のあとに、
PCDesktopQrgJpegName = "src.jpg"
と追加でコピペします。
次に、一番最後の
SENDSTR(0,ImgTAG)
の行のあとに、以下の行をまるっと追加でコピペします。
//白地の50x50の画像内容を、「src - コピー.jpg」に上書き
DosCmd("copy <#DBL>C:\Users\" + PCUserName + "\Desktop\" + PCDesktopQrgJpegName + "<#DBL> <#DBL>C:\Users\" + PCUserName + "\Desktop\" + PCDesktopSrcJpegName + "<#DBL>" )
以上で完了です。
こうなりますと、「src - コピー.jpg」自体がある意味要らなくなることはなりますが、「src.jpg」の白地の50x50の画像も残しておいたほうが、WordPress以外の画像処理の作業にも使えるので、一応残しておきます。