nDiki : JSON
JSON (JavaScript Object Notation)
メディアタイプは application/json で、拡張子は .json
JSON と Perl
Perl モジュールとしては JSON、JSON::Syck、JSON::PC などがある。
JSON
JSON は pure Perl モジュールとして実装されている。
Perl 5.005_03 では JSON-1.07 は make test で failする。
JSON::Syck
YAML-Syck パッケージに含まれている。 JSON::Syck は libsyck を用いており高速であるが、オプションが少ない。
Perl 5.005_03 では YAML-Syck-0.82 は make test で failする。
JSON::PC
JSON::PC (多くの場合)JSON::Syck より速く、かつ JSON と同じオプションが用意されている。
Makefile.PL の中で use 5.008 されている。
スポンサード リンク
Related term
WiKicker 携帯電話 メール CPAN Twitter 検索 iモード DiKicker CGI.pm JavaScript Include Plagger h2xs SpeedyCGI NaneyOrgWiki API Devel::SmallProf ExtUtils::FakeConfig Perl バージョン INI ファイル形式 nanoformats Apache License, Version 2.0 Perl で XML LWP::UserAgent 単体テストフレームワーク Search::InvertedIndex YAML Perl モジュール JsUnit AutoLoader File::Spec 開発環境
2007年4月3日 (火)
■ WiKicker に JSON でのページ出力機能を追加

最近は DiKicker ばかりに手を入れていたが、久しぶりに WiKicker の改良も行っている。 しばらく前から実装を始めていた JSON 形式での出力機能が今日完成。
今までは WikiPage について
という2つの出力形式を持っていたので、JSON が加わることで3つめとなる。
@ サーバ側で WikiPage の構文解析まではやる
クライアントサイドの JavaScript でページの内容に合わせて様々な処理をできるように、サーバ側で構文解析まではしてあげるというのが主な目的。
JavaScript でまたパーサを書いてメンテしていくのも大変なので、その部分はサーバでやってしまおうかと。 構文解析した結果の解析木を JSON 形式で返して、JavaScript 側であとはお好きにという形。
@ CPAN にある JSON モジュールを使用
サーバ側の Perl プログラムには、構文解析をして解析木を作れるようになっている。 この解析木から Visitor パターンで JSON 形式を生成していく。
依存モジュールを増やすことを避けるべく、最初は自前で JSON 形式に変換していこうと思ったのだがやっぱり面倒だった。 ということで CPAN にあるモジュールをチョイス。
JSON 関連では JSON、JSON::Syck、JSON::PC などがあるが今回はインストールのしやすさを考えて pure Perl モジュールとして実装されている JSON を採用することにした。
Visitor クラスで解析木を無名ハッシュ/無名配列のツリーに変換して、JSON モジュールに流しこめば OK。
use JSON; my $json = JSON->new(pretty => 1); my $js = $json->objToJson($tree);
WiKicker のフレームワークにはフォーマット別に出力を切り換える機構があるので、これに JSON を追加して application/json で送るようにして完成。
ちなみに残念ながら JSON 1.07 は Perl 5.005_03 では make test が fail するので、NaneyOrgWiki では使えない。
- Rubric でプライベート SBS を立てるも 0.140 では日本語に不具合 (2006-07-22)
- WiKicker の Makefile.PL を Module::Inst... (2006-02-10)
- [ WiKicker ] 「最近のアクセスログ」処理思案 (2004-01-17)
- [ WiKicker ] hell mode - HTMLタグ付けブロックの導入 (2005-09-13)
- www.naney.org をさくらのレンタルサーバへ移転 (2009-12-23)
2007年4月7日 (土)
■ 携帯電話(iモード)から Twitter を更新する

Twitter をいろいろ遊んでみて「やはり携帯電話から更新できないと」と思えてきた。
携帯電話からメールを送る事で Twitter にアップデートをかけてくれるゲートウェイを設置できれば一番いいのだけれど、そのようなメールアドレスを作る場所が今はない(さすがに会社のサーバはまずい)。
ということでiモードから更新をかけられるように短い CGI プログラムを書くことにした。 CPAN には Net::Twitter という Perl モジュールがあるのだが、JSON::Any (と JSON::XS / JSON / JSON::DWIW / JSON::Syck のどれか)が必要で、ちょっと大げさなので今回は使用は見送り。 普通に CGI.pm と LWP::UserAgent で書いた。
#!/usr/bin/perl -w
use 5.005_03;
use strict;
use CGI qw(-no_xhtml);
use Jcode;
use LWP::UserAgent;
my $query = CGI->new;
my $user_name = $query->param('u');
my $password = $query->param('p');
my $status = $query->param('s');
$user_name = '' unless defined $user_name;
$password = '' unless defined $password;
$status = '' unless defined $status;
my $message = '';
if ($user_name ne '' && $password ne '' && $status ne '') {
my $ua = LWP::UserAgent->new;
Jcode::convert(\$status, 'utf8', 'sjis');
$ua->credentials('twitter.com:80', 'Twitter API', $user_name, $password);
my $request = $ua->post('http://twitter.com/statuses/update.json',
{status => $status . ' '});
if ($request->is_success) {
$message = '<p>OK</p>';
}
}
print $query->header(-type => 'text/html', -charset => '');
print '<html><head><title>Twitter update</title></title><body>';
print '<form method="post" action="twitter">';
print 'ユーザ名:', $query->textfield('u'), '<br>';
print 'パスワード:', $query->password_field('p'), '<br>';
print 'ステータス:', $query->textfield('s'), '<br>';
print '<input type="submit">';
print '</form>';
print $message;
print '</body></html>';
とりあえずこれで、iモードから送信できることを確認。 パスワードの入力が面倒だけれども、サーバ側に書いておくのも嫌なので毎回送ることにした。FOMA 端末側には定型文として保存しておく以外にいい手はないのかな。
最初うまく送れなくてなんだろうと思ったが、あきやん氏の「Twitterで日本語を入力する方法 (akiyan.com)」の記事にある
- 全て全角文字で入力して、最後に半角スペースをいれる
- 半角全角を混在させるときは、半角文字と全角文字の間にスペースをいれる
といった日本語を入力する際の注意点がらみだったようである。 とりあえず CGI プログラムの方で最後に必ずいわゆる半角空白を追加するようにしておいた。
文字数チェックとか Twitter API の返り値チェックとか、改善すべきところはいろいろあるけれど、自分用にはまずこれでいいかな。
気が向いた時に外出先から更新かけます。
- 携帯電話からの Twitter 投稿に tmitter を使ってみることにした (2007-07-26)
- Plagger で Twitter のあれこれをメールで通知 (2008-12-25)
- 今日のさえずり - くるぴかポッチャマ廻しにくい (2009-12-27)
- ケータイ用にプライベート Wiki を設置 (2008-01-07)
- MAILPIA による Twitter リプライチェック (2008-11-18)
2007年5月30日 (水)
■ WiKicker 0.420 リリース - 変更いろいろ

去年の12月3日以来、約半年ぶりのリリース。 リリースしそびれて、随分変更を累積してしまった。 以下主な変更点。
@ バージョン番号形式を変更
前回の 0.41 に対して、今回は 0.420 とした。 浮動小数点数的には、増分 0.01 で今まで通り。
今後 version.pm が普及した時のことと、developer release を出す時のことを考えて小数点以下3桁ずつのスタイルに移行することにした (関連記事)。
@ <meta name="robots" content="noindex,nofollow">
2007年1月に実装。 編集ページや履歴ページが検索エンジンに登録されないようにするための機能。
@ <a rel="nofollow">
2007年1月に実装。 リンク spam 対応。
@ AutomaticLink 長を可変にした
2007年3月に実装。 特に DiKicker で1文字キーワードによる自動リンクを有効にするために追加した。
@ '/' の前を省略した自動リンクを有効にするか無効にするかを設定できるように
前述の機能で1文字での自動リンクを有効にしたら、不便な面が出た。
WiKicker / DiKicker では '/' を階層の区切り文字としても扱うことができるようになっていて、サフィックス部分だけでも自動リンクするようになっている。 自動リンクを1文字にしたら「OS/2」というキーワードに対して '2' でも自動リンクが働き、望まないリンクが張られるようになってしまった。 DiKicker では階層的キーワードは無くてもあまり困らないので、'/' の前を省略した自動リンクを無効にできるようにした。
@ JSON 形式データ出力
@ (DiKicker) はてなブックマーク数表示機能を追加
@ (DiKicker) はてなブックマークエントリーページへのボタン表示機能を追加
@ (DiKicker) grep 検索機能を追加
2007年2月に実装。自分としては重宝している。
@ (DiKicker) キーワード記事の下部への文字列挿入機能
Google AdSense 挿入用。
@ (DiKicker) サーバの負荷が高くなったら 503 を返して沈静化を待つようにした
2007年4月に実装 load average をチェックして負荷が高い時は、503 を返すようにした。
@ 内部コードの結構な書き換え
ソースコードを結構いじった。 deprecated なメソッドの削除も実施したので、0.41 以前から派生しているソフトウェアは多くの場合修正が必要。
- DiKicker に grep 検索機能を追加 (2007-02-02)
- WiKicker / DiKicker の AutomaticLink 長... (2007-03-01)
- howm で nDiki の記事も検索対象にする (2006-04-02)
- 社内 Blog 開設 (2006-05-16)
- 私的10大ニュース2004 [ web ] (2004-12-31)
■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザイン ビックカメラProcess Time: 0.179081s / load averages: 0.08, 0.14, 0.15
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)




◇ Twitter やってます。この記事が気にいったらぜひ twitter.com/Naney の follower になってください。