俺用gyazoを作る

  • 投稿日:
  • by
  • カテゴリ:

既に色んな人がやっている通り、 gyazo は簡単に作れる。

サーバ

サーバ側の仕様は

  • "imagedata" というパラメータ名で画像をpostするリクエストを期待する
  • レスポンスは text/html でも text/plain でもいいので、とにかく任意のテキストを返す(普通は生成した画像の url)
perlでいうとこんな。
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 作ったはいいけど、実際使うかっていうとそんな使わない。 やりたかっただけベース。