2009-01-21
■「東京ラブレターハント」プロジェクト(仮)
昔、あこがれませんでした?朝学校に来て、下駄箱のフタを開けると中に・・・みたいな展開。
あれをいちど体験してみたいな、と思って、酔っ払って帰った夜にこんなことを考えてみたのでした。
手順1
街中のコインロッカーを即席の下駄箱に見立てて、みんなで匿名のラブレターを入れておく。差出人、宛名は書かず、その手紙を開けた誰かに宛てたラブレターにする。
手順2
ラブレターの隠し場所を一箇所に集め、誰がどこに入れたかを分からない形にして参加者へ公表する
作法的に工夫の難しいところ。どこかコミュニティを立てて誰かホスト役がとりまとめるか、それかウェブベースにして完全に人手を介さない形で蓄積させるか。公表の仕方も掲示板上での発表にするか、参加者個人宛にメールという形にするか。
手順3
手順2によって渡された情報を元に、参加者はそれぞれ誰かの出したラブレターを見つける。
コインロッカーへ探しに出かけるのがベスト。でも地理的な制約があったり、物理的なカギをかけるタイプだったりすると難しい。ラブレターの本文データ自体はセブンイレブンの「ネットプリント」のサービスへアップして参加者には登録情報を通知し、それぞれ近所のセブンに出かけて「自分宛て」のラブレターをプリントしてゲットする、とかだと確実でなおかつ参加しやすいかな。
手順4
読む。萌えー。
手順5
読んだラブレターの文面に感想を添えて公開しあう。
とまぁ、いろんな人の恋バナを今日は一手に聞いて、そんなことをふと考えてみたのでした。今年のバレンタインのタイミングで一度やってみたい。
完全に匿名であり、文面がいくらでも送り主に対して想像とトキメキを働かせられる形にするのがミソだと思っていて。
リグレトのような「匿名だからできる両手離しの愛」みたいなものが体現できて、ゆくゆく毎朝通勤ラッシュの駅に並ぶ群集にも「このなかに実は、僕に(私)ラブレターを出した人がいるかもしれない」なんて気持ちが起これば成功なんじゃないかなとか思ってみるわけです。そうしてアカの他人にちょっとでも情が沸けば、この殺伐とした世の中もちょっとはほっこりするんじゃないかしら。
とまぁ、とにかくちょっとやってみたいん。です。
■ 「Brandnew-J オンエア楽曲お知らせTwitter Bot」を作りました。
情報提供系twitterアカウント詰め合わせ - アシタノ!@はてな
ラジオ局のオンエア楽曲お知らせBotが意外とあることを知ったので、勉強がてら自分も作ってみました。
J-WAVEのインターネットラジオ「Brandnew-J」(http://www.j-wavemusic.com/)にて現在オンエア中の楽曲情報を自動postしています。
Brandnew-Jのプレーヤー画面表示用に使われているJSONファイルをパースし、Net::Twitterで投稿してみています。
アクセス頻度は気になるところですが、実際のサイトでもプレーヤーウィンドウから10秒置き(!)に呼び出されているので、10分置きくらいであれば大丈夫かなと勝手に。(怒られるかしら)
TwitterFoxあたりと組み合わせて楽曲情報をチラ見しつつ、気になるタイトルがあったらそのままURLをクリックして聴きにいけるのでなかなかいい感じです。
ソース
1 #!/usr/bin/perl 2 3 use strict; 4 use warnings; 5 6 use LWP::UserAgent; 7 use JSON::Syck; 8 use Net::Twitter; 9 use Encode qw(decode); 10 use Encode::JavaScript::UCS; 11 use encoding 'UTF-8', STDOUT => 'cp932'; 12 13 use constant { 14 FEED_URI => "http://www.j-wavemusic.com/Player/DATA/song.json", 15 BNJ_URI => "http://www.j-wavemusic.com/", 16 }; 17 18 my $recent_song = get_recent_songlist(); 19 post_twitter($recent_song) if ($recent_song); 20 21 sub get_recent_songlist { 22 my $ua = LWP::UserAgent->new(); 23 my $res = $ua->get(FEED_URI); 24 return if (!$res->is_success); 25 return if (!$res->is_fresh); 26 27 my $data = JSON::Syck::Load($res->content); 28 my $recent_href = $data->[0]; 29 30 return if (!$recent_href->{Title} && !$recent_href->{Artist}); 31 32 my $recent_song = sprintf("%s (%s) [%s] %s", 33 $recent_href->{Title}, 34 $recent_href->{Artist}, 35 $recent_href->{StartTime}, 36 BNJ_URI, 37 ); 38 39 return decode('JavaScript-UCS', $recent_song); 40 } 41 42 sub post_twitter { 43 my $string = shift; 44 45 my $tw = Net::Twitter->new( 46 username => "****", 47 password => "****", 48 source => "web", 49 clientname => "web", 50 ); 51 52 my $result = $tw->update($string); 53 my $result_code = $tw->http_code; 54 my $result_message = $tw->http_message; 55 56 if ($result_code != 200) { 57 warn "$result_code : $result_message\n"; 58 return; 59 } 60 61 1; 62 }


