トップ(最新)

nDiki : JSON

JSON (JavaScript Object Notation)

RFC4627

メディアタイプは application/json で、拡張子は .json

JSONPerl

Perl モジュールとしては JSONJSON::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

2007年4月3日 (火)

WiKickerJSON でのページ出力機能を追加 このエントリーを含むはてなブックマーク

最近は DiKicker ばかりに手を入れていたが、久しぶりに WiKicker の改良も行っている。 しばらく前から実装を始めていた JSON 形式での出力機能が今日完成。

今までは WikiPage について

  • HTML 形式による出力
  • Wiki 文法で書かれている生テキスト形式による出力

という2つの出力形式を持っていたので、JSON が加わることで3つめとなる。

@ サーバ側で WikiPage の構文解析まではやる

クライアントサイドの JavaScript でページの内容に合わせて様々な処理をできるように、サーバ側で構文解析まではしてあげるというのが主な目的。

JavaScript でまたパーサを書いてメンテしていくのも大変なので、その部分はサーバでやってしまおうかと。 構文解析した結果の解析木を JSON 形式で返して、JavaScript 側であとはお好きにという形。

@ CPAN にある JSON モジュールを使用

サーバ側の Perl プログラムには、構文解析をして解析木を作れるようになっている。 この解析木から Visitor パターンで JSON 形式を生成していく。

依存モジュールを増やすことを避けるべく、最初は自前で JSON 形式に変換していこうと思ったのだがやっぱり面倒だった。 ということで CPAN にあるモジュールをチョイス。

JSON 関連では JSONJSON::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 では使えない。

スポンサード リンク


[ 4月3日全て ]

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 の返り値チェックとか、改善すべきところはいろいろあるけれど、自分用にはまずこれでいいかな。

気が向いた時に外出先から更新かけます。


[ 4月7日全て ]

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 形式データ出力

2007年4月に実装

@ (DiKicker) はてなブックマーク数表示機能を追加

2007年1月に実装

@ (DiKicker) はてなブックマークエントリーページへのボタン表示機能を追加

2007年1月に実装

@ (DiKicker) grep 検索機能を追加

2007年2月に実装。自分としては重宝している。

@ (DiKicker) キーワード記事の下部への文字列挿入機能

Google AdSense 挿入用。

@ (DiKicker) サーバの負荷が高くなったら 503 を返して沈静化を待つようにした

2007年4月に実装 load average をチェックして負荷が高い時は、503 を返すようにした。

@ 内部コードの結構な書き換え

ソースコードを結構いじった。 deprecated なメソッドの削除も実施したので、0.41 以前から派生しているソフトウェアは多くの場合修正が必要。


[ 5月30日全て ]

スポンサード リンク

Related web page

【駄文】JSON における RFC 以前と以後。 - TokuLog 改めB日記
<strong>JSON</strong> の RFC は、<strong>JSON</strong> が普及してから出ています。 perl でいうと <strong>JSON</strong>::Syck は RFC より前にでている。 <strong>JSON</strong>::XS は RFC の後 準拠具合も出た時期に依存(maybe)。 なので、<strong>JSON</strong> feed みたいなのを出している Web API を利用するような場合、サーバ側が RFC 以前のライブラリをつかっている場合は <strong>JSON</strong>::Syck の方が parse error 起きにくかったりする場合があります。 とはいえ、option 指定すれば、<strong>JSON</strong>::XS
http://d.hatena.ne.jp/tokuhirom/20080808/1218154305
[Perl] JSON モジュールの utf8 フラグ周りの仕様 tips 注意点 Kawa.netブログ(川崎有亮)/ウェブリブログ
Perl の <strong>JSON</strong> モジュールで日本語を含む文字列を扱う際の tips。 [Perl] <strong>JSON</strong> モジュール 2.x 系は、1.x 系と互換性が△ の記事で、<strong>JSON</strong>::XS モジュールとの互換性(ソース&ドキュメントも!)を実現した代わりに従来の <strong>JSON</strong>.pm のインターフェースが obsolete になってしまうのは残念。今後、<strong>JSON</strong>.pm は XS 版の <strong>JSON</strong>::XS とほぼ同機能の Pure Perl 版の <strong>JSON</strong>::PP のいずれかを自動選択してくれ...
http://kawa.at.webry.info/200801/article_6.html
IBM Ajax をマスターする、第 10 回: JSON を使用したデータ転送 - Japan
非同期アプリケーションで情報の送受信に使用できるデータ・フォーマットにはプレーン・テキストと XML がありますが、連載「Ajax をマスターする」の今回の記事で紹介するのはもう 1 つの便利なデータ・フォーマット、<strong>JSON</strong> (JavaScript Object Notation) です。<strong>JSON</strong> がアプリケーションでのデータやオブジェクトの移動をさらに簡単にする仕組みを説明します。 この連載をずっと読んでい
http://www-06.ibm.com/jp/developerworks/web/library/wa-ajaxintro10/index.shtml?ca=drs-
Collection & Copy - [翻訳]JSON in JavaScript
原文:<strong>JSON</strong> in JavaScript JavaScriptは、 Netscape Navigator用のページスクリプト言語として広まった汎用のプログラミング言語です。Javaのサブセットであると広く信じられていますが、それは違います。Cのような構文とソフトオブジェクトをもつSchemeに類似した言語です。JavaScriptは、ECMAスクリプト言語仕様-第3版で標準化されました。 <strong>JSON</strong>の表記法は、JavaScriptのリテラルオブジェクトの表
http://d.hatena.ne.jp/brazil/20050915/1126717649

■よく検索されるキーワード

torrent(56) 提案書(47) perl(45) windows(37) linux(31) 使い方(27) 書き方(25) debian(22) x31(22) usb(22) cvs(20) subversion(20) インストール(18) ドラマ(18) c#(17) mp980(17) svn(17) 修理(17) 手帳(16) ssh(15) 評判(15) アジェンダ(15) java(15) デロンギ(14) ガントチャート(13) 感想(13) n-01a(13) centos(13) tc-1(13) 充電式カイロ(13) ノート(12) ダイソー(12) thinkpad(12) rcs(12) f-01a(12) ヤマダ電機(12) ganttproject(12) 無印(11) ppm(11) レビュー(11) カイロ(11) 壁紙(11) 静電気(10) 動画(10) バッグインバッグ(10) ヨドバシカメラ(10) サンプル(10) アジェンダとは(10) wiki(10) ミノルタ(10) グッズ(10) 作り方(10) tortoisesvn(10) firefox(9) so905ics(9) memcached(9) 画像(9) gmail(9) ハクキンカイロ(9) 口コミ(9) a6(9) sh-01a(9) 冷蔵庫(9) ほぼ日手帳(9) mp3(8) emacs(8) 日本語(8) openssh(8) xampp(8) カメラ(8) nikon(8) 設定(8) 写真(8) 値段(7) flash(7) 方眼(7) web(7) docomo(7) カバー(7) リポジトリ(7)

この日記のはてなブックマーク数 Add to Google RSS

Process Time: 3.041441s / load averages: 0.14, 0.41, 0.44
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)