アシアルの中の人が技術と思いのたけをつづるブログ

絵文字ライブラリをPEARパッケージ化&sfPictogramMobilePluginをバージョンアップしました。

タグ [  Tech  携帯  symfony  PEAR  ]
こんにちは。相変わらず携帯ネタで引っ張る亀本です。

先日、第32回PHP勉強会へ参加してきました。
詳細はid:maru_ccさん、id:sotarokさんなどなど大勢の方がブログに書いてくださっているので割愛しますが、なんだかEthnaの話とPHP以外の話が非常に多い会でした。

そのなかでid:maru_ccさんがEthnaでの携帯サイト構築の話をしてくださったのですが、結構いろいろな質問が飛び交っていて、やっぱりもっと携帯周りの情報共有が進むといいのにね、もったいないよね、という話を何名かの方としていました。

そんな話に少しばかり触発されて、絵文字プラグインを公開していた自分としても、もっといろんな人の役に立ててもらいたいと思って、syfmony用のプラグインだったものを汎用のPEARパッケージ化してみました。

PEARパッケージ版:Text_Pictogram_Mobile-0.0.1.tgz
修正版:Text_Pictogram_Mobile-0.0.2.tgz
--
# 追記:データのインストール先がおかしくなっていたので修正
--

また、併せてsymfonyプラグインの方もバージョンアップしました。

symfonyプラグイン版:sfPictogramMobilePlugin-0.0.4.tgz


インストール方法はそれぞれ、
  1. $ pear install http://blog.asial.co.jp/data/Text_Pictogram_Mobile-0.0.2.tgz

  1. $ symfony plugin-install http://blog.asial.co.jp/data/sfPictogramMobilePlugin-0.0.4.tgz

とやってください。

symfonyプラグインの変更点は
・bugfix: Nonmobileが役立たずだったのを修正
・bugfix: getFromattedPictogramsArray()メソッドのキャリア指定時のバグを修正
・UTF-8を内部絵文字コードに変換できるように追加
・内部文字コードのprefix, suffix, escapeシーケンスを指定できるように変更
・外部の絵文字データベースを指定できるように変更

という感じです。
PEARライブラリの方も機能的には同じです。
ただし、symfonyプラグインを移植した関係上、PHP5以上でないと使えません。
PHP4に対応も考えたのですが、まずはとにかく出すことが優先かなと思って、PHP5用パッケージにしました。

にしても、このやり方は2重化するので修正するにも効率悪くて、もうちょっと何とかしたいですねw

PEARパッケージを使う場合は、まずパッケージをrequireして、factoryメソッドを使って
  1. require_once("Text/Pictogram/Mobile.php");
  2. $picObject = Text_Pictogram_Mobile::factory($carrier, $type);

とします。
その他の基本的な使い方は以前のエントリを見てください。


にしても、隠し機能状態のものがいくつかあるのでw、どっかでマニュアルそろえないと。。。なかなかブログを書く時間内におわらないのが悩みです><

コメント

    • こんにちは
      絵文字ライブラリのPEAR化、すばらしいです!

      さっそく落としてみました。
      pearコマンドでインストールした場合、dataディレクトリ以下のdata/*/jsonがインストールされないみたいです~
      wgetしてtarで解凍したら入っていました。
    • data/*.jsonですね

      探したら、データディレクトリの方に入ってました。
      お騒がせしました。

      ethna pear-localで入れると tmpの下に入るので、これはmumumuさんが直してくれるのを期待します。
    • >maru_ccさん
      すいません、まさかdataディレクトリに行ってしまうとは思ってませんでしたw

      たぶん、Packageマネージャの側で自動判定されてしまっているようですが、本来の意図とは違うところに入っているので、バグのもとになりそうです。

      近日修正版を出しますので、もう少々お待ちください><
    • >かめもとさん
      さっそくの修正版の対応ありがとうございます!
      問題なく入れられました~
    • 同ライブラリを使わせてもらっているものなのですが、
      ちょっとわがまま言ってもよいですか?
      jsonデータの16進文字列が大文字小文字が混在しているのって、どちらかに統一ってできないっすかね?

      また、ezwebのjis-emailを指定しrestoreした際、文字集合の切り替え規則が1文字ごとになっているようですが、mb_convert_encodingと同様に行うのって大変ですか?
    • すいません、先ほどの補足です。

      切り替えが1文字づつになってしまうのは、
      内部文字列変換時にマッピングが存在しない場合発生致します。(以下の一番始め)

      また、ついでですが、
      内部文字列が不正な場合、
      ・絵文字番号が存在しない → 空文字変換
      ・キャリア名が空 → Exception
      ・番号、キャリア名空 → Exception
      ・キャリア名が不正 → Exception
      となっているようですが、
      文字列変換ユーティリティであれば
      不正な内部文字列が指定された場合の挙動を
      統一して頂けると非常にありがたく思います。

      わがままばかり言ってしまい、申し訳ありません。
    • >通りすがりではない通りすがりさん

      つかっていただいてありがとうごじます><

      > jsonデータの16進文字列が大文字小文字が混在しているのって、どちらかに統一ってできないっすかね?

      すいません。。。統一はしていたつもりなんですが、どこかで変え損ねがあったのでしょうか><
      softbankのwebcodeは小文字になっていましたが、一応の所統一は取れているようなので、もし気づかれた所がありましたら、教えていただけるとたすかります><
      なにぶん、目grepはちょっと辛い量なので。。。

      > また、ezwebのjis-emailを指定しrestoreした際、文字集合の切り替え規則が1文字ごとになっているようですが、mb_convert_encodingと同様に行うのって大変ですか?

      不可能ではないのですが、実害はないことと、無駄に処理を増やしてもしょうがないと思い、省いています。
      auの場合にjis-emailで送信するというシチュエーションはあまりないかな?と思うので、問題はないと考えています。

      > 不正な内部文字列が指定された場合の挙動を
      > 統一して頂けると非常にありがたく思います。
      仰るとおりですね。
      内部文字は不可侵のつもりで作っていたもので、そもそもエラーが発生する可能性をろくに想定していませんでした。
      今度のバージョンアップの際にはこのあたりもきちんと見直しておきます。
    • >かめもとさん
      ご回答ありがとうございます。

      jsonデータの件ですが、
      >softbankのwebcodeは小文字になっていましたが
      すいません、まさにここです。
      コード上TODO扱いになっていましたが、
      検証作業中、UnitTestで引っかかってしまったので。

      >auの場合にjis-emailで送信するというシチュエーションはあまりないかな?と思うので、問題はないと考えています。
      確かにそうですね、こちらに関しても上記同様、
      赤信号で怒られちゃったので一応ご報告いたしました。

      >今度のバージョンアップの際にはこのあたりもきちんと見直しておきます。
      よろしくお願いいたします。
      できれば、次バージョンでは配布物にUnitTestも一緒に含めて頂けると、検証作業の手間が省けると思うのですが、無理っすか?

      また、パッチ等のcontribute受付先等を明示しといて頂けると、使用者からのフィードバックも得られるのではないでしょうか?
      是非ご検討頂ければと思います。
    • > 通りすがりではない通りすがりさん
      お返事遅くなりました。

      > 次バージョンでは配布物にUnitTestも一緒に含めて頂けると

      UnitTestはそのうち入れたいとは考えています。
      機能作る方が楽しいので、どうにも後回しになってしまいますが。。w

      むしろ、検証作業に使ったUnitTestのコードをください!とか言ってみたり(^^;

      > パッチ等のcontribute受付先等を明示しといて頂ける

      そうですね。。ほんと。
      むしろ、CodeReposなりに投げてフリーに開発できるようにしたいところです。。。
    • >かめもとさん

      >UnitTestはそのうち入れたいとは考えています。
      >機能作る方が楽しいので、どうにも後回しになってしまいますが。。w
      お気持ち分かります。。。

      >むしろ、検証作業に使ったUnitTestのコードをください!とか言ってみたり(^^;
      別に構いませんが、弊社案件に関するデータもあるので、整理してからであればお渡しできるかと思います。

      >むしろ、CodeReposなりに投げてフリーに開発できるようにしたいところです。。。
      良いアイデアですね。
      本ライブラリのようなピュアPHP5による実装は
      まだまだ少ないので、CodeRepos等から始めて
      php5への移行が上手く行っていない
      pearをアシアルさんが乗っ取る!なんてどうですか?(笑)
    • 一部修正したのでアップします。
      switch (strtolower($agent)) {
      case 'docomo':
      case 'imode':
      case 'i-mode':
      case 'emobile':
      case 'willcom':
      $agent = 'docomo';
      break;
      case 'ezweb':
      case 'au':
      case 'kddi':
      $agent = 'ezweb';
      break;
      case 'disney':
      case 'softbank':
      case 'vodafone':
      case 'jphone':
      case 'j-phone':
      $agent = 'softbank';
      break;
      default:
      $agent = 'nonmobile';
      }
    • 絵文字変換ということで、EMOBILE携帯とWILLCOMをドコモの絵文字を戻すという感じですか。。
      正しくはファイルを作成したほうがいいのでしょうけど。
    • > 通りすがりではない通りすがりさん
      おおう。。。orz
      どうもコメントは見過ごしてしまいがちですね。超遅レスすみません。。。

      ソースそのものを公開領域においてしまうと、ドラスティックな変更がしにくいという問題が生まれちゃうのが今の悩みどころです。
      それほど使われまくるライブラリでもないけどw

      今のAPIは個人的にはgdgdだと感じているので、そこだけ整理したいなぁ。。。と思う今日この頃です。

      > KuniTesujiさん
      パッチありがとうございますー。
      参考にさせていただきます<(。_。)>
    • はじめまして、Saburoといいます。

      ソースを見てて気づいたことがあったのでコメントしました。

      Common::setIntercode()において
      167行目 $this->intercodePrefix($prefix);
      168行目 $this->intercodeSuffix($suffix);
      となっていますが、正しくは
      167行目 $this->setIntercodePrefix($prefix);
      168行目 $this->setIntercodeSuffix($suffix);
      ではないでしょうか?

      使われていないメソッドのように思いましたが
      バグの元になりそうなので、とりあえずご報告まで・・・
    • >Saburoさん
      うおお。。。wこれは恥ずかしいw
      すっかり使わないメソッドだったもので、ノーチェックでした。。。orz

コメントフォーム

認証
captcha_key
 

トラックバック