まぁ、タイトルにそんな意味は無くて、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 以外を書き換える時のスマートな方法は?