2006年09月08日

みちアキ氏に嫌われた


まぁ、タイトルにそんな意味は無くて、URLに含まれる # って文字は気をつけようって話なんだが。

livedoorReader(LDR) を使うようになってから、ブックマークは相性のよい Clip!(livedoorのSBM) を使って、Plagger で del.icio.us と はてブに同期してるんだが、どうも「で、みちアキはどうするの?」ってところの記事をブクマすると、その記事だけ同期されない。他は大丈夫。

なんだよみちアキ!ブクマさせろよ!

友達でも無いのになれなれしく呼ばれる筋合いもないと思うし、そもそもみちアキ氏には何の関係もないのだが、とりあえずぶつぶつ言いながら原因を調べてみる事にした。
んでまぁ原因が # がURLに含まれているのが問題だった。かのエントリーは全て # がついている。

軽く説明すると、URL中の # のってのは結構厄介で、仕様がふにゃふにゃで扱いがサイトや言語によって違ったりする。たまに、はてブなどで # の入ってるURLブックしようとしたら、「まだブックマークされてません」みたいな画面が出ると思うんだが、それもこの問題の一環。

大まかなはてブ仕様を説明すると、新しくブクマしたいのリクエストを送るときは、生のURL (# とかついたままのアクセスできるURL)を送り、はてブのコメントを見るときは、# のみ %23 にして参照するという妙な仕様になってる。
例)
http://hogehoge.com/hoge#permalink のブクマコメントは
http://hogehoge.com/hoge%23permalink をパラメータとする。

もしかしたら、他の文字もエンコードせにゃならんのかもしれん。
Perlで URI エンコード・デコードする時のデファクトが何なのかよく分からないので、理由はよくかわからん!
Encode モジュールで変換? pack() とか unpack() で変換?

しかし、これもエンコードされたURLの中に%23が含まれてた場合、%2523 になればいいんだろうけど(%25 は % の16進)、その辺があやふや。
はてなアイデア - %23にエンコードされた # がURL中に含まれるページのブックマークを開くと、「このページはまだブックマークされていません」と表示される、また URLをクリックしても正しく開かない。

んな感じで、みちアキ氏の記事がブクマできなかったのは、ブックマーク時に投げる URL がおかしかったからっぽい。
何故か Clip! では、FEED に # が入っていた場合、RSS の link 項目がデコードされて入ってしまう。
まったく大きなお世話だ。

んでまた最悪だったのは、普通は存在しない URL で登録しようとしたら、そのまま登録できるんだが、Hatena の場合アクセスしてみてリダイレクトされたら自動的にそのページに URL を変更してくれるっぽい。それがみちアキ氏(Hatenaダイアリー)の場合は、トップページになり、同一URL になってしまって登録できないかったのだ。
(これは大きなお世話なのか、便利機能なのかよく分からないが、少なくとも勝手に指定した Permalink を変更しないほうがいい気がする)

ッつー訳で、Greasemonkey やら、Plagger やらで Feed をごちゃごちゃしたりするのはよいのだが、# がある場合も気をつけよう。

他にも色々調べようと思ったけど、Hatenaダイアリーでどうやって # 入りの URL 作るのかわからなかった!
代わりに、みちアキ氏のエントリーでテストしまくったから妙なリファラがたくさんあって、怪しまれている可能性がある。


* メモ
登録時   NotEncode   Encode                            コメント参照
Hatena OK リダイレクト先(無ければそのまま) # ⇒ %23 でアクセス
Clip! OK そのままのURLでブクマ # ⇒ %23 でアクセス
delicious OK そのままのURLでブクマ ハッシュされたURLでアクセス

#登録時のRSS->items->item->link
Hatena #のまま
Clip! %23に変換
delicious #のまま

* 参考
URI::Escape - Escape and unescape unsafe characters - search.cpan.org
JavaScriptにおけるURLエンコードの処理
RFC2396(URIの文字規定)

* 関連記事
suVeneのあれ: [Plaager]フィード内の pemalink, body 以外を書き換える時のスマートな方法は?
posted by suVene at 22:31