あんパン

こしあん派

夜フクロウからpic.twitter.comとかGyazoに写真をアップロードするやつ作った

今日のGyaPC::Asia Tokyo 2015のLTネタです。

YoruFukurouからpic.twitter.comに投稿したりとか、Gyazoに投稿したりとかが現状ではできないのでプロキシを作って、いい感じにアップロードしようみたいな勢いです。

YoruFukurouには画像投稿先をカスタムする機能があり、この部分をよしなに置き換えることにより画像をpic.twitter.comやGyazoに投稿できるようになります。

インストール

$ gem install owlproxy

でインストールできます。Bundlerのユーザは

$ echo "source 'https://rubygems.org'\n\ngem 'owlproxy'" > Gemfile
$ bundle install --path vendor/bundle

みたいなことをすると良いと思います。オススメなのはBundlizerを使うか、または拙作のgemappを使うという手法です。gemappはBundlizerの機能縮小版で、200行未満のShellScriptで書かれています。ホームディレクトリに隠しディレクトリを作成して、いい感じにBundlerでRubyGemsをインストールしてくれます。インストールするとついでに実行ファイルも用意してくれるので、その実行ファイルが入っているディレクトリにPATHを通すことで使えるようになります。

サーバの立ち上げ

インストールを終えたら

$ owlproxy

とかやると、ホームディレクトリに.owlproxy.ymlが生成されます。これがconfigファイルで、ポート番号やdaemonizeするかどうか、access_token等が指定できます。YAMLで記述されているのでアカウントごとで共通な部分はdefaultsを使ってまとめることができます。configファイルを書き換えたらサーバをリロードしましょう。daemonizeしている場合はpkillなどで頑張って殺してから再起動してください。

このconfig内でユーザごとにaccess_token等を設定することで、投稿ユーザごとにアップロード先やアカウントを変更することができます。例えば、きちんと設定することで複数アカウント管理時にそれぞれのTLに画像を投稿することができるようになります。

使い方

YoruFukurouの設定からhttp://localhost:ポート番号/uploadとURLを入力することでYoruFukurouからローカルのプロキシに画像を送信するようになります。設定してしまえば、あとはいつもの通り画像を投稿することでGyazoやpic.twitter.comに画像を送信することができます。なお、デフォルトのポート番号は9000番です。

オプションなど

画像投稿時にメッセージ入力欄にオプションを入れることができます。

投稿先サービス名:各種オプション:メッセージ

のように:で区切って入力してください。オプションやメッセージが不要の場合は投稿先サービスだけでも問題ありません。たとえば、default_optiongyazoの場合、なにもオプションに入力しない場合はGyazoに画像が投稿されます。twitterと入力した場合はTwitterに投稿され、twitter:messageとした場合はTwitterにmessageというメッセージ付きで画像がツイートされます。

サービスの追加

lib/owlproxy/services/gyazo.rbなどを参考に、適当なclassを作成してuploadメソッドを実装、registerするとサービスを追加することができます。社内GyazoにAPIなどがある場合、新たにサービスを作成することで対応できるかもしれません。

まとめ

コードはここにありますので、IssueやPull Requestをお待ちしております。

github.com

以下雑談ですが、(どことは言いませんが)Google検索で出てくるpic.twitter.comにアップロードするプロキシはなるべく使わないほうが良いと思っています。なぜなら、access_tokenとaccess_token_secretをhttpで送信しているからです。

まぁこれ自体さほど問題はないのですが、なんらかの弾みでConsumer KeyとConsumer Secretが流出したら良くないことが起きるだろうなぁという感想です。サーバにaccess_tokenとaccess_token_secretを保存しないのはそこらへんの面倒な管理がなくなるからだと思いますが、StartSSLなど使えば無料でSSLサーバ証明書が取れるのに暗号化しないのはなんとも…という気がします。

どちらにせよ鍵アカウントで画像付きツイートをしたいときなどに内容が暗号化されないという問題がありますので、良くはないでしょう。改善されることを期待しています。