高見知英のかいはつにっし このページをアンテナに追加 RSSフィード

2008年03月23日

任天堂

最近DSやWiiのソフトやハードを購入すると、もれなく付いてくる クラブニンテンドーのポイント追加用カード。これに記載されているシリアルナンバーを任天堂のサイトに入力すると、クラブのポイントが加算されるのですが――。

毎回入力必須のアンケートフォームが表示されます。一個や二個ならともかく、あれだけ入力項目が多いと強制というのはどうなのかなあ とちょっと疑問に感じます。

――まあ、ハードの提供元としてはアンケート入力を推し進めたい気持ちはあると思いますが、どうなんでしょうねえ。だいたいアンケートの項目のって、購入直後に書けるものと、ある程度プレイしないと書けない項目が混ざってる、結局カードが貯まってどこかのタイミングでまとめて入力しなきゃいけなかったりして。さすがにちょっと面倒です。


ほかの企業ってどうだっけ?まず真っ先に思い浮かぶのは同じようなシステムを独自に持ってるスクウェア・エニックス

こちらはシリアルを入力すると表示されるのは一つのコメント欄のみ。これなら強制(そもそもこちらは任意だったと思いますが)されてもそうそう苦ではない。ほか、Microsoftなどもたびたびアンケートが出てきますが、こっちはさほど必須ではなかった(・・・はず。まあ、これはこれでこっちの興味がある項目だったので、あまり気にせず入力しちゃいましたが)。

まあ、アンケートが嫌ならシリアルなんか入力するなといえばそれまでだとは思いますが、ほかに方法はなかったんでしょうか。


あとは、Wiiのみんなのニンテンドーチャンネル(違うチャンネルだったかも、あまり詳しく覚えてないので・・・)なんかも。個人を特定できない状態の利用状況を任天堂に通知するのが強制になっているようで、通知に同意しないとサービスを利用することができません。Microsoftなら、これって絶対任意だろうな と。まあ、特に気にしないので同意してしまいましたが、こういうところが細かいようで、なんというか、情報媒体の運営の違い というのでしょうか、そんなものが表れてるのかなと思いました。


――やはり、任天堂のやり方は、ほかの会社と違うところがあるなあ と思いました。まあ、それでいいのか悪いのかはわたしにはわかりませんが、個人的にはもうちょっと強制力を弱めた方がいいんじゃないかな なんて思います。それを変えたところで影響が出るのかどうかはわかりませんけど。

磯子マガジンのRSS生成スクリプト

今後お世話になることも多いですし、磯子マガジンさんのRSSを生成するスクリプトを作ってみました

#!/usr/bin/perl
use lib q/lib/;
use LWP::UserAgent;
use Encode;
use IO::File;
use XML::RSS;
my $DOMAIN = 'isomaga.com';
my $URL_MAIN = "http://$DOMAIN/";
my $CACHEFILE = 'isomaga.cache';
$ua = new LWP::UserAgent;
if ($ENV{GATEWAY_INTERFACE}) {
  require KCatch;
}

if(!(-e $CACHEFILE) || ([stat($CACHEFILE)]->[9] + 60) < scalar time)
{
  my $request = HTTP::Request->new(GET => $URL_MAIN);
  my $res = $ua->request($request);
  my $html = $res->content;
  my $file = new IO::File($CACHEFILE, 'w') || die "can't write cache! ($!)";
  $file->write($html);
  undef $file;
}

{
  my $rss = new XML::RSS(encode_output => 0);
  $rss->channel(
    title => Encode::decode('UTF-8', '磯子マガジン RSS'),
    link => $URL_MAIN,
    description => Encode::decode('UTF-8', '磯子マガジン トップ記事一覧'),
    language => 'ja');
  my $file = new IO::File($CACHEFILE, 'r') || die "can't read cache! ($!)";
  my $html = decode('Shift_JIS', join('', $file->getlines));
  while($html =~ m{<TD>.*?<A href="([\w/\.]*)" class="middle_title">([^<]*?)</A>.*?<BR>(.*?)</TD>}sg)
  {
    # よくわからない。冗長に書かないとうまく動かない
    my %data = (
      url => $1,
      title => $2,
      summary => $3);
    $data{summary} =~ s/^\s+//mg;
    $data{summary} =~ s/^(<BR>)?$//mg;
    $data{summary} =~ s/(<IMG.*?src="?)([^"]*)/$1$URL_MAIN$2/g;
    if($data{url} ne 'isomaga/welcome.htm')
    {
      $rss->add_item(
        link => $URL_MAIN . $data{url},
        title => $data{title},
        description => "<![CDATA[$data{summary}]]>");
    }
  }

  if ($ENV{GATEWAY_INTERFACE}) {
    require CGI;
    print CGI::header('text/xml; charset=utf-8');
  }
  print Encode::encode('utf-8', $rss->as_string());
}

これで磯子マガジンのトップページに表示されているトピックを一覧できるRSSを生成します。

基本的にほかのサイトのコピーだけ。ただ、概要部分にタグが入っていることがあるので、ちゃんとCDATAにしてあげないといけないことと、記事内に画像が入っていた場合、相対パスになっているので、ベースのURLを書き足す必要があることくらいが注意点でしょうか。

最後の行のEncode::encodeは、「Wide character in print at ...」という警告の対策。字面を見た限り「で?」という感じなのですが、警告に敏感な(ロリポップなど?)サーバで使う可能性も考えて、出ないようにしました。

なお、XML::RSSと、それに必要なDateTime系モジュールは、参考サイトの下二つよりダウンロードしたものをlibディレクトリを作って配置してます。

参考サイト

*1:なぜか日本語圏内には情報が全くなかったので、cpanから直接コピー