ブログのサムネイル画像のURLをオリジナル画像のURLに変換する方法
Kyoro's Roomの電卓・ポケコンコーナーをこのブログのインデックスとして利用できるように整備していますが、記事中の画像(このブログの本文に使用しているサムネイル画像を挿入しています)をクリックすると拡大表示(サムネイルではないオリジナルの画像)が表示されるようにCGIを改良してみることにしました。最も簡単なのはデータファイルのフィールドを増やしてオリジナル画像のURLも格納する方法ですが、それだとデータの編集作業が大変です。そこで、サムネイル画像とオリジナル画像のURLの間の規則性を利用して自動的にオリジナル画像のURLを生成できるように作ってみることにしました。このブログ(FC2ブログ)の場合、オリジナル画像のファイル名末尾に 's' がついたものがサムネイル画像となります。
サムネイル画像のURL例 : http://blog-imgs-66.fc2.com/k/y/o/kyoro205/FX-795Ps.jpg
オリジナル画像のURL例 : http://blog-imgs-66.fc2.com/k/y/o/kyoro205/FX-795P.jpg
つまり、ファイル名の末尾に 's' がついておればそれを除去するのみでよいということです。サムネイル画像のURLの、サーバー名(例: 'http://blog-imgs-66.fc2.com' )を $server に、ディレクトリ名(例: '/k/y/o/kyoro205' )を $folder に、ファイル名(例: 'FX-795P' )を $filename に、拡張子(例: 'jpg' )を $ext に格納した状態で $result にオリジナル画像のURLを得るPerlのサンプルコードを載せておきます。
$filename =~ s/s$//;
$result = $server . $folder . '/' . $filename . '.' . $ext;
ついでに他のブログについても調べてみました。アメブロはもう少し複雑で、サーバー名中の 'stat' を 'stat001' に変更し、ファイル名の先頭の 't' を 'o'に変更しなければいけないようです。たとえば次のようなコードになります。
$server =~ s/stat/stat001/;
$filename =~ s/^t/o/;
$result = $server . $folder . '/' . $filename . '.' . $ext;
ヤプログは結構単純で、ファイル名の末尾に '_large' を追加するだけです。
$filename = $filename . '_large';
$result = $server . $folder . '/' . $filename . '.' . $ext;
もちろんブログ内にオリジナル画像が存在しなければこのコードで生成されたURLを指定してもエラーになってしまいます。それに、まだまだ私はPerlの正規表現を使いこなせていないので、もう少しスマートな方法もあると思います。あくまでも参考程度ということで…。
なお、ブログの画像サーバーによっては外部からの参照をブロックしている場合があります。上記のコードでテストしたところ、当ブログの画像を利用するのには全く問題はありませんでしたが、アメブロの一部などで403や404のエラーが出ることがありました。また、ブロックされていない場合でも規約で明確に禁止されている場合にはこのような方法は利用しないほうがよいでしょう。私の利用しているFC2は、ヘルプでは外部からの参照はブロックしているように書かれていますが実際には問題なく動作しており、規約上も明確に禁止はされていない(「FC2のサーバーに負担をかける行為」に該当する可能性は否定できませんが、Kyoro's Roomのアクセス数は決して多くはないので実質的に問題になるほどの負荷はかけていないと思います)ので、グレーゾーンかもしれないと思いながら運用しています。そういう状況ですので、上記のコードのご利用はくれぐれも自己責任でお願いいたします。
サムネイル画像のURL例 : http://blog-imgs-66.fc2.com/k/y/o/kyoro205/FX-795Ps.jpg
オリジナル画像のURL例 : http://blog-imgs-66.fc2.com/k/y/o/kyoro205/FX-795P.jpg
つまり、ファイル名の末尾に 's' がついておればそれを除去するのみでよいということです。サムネイル画像のURLの、サーバー名(例: 'http://blog-imgs-66.fc2.com' )を $server に、ディレクトリ名(例: '/k/y/o/kyoro205' )を $folder に、ファイル名(例: 'FX-795P' )を $filename に、拡張子(例: 'jpg' )を $ext に格納した状態で $result にオリジナル画像のURLを得るPerlのサンプルコードを載せておきます。
$filename =~ s/s$//;
$result = $server . $folder . '/' . $filename . '.' . $ext;
ついでに他のブログについても調べてみました。アメブロはもう少し複雑で、サーバー名中の 'stat' を 'stat001' に変更し、ファイル名の先頭の 't' を 'o'に変更しなければいけないようです。たとえば次のようなコードになります。
$server =~ s/stat/stat001/;
$filename =~ s/^t/o/;
$result = $server . $folder . '/' . $filename . '.' . $ext;
ヤプログは結構単純で、ファイル名の末尾に '_large' を追加するだけです。
$filename = $filename . '_large';
$result = $server . $folder . '/' . $filename . '.' . $ext;
もちろんブログ内にオリジナル画像が存在しなければこのコードで生成されたURLを指定してもエラーになってしまいます。それに、まだまだ私はPerlの正規表現を使いこなせていないので、もう少しスマートな方法もあると思います。あくまでも参考程度ということで…。
なお、ブログの画像サーバーによっては外部からの参照をブロックしている場合があります。上記のコードでテストしたところ、当ブログの画像を利用するのには全く問題はありませんでしたが、アメブロの一部などで403や404のエラーが出ることがありました。また、ブロックされていない場合でも規約で明確に禁止されている場合にはこのような方法は利用しないほうがよいでしょう。私の利用しているFC2は、ヘルプでは外部からの参照はブロックしているように書かれていますが実際には問題なく動作しており、規約上も明確に禁止はされていない(「FC2のサーバーに負担をかける行為」に該当する可能性は否定できませんが、Kyoro's Roomのアクセス数は決して多くはないので実質的に問題になるほどの負荷はかけていないと思います)ので、グレーゾーンかもしれないと思いながら運用しています。そういう状況ですので、上記のコードのご利用はくれぐれも自己責任でお願いいたします。
※本サイトで紹介する内容は、すべて個人的研究の範囲内で行っていることです。ここに書かれた内容を実行したことによる、データ(クラウド上を含む)・ソフトウェア・ハードウェアの障害および金銭的損害について、私が責任を負うことはできません。重要なデータはあらかじめバックアップを行い、内容を十分に理解したうえで、ご自身の責任の下で行ってください。 |
- 関連記事
-
- Kyoro's Roomのその後… (2014/08/17)
- ブログのサムネイル画像のURLをオリジナル画像のURLに変換する方法 (2014/06/12)
- IIS 8.5とPerl 5.18.2でCGIの開発環境をセットアップ (2014/03/23)
スポンサーサイト
テーマ : ホームページ・ブログ制作
ジャンル : コンピュータ