2010年 07月 06日

Sunaba が楽しいので、スカウター的なのを書いてみた

なんとなくノリで何の意味もないのをつくって Perl で公開したいときサクっとできるので楽しいですね。id:mechairoi さんと話しながら、よくあるスカウターっぽいのをかいてみました。30分ぐらい

Plack::Request がかんたんには使えないぽいので自力でがんばってます。

use strict;
use warnings;
use URI::Escape;

use Digest::SHA1 qw(sha1_hex);
use URI;

my $handler = sub {
	my $env = shift;
	my $params = +{ map { map { uri_unescape $_ } split /=/, $_, 2 } split /[;&]/, $env->{QUERY_STRING} };


	my $content = '';
	my $url = $params->{url};
	if ($url) {
		my $uri  = URI->new($url);
		my $int  = substr(unpack('H*', sha1_hex($url)), 0, 4);
		my $link = sprintf('http://%s/?url=%s', $env->{HTTP_HOST}, uri_escape($url));
		my $status = uri_escape(sprintf('%s(ryの戦闘能力は%sです %s', $uri->host, $int, $link));
		$content = qq{
			<p>$url の戦闘能力は $int です</p>
			<a href="http://twitter.com/?status=$status">Twitter に投稿</a>
		};
	}

	[ 200, [ "Content-Type", "text/html" ], [
	qq{
		<!DOCTYPE html>
		<title>スカウター</title>
		<style type="text/css">
		body {
			line-height: 1.66;
		}

		div.content {
			width: 50em;
			padding: 1em;
			margin: 1em auto;
		}

		form {
			margin: 2em 0;
		}
		</style>

		<div class="content">
			$content
			<form action="" method="get">
			<input type="text" name="url" value="http://example.com" size="50"/>
			<input type="submit" value="測定"/>
			</form>
		</div>
	}
	] ];
}