ブログパーツを作る〜基本編〜

仕事でブログパーツを作ることになったのだけれど、ブログパーツについて何も知らなかったので色々調べた結果をメモ。

作ろうとしていたブログパーツの前提条件。

  • Flashベース
  • サーバとsocket通信
  • ユーザ情報を表示

こんな感じ。
通信部分はXMLSocket通信でもいいのですが、バイナリ通信ができると既存のサーバプログラムをそのまま流用できるので、ActionScript3.0を採用してsocketを使います。

どうやってブログに配置するの?

ブログパーツはよく見るけれど、どうやって配置しているのか不明だったのでFC2のアカウントを取得して貼り付けてみたりして調査。
ふーん、普通にHTMLソースを張り付けてるだけなのね。
Flashブログパーツは外部JavaScriptを読み込んでいるものが大半だったけれど、メンテナンスの為に切り離しているだけだと思っていた。
でも違った。(次回に言及)

Flashを表示させる

まぁ、とにかくFlashを表示させるHTMLタグをユーザに貼り付けてもらえばいいみたいだ。
HTMLタグはこんな感じ。

<object
  classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
  width="100"
  height="100"
  codebase="http://fpdownload.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0"
>
  <param name="movie" value="movie.swf">
  <param name="play" value="true">
  <param name="loop" value="true">
  <param name="quality" value="high">
  <embed
    src="movie.swf"
    width="100"
    height="100"
    play="true” 
    loop="true"
    quality="high" 
    pluginspage="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"
> 
</embed>
</object>

Adobeのヘルプに書いてあったので、深く考えずそのまま転用。
objectタグとembedタグに重複する部分があるので、間違わないようにする。

Flashにパラメータを渡す

ユーザ情報を表示させたいので、ユーザIDを埋め込んだHTMLタグを自動生成しなければいけない。
さて埋め込もうかと思った時に、ふとどこに埋め込めばいいのか分らないことに気がついた。

調べてみると、どうもタグに埋め込むとFlashロード時に読み込んでくれるらしい。
タグのパラメータ名はFlashVarsというらしい。
GETパラメータのように、名前=値という形で入れていく。
複数ある場合は&でつなぐ所もGETパラメータと同じ。

  • name TeraKen
  • sex man
  • job programmer

というパラメータを渡したい時は以下のようにする。
追加する箇所がやはり重複しているので、注意が必要。

<object
  classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
  width="100"
  height="100"
  codebase="http://fpdownload.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0"
>
  <param name="movie" value="movie.swf">
  <param name="play" value="true">
  <param name="loop" value="true">
  <param name="quality" value="high">
  <param name="FlashVars" value="name=TeraKen&sex=man&job=programmer">
  <embed
    src="movie.swf"
    width="100"
    height="100"
    play="true” 
    loop="true"
    quality="high" 
    FlashVars="name=TeraKen&sex=man&job=programmer" 
    pluginspage="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"
> 
</embed>
</object>

パラメータを受け取る側はActionScriptで、loaderInfoを使用する。
root.loaderInfo.parametersは、メインSWFファイルのルートクラスのプロパティにあります。

package
{
    import flash.display.Sprite;

    public class MyMovie extends Sprite
    {
        public function MyMovie():void
        {
           var params:Object = LoaderInfo(this.root.loaderInfo).parameters;
           trace("name : " + params["name"]);
           trace("sex  : " + params["sex"]);
           trace("job  : " + params["job"]);
        }
    }
}

受け渡したパラメータが出力されます。

name : TeraKen
sex  : man
job  : programmer

今回はユーザIDを埋め込むだけなので、このように。

<object
  classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
  width="100"
  height="100"
  codebase="http://fpdownload.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0"
>
  <param name="movie" value="movie.swf">
  <param name="play" value="true">
  <param name="loop" value="true">
  <param name="quality" value="high">
  <param name="FlashVars" value="UserID=9999">
  <embed
    src="movie.swf"
    width="100"
    height="100"
    play="true” 
    loop="true"
    quality="high" 
    FlashVars="UserID=9999" 
    pluginspage="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"
> 
</embed>
</object>

さて、これで大体できたので、blogに貼り付けて動作確認をしてみましょう。
長いので次回へ。