既に色んな人がやっている通り、 gyazo は簡単に作れる。
サーバ
サーバ側の仕様は
- "imagedata" というパラメータ名で画像をpostするリクエストを期待する
- レスポンスは text/html でも text/plain でもいいので、とにかく任意のテキストを返す(普通は生成した画像の url)
use strict;
use warnings;
use Digest::MD5 qw/md5_hex/;
use File::Copy qw/copy/;
use Plack::Builder;
use Plack::Request;
our $UPLOAD_DIR;
our $BASE_URL = "http://example.com/your/gyazo/path";
BEGIN {
$UPLOAD_DIR = $ENV{UPLOAD_DIR} || "/path/to/image/directory";
unless (-d $UPLOAD_DIR) {
umask(0);
mkdir ("$UPLOAD_DIR", 0777);
}
}
my $app = sub {
my $env = shift;
my $req = Plack::Request->new($env);
my $up = $req->uploads->{imagedata};
open my $fh, "<", $up->tempname;
my $body = do {local $/; <$fh>};
close $fh;
my $hash = md5_hex($body);
(my $ext = $up->filename) =~ s/^(.+)\.(.+)$/$2/;
my $dst = sprintf '%s/%s.%s', $UPLOAD_DIR, $hash, $ext;
copy($up->tempname, $dst);
my $return = "$BASE_URL/$hash.$ext";
return [
200,
['Content-Type' => 'text/html; charset=utf-8'],
[$return]
];
};
builder {
enable_if { $_[0]->{REMOTE_ADDR} eq '127.0.0.1' }
"ReverseProxy";
$app;
};
今のところ gyazo クライアントはどれも png 形式で送ってくる。
でもまあ今後違うクライアントが出てくるかもしれないので。
クライアント
クライアントが無ければ話にならない。- windows http://exe.tyo.ro/2012/02/gyazowingyazowin.html ここからありがたくいただく。 windowsアプリをビルドする環境構築とかしたくない。
- mac 知らん。 公式の github リポジトリの中にあるらしい。 https://github.com/gyazo/Gyazo/blob/master/Gyazo/script 簡単な ruby スクリプトなので誰でも使えるだろう。 さて gyazo 作ったはいいけど、実際使うかっていうとそんな使わない。 やりたかっただけベース。