twitterでアイコンにギリギリ700kb以下の画像をアップロードすると500エラーが返ってくる。

タイトル通りです。twitterでアイコンに、API経由でギリギリ700kb以下の画像をアップロードすると500エラーが返ってきます。
700KB超だと「Image validation failed with errors: Image size must be <= 700.0 KiB.」が返ってくるのですが、680KBの画像をアップロードすると500エラーが返ってくるようです。 試したら633KBはアウトで、603KBの画像はOKでした。また仕様が変わったのかもしれないですね。 upicoについては使用者のリテラシーがぶっちぎりで低いうえに、Twitter側でAPIの仕様がコロコロ変わるので、こっちも対応にうんざりしています。お金になるわけじゃないし正直もう面倒見たくないけど惰性でやってる感半端ないです。善意と自分の勉強のために公開したもののはずなのにどうしてちょっと動かないくらいで文句ばっかり言われないといけないんでしょうね。よくわかんないです。 どうでもいいですが、業火の向日葵見てきました。ストーリーはぶっちぎりでひどかったですが。見てよかったと思える映画でした。また見たいです。

TimeLine Copierで処理結果をMongoDBに持たせるようにしました。

TimeLine Copier – Twitterでフォローしてる人をリストにコピーするツール
今までjsonに処理結果を出力して、ユーザが見る前に削除するという方法をとっていたのですが、それだと429(API切れ)を起こしたユーザがそれに気づかないまま何度もリクエストを送り続けてバグる、という状況になってしまうため、処理結果をMongoDBに持たせるようにしました。前回404と429で終了した人が再度リクエストを送信すると警告画面に飛ぶようになっています。
処理内容についてはGithubを御覧ください。

大量にリストを作ってリストを公開し、リストに追加した人のアクティビティに通知がいくことを利用して遊んでる方がいるようなのですが、そういう目的で作っているツールではないので、なるべく節度を守って使用してほしいなと思います。(あまりにひどいと予告なしで使用不可にします。)
道具の使い方なんて人それぞれだと思うのでとやかく言う筋合いはないのはわかるのですが、自分の作ったツールがそういう使い方をされているのは見ていてあまり気持ちのいいものではないです。

upicoが401で動かない。


アクセストークンを使いきってトークンの払い出しができなくなってたので暫定手段として別のアプリを作成しました。残していても仕方ないので古いアプリは消します。
アクセストークン使い捨てる作りなので、redisかなんかで1回認証したら残存時間までトークンを保持させるようにしときたいですね。
ていうか100万トークン使いきったんですね。ありがたいことです。

twitterに#でタグつけてつぶやいた時に日時を取得してtumblr.に投稿するWebアプリ。

はっしゅたんぐら。 – twitter # to tumblr.
リリースしました。

つかったフレームワーク

WAFはあいかわらずのMojolicious::Liteで、CSSフレームワークについてはPureを使用しました。Blogレイアウトをそのまま拝借するという手の抜きようです。
Railsで同じもの実装しようとすると半年かかっても全く終わらない自信があるので正直手を出したくないです。半年かかってもいいアプリで挑戦したいですね(ふるえながら)。

つかったDBとドライバ

使用したDBはMongoDBで、ドライバはMangoを使用しました。
MangoはMojoliciousに最適化されたノンブロッキングI/OなMongoDBドライバです。詳細は以下。
oliwer/mango

最新の安定版のMongoDBしかサポートしていないので、なにも考えずにapt-getでインストールしたMongoDBだと動きません。(最初これでMangoが動かなかった)
Debianだとリポジトリ追加するだけでインストール出来たので、拍子抜けしました。
Install MongoDB ? MongoDB Manual 2.6.4
MongoDBめちゃくちゃ楽だし使いやすいですね。JSONは偉大だと思いました。(小学生並みの感想)

つかったWeb API叩く用モジュール

TwitterはNet::Twitter::Lite一択なので詳細割愛。
Tumblrはtumbperlに「get_authorization_url」と「get_access_token」メソッドを追加して、Webアプリケーション経由でアクセストークンが取得できるようにしておきました。
実際のソースはgithubにおいておきました。(forkあんまりしたくない人間なので、最初はcloneしたものにコミットしてたんですが、公開するのにそれはどうなのよって気がしたのでforkしました。)
retrorocket/tumbperl at for_web_app

暗号化とか

アクセストークンを暗号化してDBに保存する必要があるので、Crypt::CBCで暗号化しています。
暗号化方式は(自分が使ったことないものを試したかったので)Crypt::OpenSSL::AESを使いました。
AESで暗号化したものはバイナリになるので、Base64エンコードしないとDBに保存できません。これに気づかず、全く復号化できなくて1時間無駄にしました。
MIME::Base64::encode_base64でエンコード、decode_base64でデコードできます。

実装した結果

retrorocket/tag

すぐ実装できるだろ―と思ってたのですが、MongoDBにアクセスできなかったり、復号化上手くいかなかったり、Twitter側のアクセストークンをセットし忘れて400が出てるのにそれの原因がわからなくて30分作業が止まったり、全然すぐ実装できなくて凹みました。
Mangoの使い方は下記をものすごい参考にさせていただきました。(めんどくさいのでメソッド名もそのまま使用させていただきました。)
MojoliciousでMongoDB – Qiita

twitterに#でタグつけてつぶやいた時に日時を取得してtumblr.に投稿するスクリプト。

前回の続き。
ブログに投稿するのであれば、XML-RPCがほとんど全てのブログサービスに共通に対応してていいかなーと思ったのですが、これだとブログサービスのIDとパスワードを預からないといけなくて、このご時世にリスクが高すぎるのでTumblrだけに対応させることにしました。
最初はWWW::Tumblrを使用して実装を始めたのですが、マルチバイト文字使用圏ガン無視の素敵なモジュールだったので諦めました。
(モジュール、マルチバイトに対応させようと思って途中まで直したんですが、直すんだったら自分で作りなおしたほうが早いレベルであんまりな実装だったのでやめました。エアギアでモリガンと対峙したベンケイさんの気分です。)
githubを検索したら以下のモジュールが良さげだったので使用することにしました。
tumbperl/API.pm at master · cedriczirtacic/tumbperl · GitHub
ちなみに上記モジュールはそのまま使用するとWebアプリケーション化できないため、get_authorization_url系のメソッドを実装した上で使用します。
(実装自体は終わったのでWebアプリケーションにした時に公開します。)
スクリプトは続きから。

Continue Reading