2005-11-22 (Tue)

* Visual Studio ユーザーグループ フォーラムの OPML

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS] [.net] [C#]

先日、Visual Studio のユーザーグループ VSUG が発足した。

Visual Studio User Group > ホーム
http://vsug.jp/

vsug.jp にはユーザーが投稿できるフォーラムと呼ばれる掲示板があり、RSS も提供されている。しかし、それらを一気に RSS リーダーに登録する簡単な方法がない。RSS Auto Discovary もないし、OPML もない。

手軽に登録したいので OPML を作った。以下をファイル名 opml.xml などとして文字コード UTF-8 で保存し、OPML 対応の RSS リーダーに読ませればすべてのフォーラムを一気に購読できる。

<?xml version="1.0"?>
<opml version="1.1">
<head>
  <title>Planet .NET Japan</title>
  <dateCreated>Tue, 22 Nov 2005 15:18:02 +0000</dateCreated>
  <dateModified>Tue, 22 Nov 2005 15:18:02 +0000</dateModified>
  <ownerName>Saito Hiroaki</ownerName>
  <ownerEmail><img src="http://sonic64.com/img/mail.png" /></ownerEmail>
</head>

<body>
  <outline text="VSUG - .NET Framework" title="VSUG - .NET Framework" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=51&amp;nossl=x"/>
  <outline text="VSUG - Office 開発・VSTO" title="VSUG - Office 開発・VSTO" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=54&amp;nossl=x"/>
  <outline text="VSUG - VSUGからのお知らせ" title="VSUG - VSUGからのお知らせ" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=70&amp;nossl=x"/>
  <outline text="VSUG - Visual Basic" title="VSUG - Visual Basic" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=44&amp;nossl=x"/>
  <outline text="VSUG - Visual C#" title="VSUG - Visual C#" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=45&amp;nossl=x"/>
  <outline text="VSUG - Visual C++/CLI その他" title="VSUG - Visual C++/CLI その他" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=46&amp;nossl=x"/>
  <outline text="VSUG - Visual Studio 2005" title="VSUG - Visual Studio 2005" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=42&amp;nossl=x"/>
  <outline text="VSUG - Visual Studio 旧環境" title="VSUG - Visual Studio 旧環境" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=43&amp;nossl=x"/>
  <outline text="VSUG - Web アプリケーション" title="VSUG - Web アプリケーション" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=47&amp;nossl=x"/>
  <outline text="VSUG - Web ホスティングアプリケーション" title="VSUG - Web ホスティングアプリケーション" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=55&amp;nossl=x"/>
  <outline text="VSUG - データベース・データアクセス" title="VSUG - データベース・データアクセス" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=49&amp;nossl=x"/>
  <outline text="VSUG - マイグレーション・COM 相互運用" title="VSUG - マイグレーション・COM 相互運用" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=53&amp;nossl=x"/>
  <outline text="VSUG - モバイル・スマートクライアント" title="VSUG - モバイル・スマートクライアント" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=50&amp;nossl=x"/>
  <outline text="VSUG - ライティング・セキュアコード" title="VSUG - ライティング・セキュアコード" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=56&amp;nossl=x"/>
  <outline text="VSUG - リッチクライアント・UI コントロール" title="VSUG - リッチクライアント・UI コントロール" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=48&amp;nossl=x"/>
  <outline text="VSUG - 談話室" title="VSUG - 談話室" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=58&amp;nossl=x"/>
  <outline text="VSUG - 運用管理" title="VSUG - 運用管理" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=57&amp;nossl=x"/>
  <outline text="VSUG - 開発プロセス" title="VSUG - 開発プロセス" type="rss" xmlUrl="http://vsug.jp/Rss/GetRss.aspx?forumid=52&amp;nossl=x"/>
</body>
</opml>

VSUG に投稿しておいた。

Visual Studio User Group > フォーラム > VSUG フォーラム RSS の OPML を作りました
http://vsug.jp/tabid/63/forumid/58/postid/479/view/topic/Def ...

2005-11-02 (Wed)

* sonic64.com の転送量の80%が RSS

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [sonic64.com] [Apache] [ネットワーク] [RSS]

当サイト Landscape が infoseek isweb から移転して sonic64.com を使うようになってから、1か月ほど経った。というわけでアクセスログを見てみる。

- Landscape - エンジニアのメモ 2005年10月のアクセス

総ページビューとか、人気のあったページとかはまあどうでもいいんだけど、いちおうメモ。ページビューは372969。約37万。Webalizer によるページビューなので、今までとはカウント方法が異なっている可能性はある。

月間総転送量は 63557488KB。約60GB、一日あたり2GBというところか。なんだか減ってる気がする。旧サイトを置いていた infoseek isweb では、多いときで一日5GB、少ないときで1GBくらいだったと思う。平均すると一日あたり 3GB から 4GB くらいだったかな。移転後に転送量が減ってる理由は、移転に伴って検索エンジンの順位が下がったりとか、あとは 2005-09-15 の「mod_rewrite でリクエストに応じて gzip 圧縮ファイルを返す」などの効果のためだろう。

- sonic64.com の転送量の80%が RSS

興味深かったのが、転送量の内訳。infoseek ではこういう統計は提供されなかったし、httpd の生のアクセスログも提供されなかったので調べられなかったけど、今は生ログがもらえるので解析できた。

解析の結果、転送量のほとんどが http://sonic64.com/cl-full.xml に集中してることがわかった。60GB の転送量のうち、50816191KB、すなわち 50GB 程度がこの RSS の転送のために使われていた。cl-full.xml は「すべての記事全文を含む RSS」 なので、サイズが大きいのは仕方がないが、それが sonic64.com の転送量の約80%を占めているとは、ちょっと意外だった。20%80%のパレートの法則を超えるような状態だ。

ちなみに、トップページ http://sonic64.com/ の月間転送量は 471425KB で、471MB。全体に占める割合はたったの 0.74%。まあ、こんなものでしょ。

月間60GBという転送量は、私の見積もりの範囲内なのでまったく問題ない。必要ならどんどんアクセスしてほしい。全体の転送量の80%が RSS というのはちょっと意外だったのだけど。infoseek からの移転先としてさくらインターネットを選んだ理由の一つは、転送量制限の値が高めで余裕があるからだ。

- HTTP リクエストヘッダ Accept-Encoding: gzip をちゃんと送ってる?

気になるのは、http://sonic64.com/cl-full.xml へアクセスするときに、HTTP リクエストヘッダ Accept-Encoding: gzip を送ってないクライアントが多いんじゃないかということ。

cl-full.xml は今日現在 4MB 弱のサイズがあるが、Accept-Encoding: gzip をつけて送れば900KB くらいに圧縮されたデータがサーバから返される。そのために 2005-09-15 の「mod_rewrite でリクエストに応じて gzip 圧縮ファイルを返す」などの仕組みを取り入れたんだけど、それが使われてなかったとしたら残念だ。無駄は嫌いなんだ。無駄、無駄、と。昨日のアクセスログを grep して調べてみる。

grep 'GET /cl-full.xml' ~/log/access_log_`date +%Y%m%d` |grep ' 200 '

上記のようにして 200 OK で完結したリクエストのログをざーっと眺めてみる。うん、以下の Mozilla Thunderbird は圧縮された cl-full.xml を取ってきてるね。返された cl-full.xml のサイズが 942606 バイトになってる。

"GET /cl-full.xml HTTP/1.1" 200 942606 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP; rv:1.7.10) Gecko/20050716 Thunderbird/1.0.6"

一方、 Accept-Encoding: gzip をリクエストにつけていないため、圧縮してないデータを返されたクライアントも結構あった。とくに、ロボットや Web 型 RSS リーダーのクローラーにこの傾向が強いように感じる。

"GET /cl-full.xml HTTP/1.1" 200 4147427 "-" "Mozilla/4.0 (compatible; Google Desktop)"

以下、UserAgent 名だけ列挙。

InfoSeek RssReader/0.1"
FEEDBRINGER/0.1 (http://feedbringer.net/; 10 subscribers)"
Google Desktop
blogWatcher_crawler/0.2
Accelatech RSSCrawler/0.4
HepCat: http://www.witha.jp/
Hatena RSS/0.2 (http://r.hatena.ne.jp; 7 subscribers)
cococ/1.04
gooRSSreader2/2.0-build 20050818 (based on glucose)
Headline-Reader [t] (http://www.infomaker.jp/)

Bloglines はちゃんと Accept-Encoding: gzip をつけてリクエストしてる。さすがだね。

- Accept-Encoding: gzip なしのリクエストは mod_rewrite でリダイレクト

今のところ転送量にはまだ余裕がある。Accept-Encoding: gzip なしのリクエストを、圧縮しなきゃダメと 403 Forbidden で追い返したり、問答無用で圧縮したファイルを返すようなことはしたくない。でも、今時の HTTP クライアントなら Accept-Encoding: gzip くらい送ってきて欲しい。一般的なクライアント型 RSS リーダーだと、ファイアウォールソフトや proxy によって Accept-Encoding: gzip を削除されてしまうことがあるようだけど、ロボット系はそんなこともないだろうしなあ。

そうだ。Accept-Encoding: gzip を送ってきてないクライアントは、HTTP 302 Moved Temporarily で RSS 広告社の Trend Match の RSS http://rss.rssad.jp/rss/qArzgZHGLg5Z/rss_0002 にリダイレクトするようにしよう。Trend Match から 返される RSS は gzip 圧縮がかかってないから、問答無用で圧縮したファイルを返すよりもずっといい。

2005-10-12 の「RSS広告社の広告プログラム Trend Match に参加」で書いたように、http://rss.rssad.jp/rss/qArzgZHGLg5Z/rss_0002 にアクセすると、Internal Server Error になってしまっていた。その後、2005-10-26 の「RSS広告社の Trend Match の RSS サイズ制限が緩和された?」で、エラーにならずにアクセスできるようになったのを確認した。正式対応のアナウンスはまだ無いが、いまのところ問題がない。そのうち cl-full.xml への全リクエストをリダイレクトしようかと思っていた。でもやっぱりいきなり全リクエストをリダイレクトするのは不安なので、まず一部だけでテストしたいところ。Accept-Encoding: gzip を送ってきてないリクエストにそのテスターになってもらうことにしよう。

さっそく mod_rewrite の RewriteRule を書こう。

RewriteCond %{REQUEST_URI} cl-full\.xml(\.gz)?$
RewriteCond %{HTTP:Accept-Encoding} !gzip
RewriteRule .+ http://rss.rssad.jp/rss/qArzgZHGLg5Z/rss_0002 [L,R]

できた。これを .htaccess に設定して、Firefox と LiveHttpHeaders の HTTP リクエストリプレイ機能で、Accept-Encoding: gzip があるリクエストと、ないリクエストの両方でテスト。よし、OK だ。これで全員が幸せになれるね。Win-Win-Win だ。

2005-10-26 (Wed)

* RSS広告社の Trend Match の RSS サイズ制限が緩和された?

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS]

2005-10-12 の「RSS広告社の広告プログラム Trend Match に参加」の続き。http://sonic64.com/cl-full.xml の広告入りバージョン http://rss.rssad.jp/rss/qArzgZHGLg5Z/rss_0002 にアクセスすると、HTTP 500 Internal Server Error になってしまう件の回答を頂いた。回答のメールは10月14日の夜に送られてきていた。質問メールを送ったのは10月12日の朝。待たされた感じはなかった。

「Trend Match」カスタマーサポートセンターです。
平素より「Trend Match」をご利用いただきましてありがとうございます。

下記の件につきまして調査を致しましたので、ご報告いたします。

弊社システムにおいて、読み込むRSSのファイルサイズについて、
上限値については正確な値はお答えできませんが、10KB程度を想定しており
ました。
一方、ご登録いただいた斎藤様のサイトのRSSのサイズは約4MBと、
著しく乖離しております。
これが原因となり、正常に読み込むことができなかったようです。

つきましては、現状のままでは読み込むことができませんので、
RSS内に入れる文章量をご調整いただき、再度ご設置いただければ
幸いです。

弊社においても、今後システムのバージョンアップにより、
徐々に対応範囲を広げて参りたいと思いますので、
何卒ご理解のほどよろしくお願いいたします。

想定外なら仕方ない。4MB というサイズは RSS としては大きめだし。全記事全文入り RSS に広告を設定するのは諦めよう。ちなみに、全記事全文入りの RSS はアーカイブとして使ったり、これを使ってなにか面白いことをやる人が出てくるんじゃないかと思って公開しているもの。実用だけを目的としているものではない。当サイト Landscape の最新の記事をチェックするだけなら、直近7日分の RSS http://sonic64.com/cl.xml を使えば事足りる。

ただ、エラーで落ちてしまうのはまずいと思う。システムとしては、RSS 登録時にサイズをチェックして処理対象外の RSS ならばエラーを表示するようにすると、より良いシステムになるんじゃないかな。

- アクセスできた

今日たまたま http://rss.rssad.jp/rss/qArzgZHGLg5Z/rss_0002 にアクセスしてみたら、HTTP 500 Internal Server Error にはならずに RSS が返された。ただ、返された RSS には広告が一切入っていない。内容も妙に古く、10月19日頃のものだ。一週間遅れの RSS って、三日前の古新聞どころじゃないぞ。うーん、これだとやっぱり全記事全文の RSS へのリクエストを rssad.jp にリダイレクトするわけにはいかないな。

http://rss.rssad.jp/rss/qArzgZHGLg5Z/rss_0002

GET /rss/qArzgZHGLg5Z/rss_0002 HTTP/1.1
Host: rss.rssad.jp
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP; rv:1.7.12) Gecko/20050919 Firefox/1.0.7
Accept: text/xml,application/xml,application/xhtml+xml,text/html; q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

HTTP/1.x 200 OK
Date: Wed, 26 Oct 2005 13:36:05 GMT
Server: Apache/2.0.52 (CentOS)
Content-Length: 4111104
Connection: close
Content-Type: text/xml

正式に対応した旨のアナウンスがあったわけじゃないし、単にエラーを出なくする対応をしたんだろうな。500 Internal Server Error とかだと監視系にイベントが上がって来ちゃうだろうし、本当の障害に気づきにくくなるからね。

2005-10-12 (Wed)

* RSS広告社の広告プログラム Trend Match に参加

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [sonic64.com] [RSS]

RSS広告社の広告プログラム Trend Match に参加した。

RSS広告社
https://www.rssad.jp/mp/

- RSS広告社の RSS 広告の仕組み

RSS広告社にアカウントを申し込み、サイトの審査に通過すると、自分の RSS を登録することができる。登録すると広告の入った RSS の URL を発行してもらえるので、それを自分のページの RSS として使うという流れ。

RSS は blog や CMS (Content Management System) の普及のおかげで多くのサイトで配布されるようになった。しかし、RSS広告社のシステムの場合、RSS の URL を自由に変更したり、HTML テンプレートを柔軟に変更できる環境にない場合は、導入が難しいかもしれない。とくに、一般の無料 blog サービスの場合、広告入りの RSS を広報するには、ほぼ不可能だと思う。システム側のサポートが不可欠だ。

- RSS広告社への申し込み

私のサイトくらいの規模だと収益が上がるかどうかは疑問だが、とりえあえずやってみることにする。レンタルサーバとドメインを維持する費用の足しになればいいな。

RSS広告社の個人向けページ https://www.rssad.jp/mp/ からアカウントを申し込む。審査は非常に迅速で、私の場合は一日くらいで審査通過の連絡が届いた。その後管理画面で RSS を登録して、広告入り RSS の URL を発行してもらう。私の場合、http://sonic64.com/cl.xml の広告入り URL として http://rss.rssad.jp/rss/qArzgZHGLg5Z/rss_0003 を割り当てられた。

- 広告の入った RSS へのリダイレクト

あとは、http://sonic64.com/cl.xml ではなく、広告の入った URL である http://rss.rssad.jp/rss/qArzgZHGLg5Z/rss_0003 にアクセスしてもらうようにするだけだ。2005-09-12 の「Landscape - エンジニアのメモは sonic64.com に移転しました」では、サーバの管理権が全くないので HTTP のリダイレクトを使えなかった。そのせいで URL の変更には多大な手間がかかってしまった。しかし、今は管理権付きのサービスを利用しているので、リダイレクトなどは自由に使える。Bloglines などの RSS リーダーで購読しているユーザーに手間をかけさせることがなくなり、非常に喜ばしい。

リダイレクトするための mod_rewrite の RewriteRule を書いた。

RewriteRule cl\.xml(\.gz)?$ http://rss.rssad.jp/rss/qArzgZHGLg5Z/rss_0003 [R,L]

あんまり凝ったことはせずに、cl.xml または cl.xml.gz にアクセスされたら、http://rss.rssad.jp/rss/qArzgZHGLg5Z/rss_0003 に HTTP 302 Moved Temporarily でリダイレクトしているだけ。ちなみに、cl.xml.gz は 2005-09-15 の「mod_rewrite でリクエストに応じて gzip 圧縮ファイルを返す」で設定した gzip 圧縮を施したファイル。cl.xml と中身は同じ。

これで良し。・・・と思ったけど、この程度なら mod_rewrite なんか使わなくても Redirect や RedirectMatch で十分だ。なんでわざわざ mod_rewrite を使おうとしたんだろう?

RedirectMatch cl\.xml(\.gz)?$ http://rss.rssad.jp/rss/qArzgZHGLg5Z/rss_0003

よしよし、これでいいね。あとは RSS広告社のクローラーが RSS を取りに来てくれれば OK。・・・と思ったけど、上記のリダイレクトには間違いがある。上記のルールだけだと RSSad のクローラーが最新の RSS を取りに来ても、必ず http://rss.rssad.jp/rss/qArzgZHGLg5Z/rss_0003 にリダイレクトされてしまう。

これじゃいつまで経っても RSS が更新されない。何らかの方法でRSS広告社からのアクセスを判別して、RSS広告社からのアクセスだったときのみ最新の RSS を返し、それ以外のアクセスは http://rss.rssad.jp/rss/qArzgZHGLg5Z/rss_0003 にリダイレクトする必要がある。

RSS広告社からのアクセスをどうやって判別しよう? UserAgent も IP アドレスもわからないんだよな。仕方がない、別の http://sonic64.com/cl.xml とは別の URL で RSS を置いて、それを RSS広告社に登録しよう。で、http://sonic64.com/cl.xml は常に 302 Moved Temporarily を返してリダイレクトするようにしよう。サーバ上で cl.xml にシンボリックリンクを張れば簡単に実現できるね。

- 過去の全記事の全文を収録した RSS にアクセスすると Internal Server Error

当サイト Landscape は 過去の全記事の全文を収録した RSS http://sonic64.com/cl-full.xml も配布している。これもRSS広告社に登録しておこう。

登録し、割り当てられた URL http://rss.rssad.jp/rss/qArzgZHGLg5Z/rss_0002 にテストのためにアクセスすると HTTP 500 Internal Server Error となってしまった。Tomcat から The server encountered an internal error () that prevented it from fulfilling this request. というエラーメッセージが出力されている。あ、RSS広告社のシステムは Java なんだね。

過去の全記事の全文を収録した RSS http://sonic64.com/cl-full.xml はサイズが 4MB 弱と大きめなので、それが原因かな。それとも、過去の記事の中に存在する半角カナや機種依存文字が悪さをしてるのかな? 私が推測しても仕方がないので、サポートに質問メールを送ることにする。

株式会社RSS広告社 サポート担当者様

Trend Match ユーザーの斎藤と申します。
お世話になっております。

広告導入をの手続きをおこない、RSS の URL を割り当てられましたが、
アクセスすると 500 Internal Server Error  になってしまいます。

URL は http://rss.rssad.jp/rss/qArzgZHGLg5Z/rss_0002 で、
私が作成している RSS は http://sonic64.com/cl-full.xml です。
RSS のサイズが大きいことが原因でしょうか?

HTTTP トランザクションの内容を付記します。

GET /rss/qArzgZHGLg5Z/rss_0002 HTTP/1.1
Host: rss.rssad.jp
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP; rv:1.7.12)
Gecko/20050919 Firefox/1.0.7
Accept: text/xml,application/xml,application/xhtml+xml,text/html;
q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

HTTP/1.x 500 Internal Server Error
Date: Tue, 11 Oct 2005 22:43:25 GMT
Server: Apache/2.0.52 (CentOS)
Content-Length: 1023
Connection: close
Content-Type: text/html;charset=utf-8

以上、よろしくお願いいたします。

上記メールをサポートに送信した。あ、よく見ると HTTP が HTTTP になってたり、誤字があったりするな。恥ずかしい。あわただしい時間帯に送信したメールなので、読み返さなかったのが災いしたなあ。しかも、今 FAQ のページを見ていたら、質問用のテンプレートが用意されてるじゃん。完全に無視して質問メールを投げてしまった。エンジニアとして恥ずかしい。

よくある質問
https://www.rssad.jp/mp/faq.html#f41
41.メールで問合せをしたいのですが・・・

FAQをご覧頂いた上で、それでもおわかりにならない場合のみ、以下に注意してメールをお送り下さい。

(1)アカウント取得前・取得後で、お問い合わせ先メールアドレスが異なります。

●アカウント申請前のご質問(ご登録に関するご質問・審査報告の遅延など)
問い合わせ先:rss-support@rssad.jp

●アカウント取得後のご質問(広告挿入の手順・お支払い状況・登録内容/銀行口座の変更・退会処理など)
問い合わせ先:rss-adhelp@rssad.jp

(2)お問い合わせの際、お客様のご質問に迅速に対応させて頂くため、本文に以下のフォーマットを記入してお送り下さい。

1.【氏名】
2.【サイトURL】
3.【E-mail】(アカウントをお持ちの方は登録時のE-mail)
4.【お使いのブログサービス会社】Livedoor Blog、ココログ、Excite Blog 等
5.【利用ブラウザ】IE6.0、firefox、Netscape、Sleipneir等
6.【質問ジャンル】登録申請・審査報告の遅延・広告挿入・レポート・お支払い・支払い状況・登録内容/銀行口座の変更・退会・その他 (うち一つをお選び下さい)
7.【詳しい質問内容】

テンプレートを完全に無視した質問メールだったが、ちゃんと返事をくれた。調査してくれるとのこと。回答待ちだな。

斎藤様

お問い合わせありがとうございます。
「Trend Match」カスタマーサポートセンターと申します。

現在、本件に関しては、技術部門で原因を追求中です。
斎藤様のご指摘のとおり、RSSのサイズが大きいことが原因である
可能性が高いと思われます。

早急に調査し、ご連絡申し上げますので、
ご迷惑をおかけ致しますが、今しばらくお待ちください。

何卒よろしくお願いいたします。

2005-09-23 (Fri)

* 「bloglinesスパム」はできるけど、ユーザへの恩恵もある

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS]

以下の指摘への考察。

kokepiの日記 - 「bloglinesスパム」ができる
http://d.hatena.ne.jp/kokepi/20050921/1127303066
bloglinesやmyYahooのツールバー、ブックマークレット等をから、「このページを追加」みたいな機能を使うと、サイトのRSSフィード登録画面に、第三者のフィードが表示されることがある。

確かに「bloglinesスパム」はできますが、明確なスパム行為でない場合はユーザへの恩恵もあります。現状では指摘の問題をはらんでいますが、RSS リーダー提供側はちょっと仕様を変えるだけで、ユーザをはじめ皆に恩恵があるようにできます。RSS リーダー提供側は頑張って欲しいところです。

- 一概に悪い仕様とはいえない

私の言いたいことは以下の3点。

この機能は利点もあり、一概に悪い仕様とは言い切れない。
RSS の URL を直指定させる登録 URL なら、他の RSS が紛れ込むことはない。
Bloglines や Yahoo などの RSS リーダー提供側は、公式 RSS の表示順位を上げて最優先扱いにして欲しい。

確かに、公式な RSS を押しのけて他の RSS を紛れ込ませることができる。ただ、私は他のサイトが配布する非公式 RSS に恩恵を受けているので、必ずしも悪い仕様とは言い切れないと思っている。たとえば、2005-05-10 の "「なんでも RSS」で RSS が無いサイトから RSS を生成" を使って生成した RSS を誰かが bloglines に登録していれば、他のユーザがその RSS を購読することが簡単にできる。第三者のフィードが少ないうちなら、ユーザーへの恩恵もある。

- RSS の URL を直指定すればノイズは出てこない

RSS の URL を直指定すればノイズは出てこない。たとえば、以下のように RSS フィード を直指定した Bloglines への登録 URL ならば、余計な RSS は表示されない。

http://www.bloglines.com/sub/http://sonic64.com/cl.xml

当サイト Landscape 内の RSS 登録 URL は、すべて上記のように RSS の URL を直指定するようにしている。ただ、提供している RSS の数が少ない場合はこれでよいのだが、たとえばカテゴリごとに RSS を用意しているサイトだと、サイト内にその数の分だけ登録用リンクを記述設定しなければならない。

これを解決するには、サイトで提供している RSS を RSS AutoDiscovery で見つけられるように、HTML ヘッダに全部列挙するのが良い。2004-02-14 の「RSS Auto discovery で複数の RSS を提供するには」の手法が使える。

- 公式フィードの表示順位を上げる

Bloglines のフィード一覧画面は、どういう順番でフィードが並んでいるのかわからないという問題がある。以下のような場合に、表示順位を最上位にしたり、何かマークを付けたりするなどして欲しい。

RSS AutoDiscovery で明示されている RSS の場合
RSS が提供されている URL のドメインと RSS が言及しているドメインが一致した場合

RSS リーダー提供側がこういう配慮をしてくれれば、スパマーがいくら大量にゴミのような RSS を用意した場合でも、ユーザーはある程度対応できるだろう。

2005-05-15 (Sun)

* Bloglines に「本文が表示されない現象」をバグ報告

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS] [メール]

2005-05-13 の「Bloglines で本文が表示されない現象の原因と対処」で書いた現象を Bloglines に報告した。現象は、channel 要素内の title 要素にマルチバイト文字列を使っていて、かつタイトルの長さが長い場合、 本文が表示されないというもの。

- 英語でバグレポート

私は英語嫌いじゃないけど、普段使ってないからうまく書けないんだよなあ。時間もかかるし。2005-01-09 の「favicon.ico が bloglines で表示されない理由」で書いたバグレポートを送ったときもちょっと大変だった。

もっとも、日本語でも英語でもバグレポートの基本は一緒だよね。

発生した現象
期待する動作
再現手順や環境

この3つを書けばいいだけ。

- 既知の問題かどうかと、バグレポートの送り先を確認する

さて、まず同様のレポートが既に提出されているかどうかと、送り先を確認する。

以下を読んだけど、それらしき物はない。FAQ ってどこかにあったような気もするけど、どこだっけ?

Bloglines | Bloglinesからお知らせ
http://www.bloglines.com/about/news

送信先について。専用のメールアドレスがあるわけではなく、以下のフォームから送ればいい。前送ったときもそうだったっけ。すっかり忘れちゃってる。

Bloglines | お問い合わせ
http://www.bloglines.com/contact

・・・って、フォームもお問い合わせページも日本語で書いてあるんだけど、バグ報告も日本語でいいの? せっかく 英語で書かなきゃ! と気合い入れたのにね。前は英語のページしかなかったから英語で書いたんだけど。

あ、「よくある質問」があった。よくある質問 http://www.bloglines.com/help/faq の中には本バグレポートの現象は載ってないね。よし、書くぞ。

- Bloglines に送ったバグ報告メール

Bloglines で本文が表示されない現象の原因と対処
http://sonic64.com/2005-05-13.html

上記のウェブページに書いたから読んでね、というだけのレポートでも良いのかもしれないけど、もらった方としてはそれでは処理に困るかもしれない。もしかしたらフォームから送信した文面は自動翻訳されて開発チームに届くかもしれないし、BTS (Bug Tracking System - バグ追跡システム) にそのまま掲載されるかもしれないし。そもそも、「質問は以下のウェブサイトに書きました」とか「質問は添付ファイルの通りです」といったメールって、もらう立場から考えると嬉しい物じゃないし。メール本文に書いてくれればいいのに、って思っちゃう。

というわけで、本文に全部盛り込むようにし、以下をフォームから送信した。

長いマルチバイト文字列をタイトルに使った RSS だと本文が表示されません。

Bloglines の MyFeed でフィードを閲覧しようとすると、フィードのタイトルだけ表示されて本文が表示されないという現象が発生します。この現象について調査した結果を私のウェブサイトに載せています。

Bloglines で本文が表示されない現象の原因と対処
http://sonic64.hp.infoseek.co.jp/2005-05-13.html


以下に要約を書きます。

http://sonic64.hp.infoseek.co.jp/test/index.rdf の RSS を Bloglines で表示させると、タイトルのみ表示され、本文が表示されません。http://www.bloglines.com/preview?siteid=1840248 が問題のあるプレビューです。

RSS の Item 要素には Description と content:encoded が含まれています。通常であれば、フィードの item が表示されるはずですが、フィードのタイトルしか表示されません。ただし、この現象が発生するのは Internet Explorer を使ったときで、Firefox を使うとこの現象は発生しませんでした。

使用している Ineternet Explorer と Firefox のバージョンは以下の通りです。
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
Mozilla/5.0 (Windows; U; Windows NT 5.0; ja-JP; rv:1.7.7) Gecko/20050414 Firefox/1.0.3


http://sonic64.hp.infoseek.co.jp/test/index.rdf の RSS は channel 要素内の title 要素が非常に長いものとなっています。試しに channel 要素内の title 要素を短くした RSS を作って Bloglines で表示させてみると、Internet Explorer でも Firefox でも問題なく表示されました。

channel 要素内の title 要素を短くした RSS と、Bloglines におけるプレビュー
http://sonic64.hp.infoseek.co.jp/test/index_short.rdf
http://www.bloglines.com/preview?siteid=1840267


以下は私の推測です。
channel 要素内の title 要素が非常に長く、かつ日本語などのマルチバイトを必要とする文字コードで記述されていた場合、バイト境界を無視して文字を途中で切断してしまうようです。この結果、Bloglines が出力する HTML に文字化けが発生し、本文が表示されなくなってしまうのではないでしょうか。

フォームから送ると以下のメッセージが表示された。

あなたのメッセージは Bloglinesに送信されました。Bloglinesがメッセージを拝見させて頂くのには、2営業日はお待ち頂く必要があります。

送信完了。

2005-05-13 (Fri)

* Bloglines で本文が表示されない現象の原因と対処

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS]

Bloglines で本文が出ないという現象の原因と対処法。

- Bloglines でタイトルだけ出て本文が出ない「ExpandできないCollapse状態」

Bloglinesがおかしい ただのにっき
http://sho.tdiary.net/20050506.html#p01
ここ数日、本文が出ない(出るときもある)。ようするに「ExpandできないCollapse状態」になっている。これではBloglinesを使っている意味がないじゃないか。つーか、ただのアンテナだよ、これじゃ。すげー不便。

Bloglinesがおかしい(2) ただのにっき
http://sho.tdiary.net/20050512.html#p01
SleipnirでBloglinesを使っていると、ExpandできないCollapse状態になって困ると書いたら、Firefoxだと起きないと聞いたので、BloglinesだけFirefoxを使っている。実際、Firefox導入以来、問題は起きていない。なんでだ。

私もこの現象に悩まされてました。しばらく悩んだ後、この現象が発生する法則に気づきました。この現象は、長くてマルチバイト文字を使ったタイトルを持ったフィードが原因のようです。私の場合、それらのフィードを別ディレクトリに隔離することで問題を回避できました。

- 「今日のなんでやねん」が更新されると本文が表示されなくなる

最初に断っておく。当記事は単に技術的興味から「Bloglines において本文が出ない」という現象の原因を追及し、対処法を見いだそうとするものだ。究明の過程で特定のサイト名や URL、RSS が登場するが、究明の手がかりとして使っているだけで、それらを糾弾したり批判する意図は全くない。

私は、きたさんの tDiary 日記「今日のなんでやねん」 http://kitaj.no-ip.com/tdiary/ が更新されると本文が表示されないという現象が発生することに気づいた。また、やねうらおさんのはてなダイアリー日記「やねうらお−よっちゃんイカを買いに行ったついでに家を買う男」 http://d.hatena.ne.jp/yaneurao/ が更新されても同じ現象が出ることに気づいた。

どちらも、タイトルが長く、かつ日本語文字列が使われている。直感的に、これらの RSS が問題の原因であることを悟った。

今日のなんでやねん,っつーか今月のなんでやねんになりつつあるね…
やねうらお−よっちゃんイカを買いに行ったついでに家を買う男

対処は 2005-04-18 の「Bloglines から エクスポートした OPML が文字化けする現象への対処」で書いたように、問題を引き起こす RSS フィードを zzz_broken というディレクトリに隔離することだ。そして、問題のあるフィードと問題のないフィードを同時に開かないこと。問題のあるフィードはBloglines においては本文を読めないので、「アンテナ的」にしか使えないけど、他のフィードに問題が波及するよりは良い。

ここまでが、私が経験から導き出した対策。今日は、もう少し突っ込んで調べてみることにする。

- RSS の文法チェック

まず、RSS の文法が正しいことを確認しておく。2004-12-19 の「RSS Validator RSS/RDF の構文・妥当性と文法チェック」で紹介した Feed Validator と RSS Validator、W3C RDF Validation Service でチェックする。

対象 RSS は http://kitaj.no-ip.com/tdiary/index.rdf だ。

Feed Validator Results: http://kitaj.no-ip.com/tdiary/index.rdf
http://feedvalidator.org/check.cgi?url=http%3A%2F%2Fkitaj.no ...
Your feed appears to be encoded as "UTF-8", but your server is reporting "US-ASCII" [help]
line 9, column 1: Undefined channel element: copyright [help]

2つエラーが出ている。一つ目は、UTF-8 って XML 中に書いてるけどサーバは US-ASCII って HTTP レスポンスヘッダを返してるぞ、というエラー。これは当サイト Landscape でも同じエラーが出ているので、たぶん今回追跡している現象とは関係ないと思う。二つ目は、copyright 要素なんてスキーマにないよ、というエラー。二つ目はちょっとだけ怪しいかもしれない。

RSS Validator
http://rss.scripting.com/?url=http%3A%2F%2Fkitaj.no-ip.com%2 ...
Congratulations -- the RSS feed validates! You may include the following
logo text into your page if you want to express your support for RSS.

RSS Validator ではエラーなしと判定された。

W3C RDF Validation Service RDF Validator Results
http://www.w3.org/RDF/Validator/ARPServlet?RDF=%3C%3Fxml+ver ...
Validation Results
Your RDF document validated successfully.

W3C RDF Validation Service でもエラー無しと判定された。

基本的に、RSS に重大な文法違反があるわけではなさそうだ。次は Bloglines の出力している HTML を調べる。

- Bloglines が どんな HTML を出力しているか調べてみる

Bloglines が どんな HTML を出力しているか調べてみる。

http://www.bloglines.com/preview?siteid=273546 を開くと、Bloglines で今日のなんでやねんを表示させたときのプレビューが見られる。この時点でもうタイトルがおかしい。「今月のなんでやねんになりお」になってる。「お」って、Bloglines 開発陣には 2ちゃんねる VIP 板 (びっぷいた) 常駐の VIPPER でもいるのかな? 「それが Bloglines クオリティ」とか言ってたりして。

HTML がどうなっているかを調べるため、IE というか Sleipnir でページをレンダリングさせて、ページのソースを表示させる。

今日のなんでやねん,っつーか今月のなんでやねんになりお
http://www.bloglines.com/preview?siteid=273546
itemList = new Array();

itemText="";
itemText+="<h3><a title=\"サイト: 今日のなんでやねん,っつーか今月のなんでやねんになり縺\" href=\"http://kitaj.no-ip.com/tdiary/20050511.html#c01\" target=_blank>2005-05-11縺繝繧繝歇1] (O縺九b縺)</a></h3>";
itemText+="<p class=\"author\">";

「今日のなんでやねん,っつーか今月のなんでやねんになり」の後ろが文字化けしてる。2005-04-18 の「Bloglines から エクスポートした OPML が文字化けする現象への対処」と似たような化け方だ。UTF-8で78バイト目までは化けずに表示され、それより後で文字化けが始まっている。

http://www.bloglines.com/preview?siteid=273546 を Firefox で開いてみると、確かにタイトルは文字化けしているが本文は問題なく表示される。Firefox なら大丈夫というのは本当のようだ。使った Firefox は Mozilla/5.0 (Windows; U; Windows NT 5.0; ja-JP; rv:1.7.7) Gecko/20050414 Firefox/1.0.3 。1.0.4 には日本語版が出たらアップデートしよう。

Firefox でソースを表示させてみる。
itemText="";
itemText+="<h3><a title=\"サイト: 今日のなんでやねん,っつーか今月のなんでやねんになり■\" href=\"http://kitaj.no-ip.com/tdiary/20050511.html#c01\" target=_blank>2005-05-11のツッコミ[1] (Oかもと)</a></h3>";

「今日のなんでやねん,っつーか今月のなんでやねんになり」の後ろにバイナリがくっついているが、その後に影響はないようだ。これが Firefox では問題が起こらない理由か。ちなみに、当サイトの RSS や HTML にバイナリを紛れ込ませたくはないので、上記引用においてバイナリは■に置き換えてある

RSS のchannel要素内の title 要素を見てみる。

今日のなんでやねんの RSS
http://kitaj.no-ip.com/tdiary/index.rdf
<channel rdf:about="http://kitaj.no-ip.com/tdiary/index.rdf">
<title>今日のなんでやねん,っつーか今月のなんでやねんになりつつあるね…</title>

ぱっと見では問題なさそう。RSS の文法チェックでも問題なかったし、やっぱりタイトルが長いことが原因か?

- テストケースを作ってみる

文字化けが起こる最小の RSS を作ってみる。さすがに 実在のドメインの RSS を勝手に配布するのはどうかと思ったので、link 要素は example.com で作成した。

http://sonic64.com/test/index.rdf
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xml:lang="ja-JP">
<channel rdf:about="http://sonic64.hp.infoseek.co.jp/test/index.rdf">
    <title>今日のなんでやねん,っつーか今月のなんでやねんになりつつあるね…</title>
    <link>http://example.com/</link>
    <description></description>
    <items>
        <rdf:Seq>
            <rdf:li rdf:resource="http://example.com/1"/>
        </rdf:Seq>
    </items>
</channel>
<item rdf:about="http://example.com/1">
<link>http://example.com/1</link>
<dc:date>2005-05-11T12:20:47+09:00</dc:date>
<title>2005-05-11のツッコミ[1] (Oかもと)</title>
<dc:creator>Oかもと</dc:creator>
<description>漏れも同じ現象だった。</description>
<content:encoded><![CDATA[漏れも同じ現象だった。]]></content:encoded>
</item>
</rdf:RDF>

上記 RSS を Bloglines に読ませてプレビューしてみる。

Bloglines | Preview Feed
http://www.bloglines.com/preview?siteid=1840248
ビンゴ。文字化け発生。

次に、問題が発生しなくなる最小の RSS を作る。

http://sonic64.com/test/index_short.rdf
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xml:lang="ja-JP">
<channel rdf:about="http://sonic64.com/test/index_short.rdf">
    <title>今日のなんでやねん</title>
    <link>http://example.com/</link>
    <description></description>
    <items>
        <rdf:Seq>
            <rdf:li rdf:resource="http://example.com/1"/>
        </rdf:Seq>
    </items>
</channel>
<item rdf:about="http://example.com/1">
<link>http://example.com/1</link>
<dc:date>2005-05-11T12:20:47+09:00</dc:date>
<title>2005-05-11のツッコミ[1] (Oかもと)</title>
<dc:creator>Oかもと</dc:creator>
<description>漏れも同じ現象だった。</description>
<content:encoded><![CDATA[漏れも同じ現象だった。]]></content:encoded>
</item>
</rdf:RDF>

Bloglines | Preview Feed
http://www.bloglines.com/preview?siteid=1840267
タイトルを短くした方は問題なく表示された。やはりタイトルが長いことが原因になっている。

ひとまずここまでにしておこう。本当は、バイナリエディタでどんなデータが混入しているのかとか、ASCII 文字だとどうなのか、日本語文字列でも大丈夫な文字があるのか、とかいろいろ調べたいところだが、まあ再現するテストケースが作れたからこれで良いでしょう。

- 考察

RSS 1.0 では、channel 要素内の title 要素の長さは40バイト以内に収めることを推奨しているが、それに引っかかっている・・・わけじゃあなさそう。単に Bloglines の文字列処理に不具合があるだけかな。DB のタイトル格納カラムを varchar(80) で定義してて、UTF-8 文字列のバイト境界を無視して切ってしまっているとかね。nvarchar などの文字列長での定義ならば良いんだけど。ちなみに、「Landscape - エンジニアのメモ」は UTF-8 で36バイト。まだまだ大丈夫。

Channel 要素内の Description 要素の中身が空なのが良くないのかなと思ったが、そうではなかった。文法チェックでもエラーでなかったし。

これを悪用して Bloglines ユーザ向けの DoS (Denial of Service) 攻撃ができるなあ。普段は有用な記事ばっかり書いて購読者を集めておいて、数日に一度だけ channel 要素内の title 要素を長くした RSS を配布するとか。なんか手間がかかるばっかりで攻撃の効果が薄いけど。

あと、本文や Description の html が不完全だったりすると表示が乱れることがある。閉じタグのない a 要素とかを書かれたりすると、それより後の本文が全部リンクになっちゃうとか。いちいち 記事の html が整形式 (well-formed) かどうかをチェックするのは大変なので仕方ないことだと思うけど。

channel 要素内の title 要素が長い場合に発生する問題については、Bloglines に報告した方が良さそうだ。

- Bloglines にバグレポートしよう

よし、2005-01-09 の「favicon.ico が bloglines で表示されない理由」の時みたいに、Bloglines にバグレポートしよう。もちろん、テストケースもちゃんと添えてね。と思ったけど、ねむくなったので今日はここまで。

追記。本件は 2005-05-15 の Bloglines に「本文が表示されない現象」をバグ報告 でBloglies にバグレポートした。

2005-05-10 (Tue)

* 「なんでも RSS」で RSS が無いサイトから RSS を生成

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS]

2005-05-09 で書いた RSS 生成サービス 「なんでも RSS」 http://blogwatcher.pi.titech.ac.jp/nandemorss/ をいくつかのサイトで適用してみた。適用後の RSS を RSS リーダーなどに一括登録するための OPML も記事の末尾に付けておいた。

- RSS がないサイトから RSS を生成する

以下のサイトは、RSS がなかった頃は時々見に行っていたサイトたち。その後、更新チェックに手間がかかるので見に行かなくなってしまった。

しかし、なんでも RSS を使って RSS を生成すれば、Bloglines などの RSS リーダーで簡単に更新チェックできる。これぞなんでも RSS の真骨頂。

メモ http://tabesugi.net/memo/cur/cur.html
http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ...
Bloglines でプレビュー: http://www.bloglines.com/preview?siteid=1806864
新山さんのサイト。http://tabesugi.net/memo/2004/53.html#211514 などのドサ屋の話がとっても美味しそうで好き。マサラドサの辛いジャガイモ食べたい。あと ed エディタの訳はとても笑えた。「これらは単語ですらない!!! 」が実に良い。

妖精現実 フェアリアル http://www.faireal.net/
http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ...
Bloglines でプレビュー: http://www.bloglines.com/preview?siteid=1808673
コアな話題が多い。著作権の話とか好き。

日記。 http://homepage1.nifty.com/bee/diary/
http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ...
Bloglines でプレビュー: http://www.bloglines.com/preview?siteid=1807491
自分の意見を確立している人。

TECHSIDE http://www.iris.dti.ne.jp/~spec/news2/bbsf.html
http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ...
Bloglines でプレビュー: http://www.bloglines.com/preview?siteid=1808609
埼玉の TECH さん。ゲームの話題とかが好きだった。

Shudo's Notes (技術フェチ日記) http://www.shudo.net/diary/
http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ...
Bloglines でプレビュー: http://www.bloglines.com/preview?siteid=1818836
Java のすごい人。画像が表示されないね。パスを上手く変換できてないのかな。

バーチャルネットアイドル・ちゆ12歳 http://tiyu.to/title.html
http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ...
Bloglines でプレビュー: http://www.bloglines.com/preview?siteid=1818792
マニアックな世界をわかりやすく解説してくれる。「野望の王国」の「なんちゅうでかいチャウチャウや!」ネタとか好きだったな。いまでも人気あるみたいだね。

連邦 http://www.renpou.com/cgi-bin/news/index.html
http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ...
Bloglines でプレビュー: http://www.bloglines.com/preview?siteid=1818784
筆者の周りの愉快な人たちの話が好きだった。Bloglines の中にあの色合いのテーブルが再現される。

憂鬱なプログラマによるオブジェクト指向日記 http://umi.no-ip.com/simple/
http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ...
Bloglines でプレビュー: http://www.bloglines.com/preview?siteid=1818781
統計ネタとか好きだった。おおー、今でも専業主婦を攻撃している模様。よく続いてるなあ。

- 見出しや要約だけの RSS を配信しているサイトを全文入り RSS にする

以下のサイトたちは公式に RSS などを配信してるけど、RSS に入っているのは見出しや要約だけで本文が入っていない。私は 2004-10-26 の 「content:encodedが足りねぇ… じゃんじゃん 持ってこい」などで書いたように、全文入った RSS が好き。だって、いちいちそのサイトに見に行かなくても、Bloglines などの RSS リーダーで一気に読めるから。

というわけで、全文入り RSS を配信していないサイトを、なんでも RSS の力を使って全文入りに変えてみる。

切込隊長BLOG(ブログ)〜俺様キングダム〜 http://kiri.jblog.org/
http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ...
Bloglines でプレビュー: http://www.bloglines.com/preview?siteid=1819711
左の青い帯は何だろう?

My Life Between Silicon Valley and Japan http://d.hatena.ne.jp/umedamochio/
http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ...
Bloglines でプレビュー: http://www.bloglines.com/preview?siteid=1820168
梅田望夫さん。C|NET の「梅田望夫・英語で読むITトレンド」で有名。
追記。その後全文入りの RSS を公式に配布するようになったので、なんでも RSS で全文入り RSS を生成する必要はなくなった。

趣味のWebデザイン http://deztec.jp/design/
http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ...
Bloglines でプレビュー: http://www.bloglines.com/preview?siteid=1820496
考察が独特で好き。

未来のいつか/hyoshiokの日記 http://d.hatena.ne.jp/hyoshiok/
http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ...
Bloglines でプレビュー: http://www.bloglines.com/preview?siteid=1820581
バリバリの開発者。実体験からつづられる方法論は興味深い。

大器晩成型:洸史郎 http://moai.blog.ocn.ne.jp/
http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ...
Bloglines でプレビュー: http://www.bloglines.com/preview?siteid=1820268
公式に配信されている RSS では洸史郎くんの写真が見られないが、なんでも RSS で変換すれば写真が見られるようになる。かわいい。

itoya_laboratory*net_news http://www.uzura.jp/
http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ...
Bloglines で プレビュー: http://www.bloglines.com/preview?siteid=1807813
あの独特の色合いが Bloglines 上で再現される。なんだか新鮮な感じだ。

NGM - Text for Video Game http://ngm.web.infoseek.co.jp/
http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ...
Bloglines でプレビュー: http://www.bloglines.com/preview?siteid=1820786

- なんでも RSS で RSS に変換できなかったサイト

Radium Software Development は RSS に変換できなかった。年の表記が 2005 などではなく、05 と頭2桁が省略されているためだろう。残念だ。

Radium Software Development http://www.radiumsoftware.com/diary.html
http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ...
Radium Software Developmentの解析結果
http://www.radiumsoftware.com/diary.html
日付情報が見つかりませんでした.

- 今回紹介した RSS の OPML

上記サイトを一つ一つ RSS リーダーに登録するのは手間がかかる。OPML を使えば一気に登録できる。
ただし、「憂鬱なプログラマによるオブジェクト指向日記」と「ちゆ」は文字化けしてたので除外した。

<?xml version="1.0" encoding="utf-8"?>
<opml version="1.0">
<head>
    <title>Bloglines Subscriptions</title>
    <dateCreated>Tue, 10 May 2005 15:27:33 GMT</dateCreated>
    <ownerName></ownerName>
</head>
<body>
  <outline title="Subscriptions">
    <outline title="tmp">
        <outline title="2005年 5月 (1)。" htmlUrl="http://tabesugi.net/memo/cur/cur.html" type="rss" xmlUrl="http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url=http%3A%2F%2Ftabesugi.net%2Fmemo%2Fcur%2Fcur.html&amp;key=body%2F%2F%2F%2Fh4%2Fa" />
        <outline title="itoya_laboratory*net_news[今月のニュース]" htmlUrl="http://www.uzura.jp/" type="rss" xmlUrl="http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url=http%3A%2F%2Fwww.uzura.jp%2F&amp;key=body%2Fdiv%2Ftable%2Ftr%2Ftd%2Ffont%2Fb" />
        <outline title="My Life Between Silicon Valley and Japan" htmlUrl="http://d.hatena.ne.jp/umedamochio/" type="rss" xmlUrl="http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url=http%3A%2F%2Fd.hatena.ne.jp%2Fumedamochio%2F&amp;key=body%2Fdiv%2Fdiv%2Fdiv%2Fh2%2Fa%2Fspan" />
        <outline title="NGM - Text for Video Game" htmlUrl="http://ngm.web.infoseek.co.jp/" type="rss" xmlUrl="http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url=http%3A%2F%2Fngm.web.infoseek.co.jp%2F&amp;key=body%2Fdiv%2Fdiv" />
        <outline title="renpou" htmlUrl="http://www.renpou.com/cgi-bin/news/index.html" type="rss" xmlUrl="http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url=http%3A%2F%2Fwww.renpou.com%2Fcgi-bin%2Fnews%2Findex.html&amp;key=body%2Ftable%2Ftr%2Ftd%2Ftable%2Ftr%2Ftd%2Ffont%2Fb" />
        <outline title="Shudo's Notes (2005/5)" htmlUrl="http://www.shudo.net/diary/" type="rss" xmlUrl="http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url=http%3A%2F%2Fwww.shudo.net%2Fdiary%2F&amp;key=body%2Fdl%2Fdt%2Fa%2Ffont" />
        <outline title="TECHSIDE" htmlUrl="http://www.iris.dti.ne.jp/~spec/news2/bbsf.html" type="rss" xmlUrl="http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url=http%3A%2F%2Fwww.iris.dti.ne.jp%2F%7Espec%2Fnews2%2Fbbsf.html&amp;key=body%2Ftable%2Ftr%2Ftd%2Ftable%2Ftr%2Ftd%2Fsmall%2Fb" />
        <outline title="切込隊長BLOG(ブログ)" htmlUrl="http://kiri.jblog.org/" type="rss" xmlUrl="http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url=http%3A%2F%2Fkiri.jblog.org%2F&amp;key=body%2Fdiv%2Fdiv%2Fdiv%2Fh3" />
        <outline title="大器晩成型:洸史郎" htmlUrl="http://moai.blog.ocn.ne.jp/gt/" type="rss" xmlUrl="http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url=http%3A%2F%2Fmoai.blog.ocn.ne.jp%2Fgt%2F&amp;key=body%2Fdiv%2Fdiv%2Fdiv%2Fdiv%2Fdiv%2Fh2" />
        <outline title="妖精現実 フェアリアル" htmlUrl="http://www.faireal.net/" type="rss" xmlUrl="http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url=http%3A%2F%2Fwww.faireal.net%2F&amp;key=body%2Fdiv%2Fdiv%2Fh3" />
        <outline title="日記。" htmlUrl="http://homepage1.nifty.com/bee/diary/" type="rss" xmlUrl="http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url=http%3A%2F%2Fhomepage1.nifty.com%2Fbee%2Fdiary%2F&amp;key=body%2Fh2" />
        <outline title="未来のいつか/hyoshiokの日記" htmlUrl="http://d.hatena.ne.jp/hyoshiok/" type="rss" xmlUrl="http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url=http%3A%2F%2Fd.hatena.ne.jp%2Fhyoshiok%2F&amp;key=body%2Fdiv%2Fdiv%2Fdiv%2Fh2%2Fa%2Fspan" />
        <outline title="趣味のWebデザイン" htmlUrl="http://deztec.jp/design/" type="rss" xmlUrl="http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url=http%3A%2F%2Fdeztec.jp%2Fdesign%2F&amp;key=body%2Fdiv%2Fh3" />
    </outline>
</outline>
</body>
</opml>

2005-05-09 (Mon)

* RSS 生成サービス なんでも RSS と Bloglines の連携

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS] [Bookmarklet]

なんでも RSS は、HTML を解析して RSS にしてしまうサービス。

- なんでも RSS 公式サイト

なんでもRSS 0.1b
http://blogwatcher.pi.titech.ac.jp/nandemorss/

- なんでも RSS はすごい

なんでも RSS はすごい。http://tabesugi.net/memo/cur/cur.html のように RSS を提供してないサイトでも、難なく RSS を生成してくれる。こんな感じ。http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ...

日付文字列を区切り文字として使っているとのこと。類似のサービスに MyRSS.jp http://myrss.jp/ があるが、MyRSS.jp はリンクから HTML を解析して RSS を生成するというところが違う。

なんでも RSS では以下のような Bookmarklet も用意している。これを使うと、お気に入りから直接なんでも RSS のサービスを呼び出せる。
javascript:location.href='http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url=' + encodeURIComponent(location.href)

- Bloglines と なんでも RSS の連携

なんでも RSS の Bookmarklet と Bloglines の サイト登録 Bookmarklet を組み合わせて、Bloglines の登録画面を呼び出す Bookmarklet を作ってみる。

以下は Bloglines のサイト登録 Bookmarklet。お気に入りに登録してから、Bloglines に登録したいページをブラウザで表示した状態で呼び出すと、http://www.bloglines.com/sub/http://sonic64.com/cl.xml のような登録画面が出る。登録済みのサイトだと、すでに登録してるよって言われるけど。
javascript:location.href='http://www.bloglines.com/sub/'+location.href

で、2つを組み合わせると以下のようになる。実行すると、現在表示中のページの URL をなんでも RSS になげて RSS に変換し、さらにその URL を Bloglines に投げて Bloglines の RSS 登録画面を呼び出す、という動きをするはずだ。

javascript:location.href = 'http://www.bloglines.com/sub/http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url=' + encodeURIComponent(location.href)

上記 Bookmarklet を実行すると・・・あれ? なんか変。
http://www.bloglines.com/preview?siteid=1811750

あー、RSS そのものじゃなくて、なんでも RSS の画面を出す Bookmarklet だからこういう結果になったのか。

ん? RSS そのものの URL http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url= ... には、key ってのが入ってるね。

こいつは曲者だな。日付文字列を分離するための情報として key に記述された html タグを使ってるんだろうな。となると、key には html ごとに異なる値が設定されることになるし、汎用の Bloglines 登録 Bookmarklet に仕立てるにはちょっと手間がかかるな。ねむくなってきたし、残念だけどあきらめるか。

2005-04-30 (Sat)

* Readme! が RSS を配信していた

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS]

ReadMe! Japan が http://readmej.com/report/report.rdf で更新情報の RSS を配信していた。気づかなかった。

http://www.bloglines.com/preview?siteid=1109137
ReadMe! JAPAN
コラム・日記など「読み物」を対象とした、更新情報&ランキングサイトです。
http://readmej.com [http://readmej.com/report/report.rdf]

最近配信を始めた CodeZine の RSS http://codezine.jp/rss/new/10/index.xml は bloglines で subscribe したけど、ReadMe! の RSS は一般読者としては使い道を思いつきにくいな。要するに WeblogUpdates.ping サイトが受理した ping 一覧ってことだもんね。

2005-04-18 (Mon)

* Bloglines から エクスポートした OPML が文字化けする現象への対処

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [メモ] [RSS] [XML]

http://www.bloglines.com/export にブラウザでアクセスしたとき、XML を正常に表示できない場合がある。原因の一つとして、OPML 中のサイト名に文字化けが発生していることが挙げられる。たとえば IE では以下のようなエラーが表示される。

XML ページを表示できません

XSL スタイル シートを使用した XML 入力は表示できません。エラーを訂正してください。 [更新] ボタンをクリックするか、または後でやり直してください。
-----------------------------------------------------

テキストの内容に無効な文字が見つかりました。リソース 'http://www.bloglines.com/export' の実行エラーです。ライン 971、位置 76

http://www.bloglines.com/export をブラウザに表示させるのではなく、右クリックして直接ファイルに保存すると、該当行付近で盛大に文字化けしているのが分かる。

- OPML の文字化け原因の傾向と対策

私も原因をはっきりつかんでいるわけではないが、文字化けを起こすサイトを見ていると以下の傾向があるように思える。

・サイト名に ASCII 以外の文字が使われている
・サイト名が長い

私は文字化けを起こすようなサイトは Bloglines 上で zz_broken というディレクトリに入れることにしている。Bloglines の OPML エクスポートは ディレクトリ名とサイト名のアルファベット順だ。文字化けを引き起こすサイトの出現位置を最後にすることで、文字化けの影響範囲を最小限にするという狙いだ。ただ、設定によってはアルファベット順にサイトが並ばないかもしれない。そういう場合は文字化けを起こすサイトを OPML の末尾に持ってくる工夫が要る。

RSS のバージョンによっては title の文字数を制限している。もしかしたら、それを無視しているサイトがひっかかっているのかも。

追記。2005-05-13 の「Bloglines で本文が表示されない現象の原因と対処」で述べたことが OPML の文字化けにも関連していると思われる。

2005-04-17 (Sun)

* Bloglines の登録データをバックアップする シェルスクリプト

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [バックアップ] [シェルスクリプト] [RSS]

bloglines に登録したサイト一覧を定期的に自動で OPML にエクスポートしてバックアップする方法。

- Bloglines の登録データをバックアップするシェルスクリプトの概要

http://www.bloglines.com/export に Bloglines の Cookie 付きで HTTP GET し、返ってきたレスポンスを保存する。あとはこれを cron などで定期的に自動実行すれば OK。

やっぱり自分のデータは手元に置いておきたい。他の RSS リーダに乗り換えるときに手元に OPML があれば楽だろうから、定期的なバックアップは取っておきたいし。

- Bloglines の登録データは OPML でエクスポートできる

Bloglines のアカウントを持っている人なら、http://www.bloglines.com/export にアクセスすると Bloglines で購読しているサイトの一覧を OPML でエクスポートすることができる。http://www.bloglines.com/export には特にユーザを識別するようなクエリが付いていない。おそらく Cookie にユーザーデータが入っていて、それでユーザを識別しているんだろう。Web アプリケーションの定石だね。

2005-04-18 追記。「Bloglines から エクスポートした OPML が文字化けする現象への対処」という記事を書いた。

- Live Http headers で HTTP トランザクションの中身を調べる

どんな Cookie が Bloglines に送信されているかを見てみる。

Firefox を起動し、2005-04-16 の「Live Http headers - HTTP ヘッダ表示ツール」で書いた Live Http headers で HTTP ヘッダを表示させながら Bloglines にアクセスする。Bloglines の登録に使ったメールアドレスとか、色々それらしき情報を見ることができた。私のアカウントを保護するため、一部伏せ字や文字の削除をした。

http://www.bloglines.com/export

GET /export HTTP/1.1
Host: www.bloglines.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; ja-JP; rv:1.7.6) Gecko/20050318 Firefox/1.0.2
Accept: text/xml,application/xml,application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, image/png,*/*;q=0.5
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: BloglinesLang=0; BloglinesTracker=MXk4zPhcOWV3tjEJV14gNY; BloglinesEmail=blog****@**********.com; clickedFoldersubtree=; clickedFoldermanagetree=

HTTP/1.x 200 OK
Date: Sun, 17 Apr 2005 12:47:22 GMT
Server: Apache/1.3.31 (Unix)
Cache-Control: no-cache, must-revalidate, no-cache="Set-Cookie", private
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Pragma: no-cache
Set-Cookie: BloglinesLang=0; path=/; expires=Monday, 17-Apr-2006 23:59:59 GMT
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/xml; charset=utf-8

ちなみに Cookie を無効にして http://www.bloglines.com/export にアクセスすると、ログイン画面に飛ばされた。つまり、http://www.bloglines.com/export に Cookie 付きでアクセスすればいいということ。

Cookie の有効期限は expires=Monday, 17-Apr-2006 23:59:59 GMT なので、一年間だ。

- Bloglines の登録データをバックアップするシェルスクリプト

Perl などで書いても良いけど、これくらいだったらシェルスクリプトで十分。wget で HTTP リクエストを投げ、date コマンドで7世代分残す。

wget で送信する Cookie は --header='' に記述する。さっきの Live Http headers で表示させた Cookie をそのまま使えばいい。

#!/bin/sh

wget --header='Cookie: BloglinesLang=0; BloglinesTracker=MXk4zPhcOWV3tjEJV14gNY; BloglinesEmail=blog****@**********.com; clickedFoldersubtree=; clickedFoldermanagetree=' http://www.bloglines.com/export -O $HOME/etc/bloglines`date +%u`.opml

ちなみに、date コマンドの引数の +%u は 月曜日を1とし、日曜日を7とする数字で、毎日出力が変わる。7世代分残したいからこれを使った。
date --help の結果から抜粋。
%u  day of week (1..7);  1 represents Monday"

上記スクリプトを export_bloglines_opml.sh というファイル名で保存する。
crontab に登録し、毎日 01:01 に実行する。
1 1 * * * nice -19 /home/aqua/script/export_bloglines_opml.sh

ホームディレクトリは 2004-11-09 の「GMail をバックアップストレージとして使う」で書いたスクリプトで毎日バックアップしている。これでとりあえず大丈夫でしょう。Cookie の有効期限までは自動でバックアップがとれる。

- public 設定の人は Cookie 不要

2005-04-19 追記。Public 設定にしておけば Cookie 不要で OPML をエクスポートできる。

void GraphicWizardsLair( void ); // http://www.otsune.com/diary/ の otsune さんから以下のメールを頂いた。ありがとうございます。

public設定になっているIDの人は
http://www.bloglines.com/export?id=hoge
というURLでもエクスポートできるようです。

なるほど。public ってどこで設定するんだろう? ちょっと調べてみよう。

わかった。Bloglines にログインして、右上の「アカウント」の「ブログ設定」から Public 属性を設定できる。パンくずリストで言うと、「ホーム > アカウント > ブログ設定」。ここでユーザ名を登録して、「ブログの公開設定」を「はい」にすれば良い。

ブログの公開設定:
○ はい、ブログとブログロールを公開します
● いいえ、ブログを公開しません

あなたのアカウントを非公開にすると、あなだだけ見ることができます。
公開すると、あなたのブログにアクセスできます http://www.bloglines.com/blog/************

やり方も分かったし、Public 設定を試してみたい。テスト用のアカウントを登録して Public にしてみよう。アカウント名は最近鉄拳5のおまけにも付いた StarBlade がいいかな。

http://www.bloglines.com/export?id=StarBlade
<?xml version="1.0" encoding="utf-8"?>
<opml version="1.0">
<head>
    <title>Bloglines Subscriptions</title>
    <dateCreated>Mon, 18 Apr 2005 15:03:26 GMT</dateCreated>
    <ownerName>StarBlade</ownerName>
</head>
<body>
  <outline title="Subscriptions">
    <outline title="Bloglines | News" htmlUrl="http://www.bloglines.com" type="rss" xmlUrl="http://www.bloglines.com/rss/about/news" />
    <outline title="Landscape - エンジニアのメモ" htmlUrl="http://sonic64.com/" type="rss" xmlUrl="http://sonic64.com/cl.xml" />
    <outline title="Landscape - エンジニアのメモ" htmlUrl="http://sonic64.com/" type="rss" xmlUrl="http://sonic64.com/cl-full.xml" />
    <outline title="@IT" htmlUrl="http://www.atmarkit.co.jp" type="rss" xmlUrl="http://www.atmarkit.co.jp/rss/rss.xml" />

</outline>
</body>
</opml>

なるほど、そのまま OPML でエクスポートできた。確かにこれならいちいち Cookie をセットしなくていいので簡単かつ確実に OPML をエクスポートできる。公開してる人にはこっちの方が楽で良いね。秘密主義の私にはできないけど。、

ちなみに、RSS 登録時に「非公開」扱いにしたサイトは表示されない。
フィードを登録していることを:
  公開
  非公開

非公開の登録はブログロールには表示されません

もうひとつ分かったこと。「ホーム > アカウント > ブログ設定」でユーザ名だけ登録しておいて「いいえ、ブログを公開しません」を選んで http://www.bloglines.com/export?id=************ にアクセスすると Internal Server Error になる。Bloglines 開発チームの考慮漏れかな?

いろいろ調べて好奇心を満たした後、ふと Bloglines を見ると「共有」という怪しげなタブがあった。見てみると、試したことがちゃんと書いてあった。最初に見ておけば良かったね。

Bloglines | あなたの登録をシェア
http://www.bloglines.com/help/share
ホーム > ヘルプ > ブログロールウィザード

Bloglinesではあなたが登録しているフィードを2通りの方法でほかの人と共有することができます。1つ目の方法はあなたのプロファイルで共有を許可する方法です。共有設定をオンにすると、あなたが登録しているフィードがすべて公開されます。登録フィードの一覧を表示した状態で編集リンクをクリックすれば個別のフォルダや登録フィードを非公開にすることができます。非公開フォルダや非公開登録フィードはブログロールや/blogビューには表示されません。

/public

ブログロールに加えて、公開登録フィードはBloglinesのウェブサイトで公開されます。あなたの公開フィードは次のURLから参照できます:

http://www.bloglines.com/public/StarBlade
あなたの公開フィードはOPMLファイルとしてエクスポートされます。

Public 設定にしていれば http://www.bloglines.com/export?id=StarBlade だけじゃなく、 http://www.bloglines.com/public/StarBlade という URL でも OPML をエクスポートできるんだね。

- http://www.bloglines.com/public/StarBlade が OPML エクスポートじゃなくなった?

2005-04-19 追記。
なんかいろいろいじってたら http://www.bloglines.com/public/StarBlade が OPML エクスポートじゃなくて単なるフィード紹介ページみたいになっちゃった。OPML をバックアップするという使い方なら、http://www.bloglines.com/export?id=StarBlade の記法が一番確実な模様。

- w3m を使って Bloglines の OPML をエクスポート

public 設定にできない人向けの楽なエクスポート方法を、読書記録ChangeLog http://dkiroku.com/ のうぞよとさんが書いてくださった。

Bloglines の登録データをバックアップする シェルスクリプト
http://dkiroku.com/2005-04-19-2.html
w3mを使用すればもっと簡単です。
(1)w3mでhttp://www.bloglines.com/exportなどにアクセス。
(2)手作業でログインする。
(3)いったんw3mを終了
(4)以下のコマンドを実行
w3m \
-config /home/usename/.w3m/config \
-cookie \
http://www.bloglines.com/export > export.xml

w3mを使用すれば簡単にクッキーを食わせることが可能なのです。
Yahooファイナンスのポートフォリオ機能などでも使用できます。

おお、なるほど。HTTP リクエストヘッダを表示させるといった、面倒なことが必要ないというところが素晴らしい。w3m はテキストベースのウェブブラウザだし、コマンドラインとの相性も良いはず。さっそくやってみよう・・・と思ったけど、手元の FreeBSD マシンには w3m 入ってないや。あとで試すことにする。

2005-04-13 (Wed)

* XML の CDATA 中では ]]> のエスケープが必要

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [XML] [RSS]

XML の CDATA 中では ]]> のエスケープが必要だ。

- エスケープ必要だよね?

RSS の content::encoded には < や > " をエスケープせずに CDATA として直接記述できる。でも、CDATA の開始や終了を示す <![CDATA や ]]> が登場したらどうなるんだろう? CDATA の終了を判別できなくなるよね。XML というより SGML の規則のような気もするが、調べてみる。

XML用語事典 [CDATAセクション]
http://www.atmarkit.co.jp/aig/01xml/cdata.html
CDATAセクションは、<![CDATA[という文字列で始まり、]]>という文字列で終わる。CDATAセクションの内部には、XMLで利用可能な文字をすべて記述することができる。唯一の例外は]]>という文字列だけで、これを記述することはできない。記述しても、CDATAセクションの終了を示すと解釈されてしまう。

Studying XML -- second step -- [ エスケープ ]
http://www.asahi-net.or.jp/~ps8a-okzk/xml/xml_2/escape.html
 CDATAセクションは、 <や&をエスケープしなくてよい場所ですが、 ]]>という文字列が含まれる場合には ]]&gt;のようにエスケープする必要があります。

あ、やっぱりエスケープしなきゃいけないんだね。

Chalow の RSS 出力部分は私好みになるようにほとんど書き換えてしまってるんだけど、そこでは ]]> のエスケープはやってなかったなあ。まずいな。・・・と思ったけど、データには無条件にhtml エスケープを施してるし、その上で html を追加しているから、Chalow 側で明示的に ]]> を追加しない限り問題ないんだな。

- ]]> を CDATA 中に直接記述する

CDATA 中に ]]> が生で登場したらどうなるか試す。

まずは ]]> が登場しない XML を書いてブラウザに表示させてみる。

<?xml version="1.0" encoding="euc-jp"?>
<sonic>
  <![CDATA[<a href="http://sonic64.com/">Landscape - エンジニアのメモ</a>]]>
</sonic>

うん、問題なく表示された。あたりまえだけどね。で、Landscape に続く - の文字を ]]> に変えてみる。

<?xml version="1.0" encoding="euc-jp"?>
<sonic>
  <![CDATA[<a href="http://sonic64.com/">Landscape ]]> エンジニアのメモ</a>]]>
</sonic>

XML パースエラー: タグの対応が間違っています. 閉じタグが必要です: </sonic>.
URL: file:///d:/tmp/test.xml
行番号: 3, 列番号: 80:  <![CDATA[<a href="http://sonic64.com/">Landscape ]]> エンジニアのメモ</a>]]>
-------------------------------------------------------------------------------^

Firefox で予想通りエラー。^ が示す位置が微妙に違う気がするけど、まあ気にしないでおこう。

XML ページを表示できません
XSL スタイル シートを使用した XML 入力は表示できません。エラーを訂正してください。 [更新] ボタンをクリックするか、または後でやり直してください。


--------------------------------------------------------------------------------

終了タグ 'a' が開始タグ 'sonic' と一致していません。リソース 'file:///d:/tmp/test.xml' の実行エラーです。ライン 3、...

  <![CDATA[<a href="http://sonic64.com/">Landscape ]]> エンジニアのメモ</a>]]>
-----------------...

IE でもエラー。

- ]]> を ]]&gt; にエスケープ

エスケープして記述する。

<?xml version="1.0" encoding="euc-jp"?>
<sonic>
  <![CDATA[<a href="http://sonic64.com/">Landscape ]]&gt; エンジニアのメモ</a>]]>
</sonic>

Firefox での表示。スタイルシートはなし。ところで、エスケープした ]]&gt; を ]]> にアンエスケープしてくれないのかな。
<sonic>
<a href="http://sonic64.com/">Landscape ]]&gt; エンジニアのメモ</a>
</sonic>

IE スタイルシートなしで表示させても同くアンエスケープされない。うーん。まあ Firefox や IE の XML 閲覧機能はおまけみたいなものだから仕方ないかな。
  <?xml version="1.0" encoding="euc-jp" ?>
- <sonic>
- <![CDATA[ <a href="http://sonic64.com/">Landscape ]]&gt; エンジニアのメモ</a>
  ]]>
  </sonic>

2005-03-23 (Wed)

* 巨大な RSS/RDF/Atom を求めて

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS] [XML]

巨大な RSS は男のロマンだという話。

- 108 件のRSS

Dead bookmark - 徹人28号が行く++
http://kitsune.info/blog/?itemid=434
さて、この freshmeat の RSS フィードですが、数ヶ月前まではほんの数件(たしかひと桁だったと思う)しかフィードしてくれませんでした。オープンソースソフトウェアは世界中で日夜開発が続けられているので、これではあっという間にフィードの中身が入れ替わってしまいます。当然見落としがあるでしょうから、これは不便な話でした。

ところがある時から、freshmeat のフィード件数が増えたのです。それもふたつみっつ増えたなんてレベルじゃありません。クリックするとモニタの下限まで行ってまだ余るくらいの数です。今までにいろいろな RSS フィードを見てきましたが、こんなに件数が多いフィードは見たことがありません。freshmeat に登録されているプロジェクトは 3万6千件以上あるらしいので、それもまた当然といえば当然なのですが、それにしても多すぎます。

先ほどふと思い立って、いったい何件フィードされているのか調べてみることにしました。方法は簡単。全フィードを個別のタブで開けばよいのです。私の Firefox は多段タブにしてあるので、全部開けばかけ算でフィード件数がわかります。

……あれ、Firefox が入力を受け付けなくなってしまった。さすがにこんなに開いたらメモリの食い過ぎか?

待つこと 10分。ようやくコントロールを取り戻した Firefox のタブを数えてみました。その数なんと 108枚。まさか 3桁の大台に乗るとは。普通 RSS フィードつーたらあーた、多くても 30件くらいでしょうが。

ちょうど108件なんて、除夜の鐘みたいだ。煩悩が詰まった RSS か。読んでみたいな。

でも、108件のフィードなんて大したこと無いですよ。手前味噌ながら、当サイト Landscape の RSS http://sonic64.com/cl-full.xml にはこの記事を含めて677件のフィードが入ってますから。freashmeat の RSS の約7倍の件数だから、70分あれば Firefox でも開けます。たぶん。

少食な RSS リーダの方には http://sonic64.com/cl.xml がおすすめ。直近7日分の記事しか入れていないので、全記事を格納した RSS に比べてとてもコンパクトです。

- 膨大な情報が詰まったテキストファイルは男のロマン

108件しか入ってないとはいえ、大きな RSS フィードというだけで興味をそそられる。ファイルサイズも巨大だとなお良い。2004-02-17 の「攻殻機動隊 S.A.C. 第5話を見る」でも書いたけど、テキストファイルに膨大な情報が詰まっているっていうだけでワクワクする。男のロマンだ。蛇足だけど、2004-02-17 に書いた「とあるデータファイル」とは、前述の Landscape の 全記事を格納したRSSのこと。

よし、freashmeat の RSS を見に行ってみよう。「俺より強い奴に会いに行く」って感じかな。

- freashmeat の RSS

http://freshmeat.net/ にアクセスすると、右上に XML アイコンがある。これかな。

freashmeat XML アイコンのリンク先
http://download.freshmeat.net/backend/
Files

fm-projects-0.1.dtd Mon May 5 08:14:45 2003  7979 bytes
fm-projects-0.2.dtd Mon May 5 08:15:15 2003  8140 bytes
fm-projects-0.3.dtd Mon Nov 10 00:04:05 2003  9209 bytes
fm-projects-0.4.dtd Mon Jan 3 01:38:10 2005  9454 bytes
fm-projects.rdf.bz2 Wed Mar 23 04:01:38 2005  7172546 bytes
fm-releases-global.xml Wed Mar 23 08:55:14 2005  80365 bytes
fm-releases-handhelds.xml Wed Mar 23 08:55:15 2005  1570 bytes
fm-releases-osx.xml Wed Mar 23 08:55:16 2005  9021 bytes
fm-releases-themes.xml Wed Mar 23 08:55:16 2005  394 bytes
fm-releases-unix.xml Wed Mar 23 08:55:29 2005  79254 bytes
fm-search-0.1.dtd Sun May 5 11:05:31 2002  7774 bytes
fm-search-0.2.dtd Mon Jan 3 01:37:54 2005  9194 bytes
fm-trove-0.1.dtd Tue Nov 4 04:30:30 2003  7113 bytes
fm-trove.rdf Wed Mar 23 04:03:08 2005  10186180 bytes
recentnews.txt Wed Mar 23 08:50:04 2005  953 bytes
rss-0.91.dtd Sun Nov 28 05:07:41 2004  8361 bytes

こりゃすごい。fm-trove.rdf がとくに突き抜けてる。10186180 bytes だって。カンマを振らないと読みにくいな。10,186,180 だから・・・約10メガバイトか。すごいな。当サイトの RSS の約3倍強のサイズだ。これは中も見てみなきゃね。bloglines で読んでみるか。

・・・って、あれ? http://www.bloglines.com/sub/http://download.freshmeat.net/b ... から購読しようとしたけどエラーになっちゃうな。

No feeds were found. Please verify that the website publishes an RSS feed.
あれ? これって RSS じゃないの?

- fm-trove.rdf の中身テキストエディタで見てみる

bloglines で見られないので、ダウンロードしてテキストエディタで開いてみる。

fm-trove.rdf
http://download.freshmeat.net/backend/fm-trove.rdf
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE trove-listing SYSTEM "http://freshmeat.net/backend/fm-trove-0.1.dtd">
<trove-listing>
  <descriminator>
    <id>6</id>
    <name>Development Status</name>
    <parent_id>0</parent_id>
    <root_id>0</root_id>
  </descriminator>
  <descriminator>
    <id>7</id>
    <name>Development Status :: 1 - Planning (disabled category)</name>
    <parent_id>6</parent_id>
    <root_id>6</root_id>
    <projects>
      <project_id>302</project_id>
      <project_id>4754</project_id>
      <project_id>7408</project_id>
      <project_id>8708</project_id>
      <project_id>8805</project_id>
      <project_id>10136</project_id>
      <project_id>12161</project_id>
      <project_id>12568</project_id>
      <project_id>12784</project_id>
      <project_id>12850</project_id>
      <project_id>13629</project_id>
      <project_id>13896</project_id>
      <project_id>13960</project_id>
      <project_id>14018</project_id>
      <project_id>14045</project_id>
      <project_id>14295</project_id>
      <project_id>14408</project_id>
      <project_id>15813</project_id>
      <project_id>15865</project_id>
      <project_id>15919</project_id>
      <project_id>16233</project_id>
      <project_id>16315</project_id>
      <project_id>16339</project_id>
      <project_id>16978</project_id>
      <project_id>16979</project_id>
      <project_id>17218</project_id>
      <project_id>17303</project_id>
      <project_id>17336</project_id>
      <project_id>17337</project_id>
      <project_id>17692</project_id>
      <project_id>17906</project_id>
      <project_id>17966</project_id>
      <project_id>18118</project_id>
      <project_id>18336</project_id>
      <project_id>18759</project_id>
      <project_id>19086</project_id>
      <project_id>19763</project_id>
      <project_id>19923</project_id>
      <project_id>20175</project_id>
      <project_id>20317</project_id>
      <project_id>20329</project_id>
      <project_id>20415</project_id>
      <project_id>21161</project_id>
      <project_id>28022</project_id>
      <project_id>30241</project_id>
      <project_id>30545</project_id>
      <project_id>33206</project_id>
      <project_id>34481</project_id>
      <project_id>34484</project_id>
      <project_id>34517</project_id>
      <project_id>34767</project_id>
      <project_id>36449</project_id>
      <project_id>37421</project_id>
      <project_id>37855</project_id>
      <project_id>38283</project_id>
      <project_id>38800</project_id>
      <project_id>41048</project_id>
      <project_id>44057</project_id>
      <project_id>45123</project_id>
      <project_id>45242</project_id>
      <project_id>45682</project_id>
      <project_id>45747</project_id>
      <project_id>45759</project_id>
      <project_id>46083</project_id>
      <project_id>47001</project_id>
      <project_id>47421</project_id>
      <project_id>48002</project_id>
      <project_id>48778</project_id>
      <project_id>49010</project_id>
      <project_id>49154</project_id>
      <project_id>49984</project_id>
      <project_id>50637</project_id>
      <project_id>50810</project_id>
      <project_id>52002</project_id>
      <project_id>52649</project_id>
      <project_id>52707</project_id>
      <project_id>52747</project_id>
      <project_id>53131</project_id>
      <project_id>53231</project_id>
    </projects>
  </descriminator>

(以下略)

RDF ではあるけど、RSS じゃあないのか。残念。せっかく巨大な RSS に巡り会えたと思ったのにね。

というか、
<!DOCTYPE trove-listing SYSTEM "http://freshmeat.net/backend/fm-trove-0.1.dtd">
ってちゃんと書いてある。同じディレクトリに fm-trove-0.1.dtd などのファイルが置いてある時点で気づくべきだったな。

RSS で最大サイズなのは fm-releases-global.xml かな。
http://download.freshmeat.net/backend/fm-releases-global.xml

サイズは 80365バイト。うーん、大したことないね。「もっと強い奴と戦いたい!」って感じ。

あー、どこかに巨大な RSS や Atom は無いかな。アルバム1枚分の mp3 を Base64 エンコードして RSS に入れて配信するとか・・・これは巨大ではあるけど品性に欠けるか。そうだなあ、Wikipedia の全データを RSS に叩き込むとか、青空文庫の全作品を RSS にして配布するとか、そういうクールでアグレッシブなことをどこかでやってないかなあ。

2005-03-16 (Wed)

* RSS を XSLT で html に変換して見栄え良く表示する

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [XML] [RSS]

Landscape の RSS に XSL (スタイルシート) を付けて、RSS を XSLT (XSL Transformations) を施した html として表示するようにした。

- XSLT で RSS を見栄え良く

当サイト Landscape は直近7日分の記事の全文入り RSS と、全記事・全文入りの RSS を配布している。

直近7日分の記事全文を含む RSS
http://sonic64.com/cl.xml

すべての記事全文を含む RSS
http://sonic64.com/cl-full.xml

これらは生の XML ファイルなので、そのままブラウザで閲覧しようとすると XML データがそのまま表示される。Mozilla などで Landscape の RSS を表示すると、以下のように「XSL が無いから仕方なく XML ドキュメントツリーを表示するよ」といった主旨のメッセージが表示される。
この XML ファイルにはスタイル情報が関連づけられていないようです。以下にドキュメントツリーを表示します。

実際に RSS のデータを利用するときは Bloglines や RSS リーダーで処理して表示させることがほとんどだと思われるので、 XSL が無くても問題はない。ただ、XSL があった方がブラウザで生の XML データを表示させたときに見やすい。というわけで、XSL を書いて RSS を html に変換して表示するようにしてみる。

- 先達の知恵を使え

ゼロから XSL を書き起こすのは大変そうなので、先達の書いた XSL を修正して自分好みの XSL を作ることにする。

日本で RDF/RSS やセマンティックウェブといったら The Web KANZAKI http://www.kanzaki.com/ だ。http://www.kanzaki.com/info/memo.xsl を参考に Landscape の XSL を記述する。

- RSS の content:encoded を XSL 変換後の文書に表示

2004-10-26 の「content:encodedが足りねぇ… じゃんじゃん 持ってこい」で書いたように、私は RSS に記事全文を入れる派だ。なので、今回の XSL でも content:encoded のデータをそのまま表示させるようにしたいところだ。

Web KANZAKI の XSL は content:encoded ではなく description を表示するようにしているので、ここは修正が必要。以下のようにした。

content モジュールの指定を追加。
description を呼び出している部分を content:encoded を呼ぶようにし、disable-output-escaping 属性を属性値 yes で追加。

  xmlns:content="http://purl.org/rss/1.0/modules/content/"
(略)
<xsl:value-of select="content:encoded" disable-output-escaping="yes"/>

- 完成した XLS

html で使っていたスタイルシート (CSS) を XSL 変換後の文書にも流用したかったので、同じような論理構造で html を出力するように XSL を仕上げた。以下に仕上げた XSL を引用しておく。favicon を呼び出すための記述なども追加しておいた。

http://sonic64.com/rss.xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:rss="http://purl.org/rss/1.0/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  exclude-result-prefixes="rdf rss dc content"
>

<xsl:template match="/">
  <xsl:apply-templates select="rdf:RDF"/>
</xsl:template>

<xsl:template match="rdf:RDF">
  <html xml:lang="ja" lang="ja">
  <head>
    <title><xsl:value-of select="rss:channel/rss:title"/></title>
    <meta http-equiv="Content-Script-Type" content="text/javascript" />
    <link rel="stylesheet" href="diary.css" type="text/css" />
    <link rel="alternate" type="application/rss+xml" title="RSS" href="http://sonic64.com/cl.xml" />
    <link rel="alternate" type="application/rss+xml" title="RSS full archive" href="http://sonic64.com/cl-full.xml" />
    <link rel="shortcut icon" href="favicon.ico" />
  </head>
  <body>
    <h1><a href="{rss:channel/rss:link}"><xsl:value-of select="rss:channel/rss:title"/></a></h1>

    <p><a href="{rss:channel/rss:link}"><xsl:value-of select="rss:channel/rss:title"/></a> の記事<xsl:value-of select="count(rss:item)"/>件の全文です。RSS フィードを XSL 変換して表示しています。この RSS フィードをお使いの RSS リーダーに登録すれば <a href="{rss:channel/rss:link}"><xsl:value-of select="rss:channel/rss:title"/></a> の RSS を購読できます。</p>

    <xsl:apply-templates select="rss:item"/>

    <p class="credit">斎藤 宏明 <a href="mailto:sonic64@infoseek.jp">sonic64@infoseek.jp</a></p>
  </body>
  </html>
</xsl:template>

<xsl:template match="rss:item">
  <div class="day">
  <p class="pdate"><span class="date"><a href="{rss:link}"><xsl:value-of select="substring(dc:date, 1, 10)" /> </a></span></p>
  <div class="section">
    <div class="subtitle"><h2><a href="{rss:link}"><span class="sanchor">*</span></a> <strong class="clitemheader"><xsl:value-of select="rss:title"/></strong></h2>
    </div>
    <div class="sec_body">
    <xsl:value-of select="content:encoded" disable-output-escaping="yes"/>
    </div>
  </div>
  </div>
</xsl:template>

</xsl:stylesheet>

- RSS にスタイルシートを呼び出す記述を追加

RSS からスタイルシートを呼び出すための記述を追加する。

以下を RSS に追加するだけ。非常に簡単。
<?xml-stylesheet href="rss.xsl" type="text/xsl" media="screen"?>

- Mozilla の XSLT プロセッサは disable-output-escaping="yes" を無視する

Mozilla で動作確認をしてみると、content:encoded 部分が意図したとおりに表示されない。content:encoded 中の html タグがエスケープされているような動きをしている。

エスケープされるのを防ぐために、disable-output-escaping="yes" を追加しておいたが、それが効いていないようだ。
<xsl:value-of select="content:encoded" disable-output-escaping="yes"/>

どうやら、Mozilla に搭載されてる XSLT プロセッサは disable-output-escaping="yes" の指定を無視するようだ。その結果、content:encoded の中身がそのまま表示されてしまうわけだ。この現象は Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP; rv:1.7.5) Gecko/20041108 Firefox/1.0 の環境で発生した。

なんとかならないかなあ。JavaScript を使って UserAgent が Mozilla のときは document.write でレンダリングさせたりすればいいのかな。なんか手間がかかるなー。仕方ないので今回はとくに対処しないことにする。

追記。2005-03-19 に「Mozillaで XSLT適用後のDOMのinnerHTML にアクセスするとエラー」を書いた。結局問題は解決できなかったけど。

- xsl:output を付けると IE6 で文字化け

実は IE でも問題が発生していた。

<xsl:output method="html" encoding="utf-8" />
XSL に上記の指定を付けると WindowsXP の IE6 では盛大に文字化けしてくれる。どうやら出力を Shift_JIS として解釈してる模様。仕方がないので、xsl:output は指定しないことにした。

- さあ XSLT 付きの RSS を見てみよう

さあ、丹誠込めて作った XSL を適用した RSS をぜひ見て欲しい。

直近7日分の記事全文を含む RSS
http://sonic64.com/cl.xml

すべての記事全文を含む RSS
http://sonic64.com/cl-full.xml

直近7日分の方はせいぜい数十KB のサイズなのですぐにレンダリングされるけど、すべての記事全文の方はかなり重い。そもそも RSS 自体が 3MB 程度もあるからなー。

で、なにが便利なの? って聞かれるとちょっと困る。

「すべての記事全文を含む RSS」の方は利用価値があるかも。ブラウザの検索機能などを使って全文検索をしたいときに使えるだろうしね。あとは、Landscape の中身を全部印刷して読みたいときとかに有用かな。たぶん合計で数百ページ以上になると思うけど。

- 今後の野望

今回は比較的質素な XSL を書いたが、もっといろんな機能を盛り込んだ html を出力する XSL を書いても面白いかも。Google の検索窓を付けたり、amazon のライブリンク付けたり、記事一覧を付けたりして html 版と同じような見た目を再現してみようかな。あんまり意味ないけどね。

あとは http://sonic64.com/rss.xsl にアクセスすると生の XML 文書が表示されるのはなんか中途半端なので、XSL を XSL で見栄え良くするというのはどうだろう。

2005-02-11 (Fri)

* 2ちゃんねる ニュースヘッドラインの公式 RSS

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [2ch] [RSS]

2ちゃんねる ニュースヘッドラインの公式 RSS
http://headline.2ch.net/bbynews/news.rss

2ちゃんねる ヘッドラインの中身を RSS にしたもの。
2ちゃんねる ヘッドライン BBY (news)
http://headline.2ch.net/bbynews/

- RSS の中身

こんな感じ。
RSS は2.0。スレの >>1 の内容が description に入っている。板名は略記されたものが category としてマークアップされている。 pubDate はスレ立ての時刻。

<item>
  <title>[速+] 【国際】ロシアとウクライナ、サウジアラビア、ベトナムの世界貿易機関(WTO)年内加盟実現を…欧州委員</title>
  <link>http://news19.2ch.net/test/read.cgi/newsplus/1108175125/</link>
  <category>速+</category>
  <description>★ロシアなどWTOの年内加盟実現を・欧州委員  【ワシントン11日共同】訪米中の欧州連合(EU)のマンデルソン欧州委員(通商担当)は 11日、ワシントン市内で講演し、ロシアなど4カ国の世界貿易機関(WTO)加盟について、 今年12月に香港で開くWTO閣僚会議で実現したい考えを明らかにした。  マンデルソン委員は「WTO加盟国の拡大は優先事項だ。中国との経験がその有益さを 示している」と述べ、新興国をWTOルールに取り込んでいく重要性を指摘した。  4カ国は、加盟交渉が大詰めを迎えているロシアとウクライナ、サウジアラビア、ベトナム。  同委員はまた、イラク戦争を機にあつれきが生じた米国と欧州の関係修復の必要性も強調。 新多角的貿易交渉(ドーハ・ラウンド)成功に向けた協力を呼び掛けた。 日経新聞 http://www.nikkei.co.jp/news/kaigai/20050212STXKG000812022005.html</description>
  <pubDate>Sat, 12 Feb 2005 11:25:25 +0900</pubDate>
</item>

- bloglines で読むのには適してない

bloglines で購読するようにしてみたが、あまりの玉石混淆ぶりにもう購読をやめようかと思ってる。
だって、以下のようなニュースに混じって、

【社会】中国が東シナ海で勝手に進めるガス田開発に、日本の銀行が130億融資
http://news19.2ch.net/test/read.cgi/newsplus/1108168025/
[速+] 【社会】中国が東シナ海で勝手に進めるガス田開発に、日本の銀行が130億融資に

★中国・ガス田のパイプライン敷設 旧輸銀が130億円融資 ・東シナ海で中国が開発を進めている天然ガス田から上海まで海底パイプ  ラインを敷設する事業に対して、政府系金融機関の旧日本輸出入銀行  (現在の国際協力銀行)が一九九六年八月に、総額一億二千万ドル  (約百三十億円)の融資を実施していたことが分かった。

ちんこもげた
http://live14.2ch.net/test/read.cgi/liveplus/1108149263/
[実+] ちんこもげた
だkdljぁ

とかいうニュースが入ってくるんだもん。2ちゃんねるはそういう場所だってことはわかるが、bloglines だとカテゴリ毎にフィルタリングする機能がないし、読みにくい。オフィシャルな RSS なのは良いことだし、板ごとに配信するなどの工夫があると利用価値がさらに増すだろう。

あと、スレがものすごい勢いで立つから、すぐに bloglines の1フィードあたり200件の制限に引っかかってしまう。全記事を追跡するには向かない。もっとも、全記事を追跡なんて読むのが大変でやってられないと思うけど。

bby -- スレッド情報一元管理システム構築スレ2 から。
http://qb5.2ch.net/test/read.cgi/operate/1086868799/l50

2005-02-03 (Thu)

* .net で RSS を扱うためのライブラリ RSS.NET

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS] [.net]

RSS.NET: An open-source .NET class library for RSS feeds
http://www.rssdotnet.com/
RSS.NET is an open-source .NET class library for RSS feeds. It provides a reusable object model for parsing and writing RSS feeds. It is fully compatible with RSS versions 0.90, 0.91, 0.92, and 2.0.1, implementing all constructs.

RSS.NET はオープンソースの RSS フィード用の .NET クラスライブラリです。RSS のパースや出力用の再利用可能なオブジェクトモデルを提供します。実装や構造は RSS バージョン 0.90, 0.91, 0.92, 2.0.1 互換です。

2005-01-27 (Thu)

* 自分の名前やあだ名を RSS 検索に登録しておく

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [メモ] [RSS]

RSS によって、特定のキーワードの出現をチェックし続けることが簡単になっている。RSS じゃなくてもできるけど、RSS という標準的なフォーマットがあるおかげで追跡しやすくなっている。

[結] 検索結果をRSSでウォッチするという方法 - 結城浩の日記
http://www.hyuki.com/diary/20050126064005
RSSを使った検索サイトの中には、(1)「BlogのRSS配信を対象として検索する」だけではなく、 (2)「特定のキーワードを検索した結果をRSSで配信する」という機能を持つものがある。
(略)
たとえば、結城の場合には、私のサイトに言及してくれている人を追うために「結城浩」と「hyuki」という単語をウォッチしている。それから「Java」「Perl」「暗号」なども。

これ、私もやってます。私の場合はネットワーク上でよく使う名前と本名。私を本名で名指しにする記事ってまず無いと思うけど、まあいつかそんな日も来るかもしれないので登録。

で、笑ったのが以下の記事。

フィッシング [dk]読書記録ChangeLog / 2005-01-26
http://dkiroku.com/2005-01-26.html#2005-01-26-47
「結城浩」
「hyuki」
「Java」
「Perl」
「暗号」

記事の内容はこれだけで、最初はどんな意味を持つ記事なのかわからなかった。記事の意図がわかったところでかなり笑った。名前検索スパムとでも呼ぶのがふさわしいかな。というか、私のこの記事もか。

2005-01-09 (Sun)

* favicon.ico が bloglines で表示されない理由

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [HTML] [RSS]

当サイトの favicon は なぜか bloglines では表示されない。過去に bloglines に質問メールを送ったことがあるが、修正されないままになっている。favicon については 2004-04-11 の「favicon.ico を作る」の説明を参照。

- bloglines で favicon が表示されるサイトと表示されないサイト

X *ole.net : フォーラム
http://blog.xole.net/forum/topic.php?tid=6
ところでBloglinesでは、特にRSSにfavicon埋め込まなくても表示できたりするはず。
でも表示できるblogとできないblogがあって、そろそろ探らないとなー、と思いつつめんどくさい・・・。

私も過去にこの疑問を持ったことがあり、bloglines のサポートに問い合わせたことがある。以下にそのメールを転載。

- bloglines のサポートに送った質問メール

From: sonic64@example.com
Subject: Web Form: [Feeds]
Date: 10 Aug 2004 06:17:15 -0000


Hello I am Saito Hiroaki, bloglines user and I provide RSS in my website.

I made favicon.ico and upload it, but I can not browse that favicon.ico
in the bloglines.

My website URL: http://sonic64.hp.infoseek.co.jp/
favicon.ico URL: http://sonic64.hp.infoseek.co.jp/favicon.ico
RSS URL: http://sonic64.hp.infoseek.co.jp/cl.xml

I subscribe my RSS ( http://sonic64.hp.infoseek.co.jp/cl.xml ) myself in
bloglines, but I can not see it
in blosliens "My feeds" list ( http://www.bloglines.com/myblogs?mode=2 ).

How can I browse my favicon.ico in bloglines?
I searched http://www.bloglines.com/help/faq ,
but I can not find answer.

If bloglines RSS crawler check favicon.ico only once,
would you change that methods?
For example, crawler check favicon.ico every new subscribing.

Thank you.

私の英語は拙いので、質問したかったことを日本語でも書いておく。

From: sonic64@example.com
Subject: Web Form: [Feeds]
Date: 10 Aug 2004 06:17:15 -0000

こんにちは。saito hiroaki と申します。
私は bloglines ユーザーで自分のサイトでも RSS を提供してます。
favicon を作ったのですが bloglines で表示されません。

My website URL: http://sonic64.hp.infoseek.co.jp/
favicon.ico URL: http://sonic64.hp.infoseek.co.jp/favicon.ico
RSS URL: http://sonic64.hp.infoseek.co.jp/cl.xml

自分のサイトを bloglines に登録していますが、"My feeds" で
favicon が見られないんです。

FAQ を見ましたが答えは見つかりませんでした。

もし bloglines の RSS クローラーが一度しか favicon.ico を
チェックしないんだったら、チェック方法を変えて頂けませんか?
たとえば、新規の購読ユーザーが増えるごとにチェックするとか。

ありがとうございました。

・・・こうして読み返すと日本語にしても意味不明な部分があるな。技術系の質問メールなんだから最後のチェック方法云々は余計だ。「どうなってほしいか」、「問題は何か」、「私が何をしたか」だけ書いた方が簡潔だったな。あとタイムスタンプ見ると朝の6時。本当にそんな時間に送ったのかなあ?

- bloglines サポートからの返信

で、もらった返信。

From Bloglines Customer Support Thu Aug 12 13:01:56 2004
X-Apparently-To:  sonic64@example.com via web605.mail.yahoo.co.jp; Thu, 12 Aug 2004 13:00:29 +0900
Return-Path:  <bounce-66-8348@trustic.trakken.com>
Received:  from c6.neotonic.com (66.7.159.76) by mta23.mail.mci.yahoo.co.jp with SMTP; Thu, 12 Aug 2004 13:00:28 +0900
Received:  by c6.neotonic.com (Postfix, from userid 5701) id 31EB22FCFB; Wed, 11 Aug 2004 21:01:57 -0700 (PDT)
Date:  Wed, 11 Aug 2004 21:01:56 -0700
From: "Bloglines Customer Support" <support@bloglines.com>
To: sonic64@example.com
Subject:  Re: [#8348] Web Form: [Feeds]
Message-ID:  <#42.209c.3393b35b.411aebb4.2@trustic.trakken.com>
MIME-Version:  1.0
Content-Type:  text/plain; charset="iso-8859-1"
In-Reply-To:  <1092118635.647710170.31911.sendContact@bloglines.com>
User-Agent:  Neotonic Trakken/2.11.2
Content-Length:  564


Hello,

I've reset the database for that blog, and the icon will be crawled within
a couple of days.

Thanks,Mark
--
Mark Fletcher
Bloglines
http://www.bloglines.com

日本語にするとこんな感じか。and って「そうすれば」とか「その結果」って訳すのが適切なのかな?
あなたの blog のデータベースをリセットします。そうすればアイコンは一両日中に再クロールされるでしょう。

返信をくれた Mark Fletcher 氏は bloglines の創設者で CEO のとのこと。マジで? 私なんかの質問メールに答えてていいの? もっとやらなきゃならないが仕事あるでしょうに。まあ CEO 名義でサポート担当がメールを返信してるだけなのかもしれないけど。

そういえば、ある小学生が任天堂のディスクシステムのディスクカードを壊してしまってダメもとで任天堂に送ったら、マリオを作った宮本さんが丁寧な返事をくれて、しかも小学生なので修理代をとらなかったという話をどこかで読んだな。あと、「D の食卓」を作ったワープという会社では社長の飯野賢治氏がユーザーサポートの電話対応をやってたとかいう話も聞いたことがある。ロマンシングサガ2のアヴァロン皇帝みたいに、偉い人ほど前線に出たがるものなのかな。

話がそれた。CEO から返事をもらったので一安心して favicon が表示されるのを待ってたが、結局一週間くらい経っても favicon は表示されるようにはなりませんでしたとさ。

- しょうがないからテストしてみたわけですよ

仕方がないので 2005-01-08 の 「サイト名簡易表記は favicon.ico でいいじゃん」で書いた「RSS でも favicon」の記述を追加してさらに待ってみたがダメ。
<image:favicon rdf:about="http://sonic64.hp.infoseek.co.jp/favicon.ico"
  image:size="small">
  <dc:title>Landscape - エンジニアのメモ</dc:title>
</image:favicon>

favicon.ico ファイルのタイムスタンプを更新してもダメ。別の favicon.ico ファイルに差し替えてもダメ。

で、http://sonic64.hp.infoseek.co.jp/cl.xml 以外の URL に全く同じ内容の RSS を置いてみて、それを bloglines に新規登録したら、新規登録した分については表示された。でも、元の方は変わらない。ダメだー。

- 何が明暗を分けたんだろう?

当サイトが favicon を用意したのは 2004-04-11 の「favicon.ico を作る」の時から。bloglines はその数か月前から使っていたし、自分のサイトを bloglines に登録したときには、登録者が数人いたことも覚えているので、Landscape の RSS が bloglines に登録されたのは favicon を用意するよりかなり前だ。

以下、推測。

bloglines に登録される前から favicon を用意しているサイトは問題なく favicon が表示される。
でも、bloglines に登録されたあとに favicon を用意したサイトは、favicon が表示されないことがある。
いくつかのサイトでは favicon をあとから用意しても見事に表示されてる例があるので、100% 表示されないというわけではない。

- さあどうする?

RSS の URL を変えればたぶん favicon は表示されるようになる。でも、そんなことはしたくない。せっかく読んでくれてる人に RSS の登録 URL 変更という手間をかけさせたくない。でも、bloglines で favicon が表示されれば視認性が高まる。うーん、どうしよう? そのうちまた bloglines にメールしてみる?

2005-01-08 (Sat)

* サイト名簡易表記は favicon.ico でいいじゃん

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [HTML] [RSS]

記事の先頭に [N] とか [を] とか [徳] といったサイト名を短縮したような簡易表記があれば、タブブラウザのタブとか検索エンジンの検索結果一覧とか RSS リーダーなどでサイトを識別しやすくなるという主張がある。[を] 自分のサイトの簡易表記 http://nais.to/~yto/clog/2005-01-04-4.html などが発端。

- favicon でいいじゃん

私はこういう用途こそ favicon が適していると思う。画像なので表現力も段違いだし。

favicon は 2004-04-11 の「favicon.ico を作る」で書いた http://www.chami.com/html-kit/services/favicon/ などのサービスを使えば簡単に作れる。Firefox や Mozilla を使っているのであればタブやアドレスバーに favicon を表示してくれる。Landscape の記事はすべて favicon 入りなので、Firefox や Mozilla を使うと全ページで http://sonic64.com/favicon.ico が表示されてるはず。IE で上記リンクを見ても真っ黒な画像しか表示されないかもしれないけど、Landscape をお気に入りに入れればちゃんと favicon として見られる。

- RSS でも favicon

RSS で favicon を指定することもできるそうだ。

hail2u.net - Weblog - RSSにfavicon
http://hail2u.net/blog/rss/favicon_in_rss.html

Landscape の場合はこんな感じ。
<image:favicon rdf:about="http://sonic64.com/favicon.ico"
  image:size="small">
  <dc:title>Landscape - エンジニアのメモ</dc:title>
</image:favicon>

以前は RSS に上記の記述を入れていたのだが、RSS Validator などでエラーになるので外してしまった。そもそも解釈してくれるクライアントってあるのかな。2004-12-08 に書いた「RSS に image rdf:about でサイトのロゴを埋め込む」は解釈してくれるクライアントは結構あるけど、上記の favicon の指定を解釈してくれるクライアントって見たことない。

- テキストによる簡易表記の利点と欠点

簡易表記の利点はテキストで表現しているのでいろんな所に埋め込めるという点。たとえば Sleipnir 1.66 は タブに favicon を表示する機能がないが、タイトルに埋め込んでおけば必ず表示される。RSS リーダーでも無問題。テキストの強みだ。

でも、短縮表示してるとそのうち重複してきて混乱しそう。「ネタフルにあやかりたいし、Netscape ユーザなので私のサイトでも [N] にしました」とかいうわけわからないことが起きたりして。で、本家では類似サイトとの差別化を求めてよくわからんアラビア文字とか使うようになり、アラビア文字を読める人なんて日本では少ないからサイトの識別に使えなくなったりしそう。

2004-12-20 (Mon)

* dc:subject でカテゴリを記述

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS]

Bloglines を読んでいると、記事のタイトルの下に以下のような記述を見かけた。
By nefelpitor on コラム

- dc:subject でカテゴリを記述

RSS を見てみると、dc:subject でその記事が所属するカテゴリを追加しているようだ。
<dc:subject>コラム</dc:subject>

これはいい。早速私もやってみよう。

- カテゴリが複数の場合はどうするの?

RSS 出力メソッドを修正していて疑問にあたった。複数のカテゴリの場合はどう記述したら良いんだろう? Googleで dc:subject 複数を検索したところ、2ちゃんねるのスレッドがヒット。

RSS/RDF
http://pc5.2ch.net/test/read.cgi/php/1078216600/104-106
104 :nobodyさん :04/10/18 01:04:00 ID:TxxtCFyV
RSSで、その記事のトピックを表すのにdc:subjectを使おうと思ってるんですが、
複数の分野にわたる場合、どのように記述すればいいのでしょうか?
ぐぐって大まかにRSSを見てまわったんですが、単一のdc:subjectのみが記述されているものばかりでした。

でも2つほど方法が見つかりまして、
1つは ttp://www.kanzaki.com/docs/sw/dc-a-matic で複数subjectを指定して生成されるRDFデータのように、

<dc:subject>topic1</dc:subject>
<dc:subject>topic2</dc:subject>
:

と羅列していく方法で、もう一つは
ttp://www.kanzaki.com/docs/sw/rdf-model.html#ex8 の dc:creator のように 、

<dc:subject>
<rdf:Bag>
<rdf:li>topic1</rdf:li>
<rdf:li>topic2</rdf:li>
<rdf:Bag>
</dc:subject>

と、RDF(RSS1.0ですので)のコンテナを用いる方法でした。
しかし、どちらを使うべきなのかがわかりません。
どちらを使うべきなんでしょうか?


105 :nobodyさん :04/10/18 01:21:35 ID:???
RSS を取り扱うアプリがちゃんと対応してないからね。
前者の方が少なくとも一つは解釈してくれるだろうから安全だと思う。


106 :104 :04/10/18 20:25:25 ID:???
>>105
確かにそうですね、とりあえず羅列することにします。
レスありがとうございました。

ただ、実際に世の RSS を見ていると、一つの dc:subject の中にカンマで区切って並べるやり方をしてる方が多いみたいだ。こんな感じ。
<dc:subject>Linux, SQL, Perl, Postgres</dc:subject>

どっちにしよう? とりあえず複数の dc:subject を並べるようにしてみるか。2004-12-19 で書いた http://www.w3.org/RDF/Validator/ を始めとする RSS Validator でチェックしても問題なかったし。

2004-12-19 (Sun)

* RSS Validator RSS/RDF の構文・妥当性と文法チェック

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS]

RSS の文法や構文が正しいかどうかを検証してくれるサイトたちをメモ。
RSS の文法をチェックするには、フォームに RSS の URL を入力するだけ。

Feed Validator for Atom and RSS
http://feedvalidator.org/
Atom も RSS もチェックできるようだ。

W3C RDF Validation Service
http://www.w3.org/RDF/Validator/
W3C のサイト。ここが一番厳しそうな予感。

RSS Validator
http://rss.scripting.com/
シンプルな画面。

実際に Landscape の RSS を各検証サービスでチェックしてみる。

- feedvalidator.org の Feed Validator で Landscape の RSS をチェック


http://feedvalidator.org/
Warning
This feed is valid, but may cause problems for some users. We recommend fixing these problems.

Your feed appears to be encoded as "utf-8", but your server is reporting "US-ASCII"

警告が出ている。「RSS は問題ない。でも、RSS は UTF-8 で記述されてるのに HTTP サーバは US-ASCII だって言ってるよ」という内容か。これは infoseek のサーバを利用しているだけの私にはどうしようもないので無視することにする。

- www.w3.org の W3C RDF Validation Service で Landscape の RSS をチェック


もともと POST メソッドでクエリを送っているフォームを GET メソッドに変更したので、長い URL になってしまった。

http://www.w3.org/RDF/Validator/
Validation Results
Your RDF document validated successfully.

さっきは HTTP ヘッダの矛盾を指摘されたが、今回は問題なし。

- rss.scripting.com の RSS Validator で Landscape の RSS をチェック

http://rss.scripting.com/
Congratulations -- the RSS feed validates! You may include the following logo text into your page if you want to express your support for RSS.

これも問題なしだね。

2004-12-15 (Wed)

* 天気予報の RSS 配信

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS]

goo が天気予報を RSS で配信し始めた。実にありがたい。

天気予報 気象情報 - goo 天気
http://weather.goo.ne.jp/

goo、全国約140カ所の天気情報や地震情報をRSSで配信
http://internet.watch.impress.co.jp/cda/news/2004/12/15/5819 ...
goo 天気では、全国約140カ所における今日と明日の天気情報をRSS 2.0形式で配信する。更新頻度は気象庁の発表に合わせて、6時30分・11時30分・17時30分の3回更新される。また、地震情報のRSSも地震発生時に随時配信される。

更新は一日三回か。

- 配信される RSS の中身

配信される RSS の中身を見てみる。

栃木の天気 南部(宇都宮)の今日・明日の天気
http://weather.goo.ne.jp/area/4110.rdf
<item>
<title>明日(12/16)の天気「晴れ 時々 くもり」 - goo 天気</title>
<link>http://weather.goo.ne.jp/area/4110.html</link>
<description>晴れ 時々 くもり</description>
<content:encoded>
<![CDATA[
<table width="50%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right" style="margin-left:10px;"><font size="-1">15日17時、気象庁発表</font></td>
</tr>
</table>
<img src="http://weather.goo.ne.jp/common/img/clear.gif" height="5" width="1" alt=""><br>
<table width="50%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#003366">
<table width="100%" border="0" cellspacing="1" cellpadding="2">
<tr>
<td align="center" bgcolor="#eeeedd" width="20%">日付</td>
<td align="center" bgcolor="#eeeedd" width="80%">12月16日(木)</td>
</tr>
<tr>
<td align="center" bgcolor="#eeeedd" width="20%">天気</td>
<td align="center" bgcolor="white" width="80%"><a href="http://weather.goo.ne.jp/redir/go.php?id=weather&fr=/weather/rss&to=http://weather.goo.ne.jp/area/4110.html"><img src="http://weather.goo.ne.jp/weather/img/s/big/101.gif" alt="晴れ 時々 くもり" width="65" height="25" border="0"></a><br><font size="-1"><b>晴れ 時々 くもり</b></font></td>
</tr>
</table>
</td>
</tr>
</table>
<img src="http://weather.goo.ne.jp/common/img/clear.gif" height="5" width="1" alt=""><br>
<table width="50%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right" style="margin-left:10px;"><font size="-1"><a href="http://weather.goo.ne.jp/redir/go.php?id=weather&fr=/weather/rss&to=http://weather.goo.ne.jp/area/4110.html">詳細はこちら</a></font></td>
</tr>
</table>
]]>
</content:encoded>
<pubDate>Wed, 15 Dec 2004 19:10:40 +0900</pubDate>
</item>

入ってるのは日付と天気だけ。それらに加えて、降水確率、気温、風向き、風速、注意報や警報などのデータもあるとうれしいんだけどな。あと xml 的に再利用しやすい形式になるとさらに良い。内容の充実に期待する。

- 宇都宮の天気

栃木の天気 南部(宇都宮)の今日・明日の天気
http://weather.goo.ne.jp/area/4110.html
http://weather.goo.ne.jp/area/4110.rdf

定期的にブラウザで見るだけなら現在の内容でも十分。さっそく Bloglines に登録、と。
http://www.bloglines.com/sub/http://weather.goo.ne.jp/area/4 ...

2004-12-08 (Wed)

* RSS に image rdf:about でサイトのロゴを埋め込む

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS]

少し前から Landscape の RSS にはロゴが埋め込まれている。image rdf:about に対応した RSS リーダーや Bloglines で読んでいると、右上に http://sonic64.com/img/rss_logo.png が表示される。

どうなるかは実際に見た方が早いだろう。以下のリンクから Landscape を bloglines に登録できる。
http://www.bloglines.com/sub/http://sonic64.com/cl.xml

ちなみに、このロゴの画像は 2004-04-11 の「favicon.ico を作る」で作った画像をちょっと編集して作ったものだ。

- RSS にサイトのロゴを埋め込む

画像があればあとは RSS に記述するだけ。やり方は簡単。ルートに xmlns:image を追加し、image rdf:about を記述する。念のため RSS の文法チェックをして完了。

<rdf:RDF
(略)
  xmlns:image="http://purl.org/rss/1.0/modules/image/"
(略)
>

(略)

<image rdf:about="http://sonic64.com/img/rss_logo.png">
  <title>Landscape - エンジニアのメモ</title>
  <link>http://sonic64.com/</link>
  <url>http://sonic64.com/img/rss_logo.png</url>
</image>

- RSS 利用度の効果測定に使える

2004-10-26 の「content:encodedが足りねぇ… じゃんじゃん 持ってこい」で書いた、「content:encoded に全文が入っていると本体のサイトのページビューが減っちゃう」への対策としてこの手法を使える。Bloglines などで読まれた場合はサイトに直接 http リクエストを出さずに記事を読めるので、見かけのページビューが減る。サイトアイコンを付けておけば、こういった隠れた読者をカウントできる。

HTML メールに埋め込まれた Web バグ (盗聴器) のような使い方ができる。さらに、記事中に自分のサイトへアクセスするような画像とか埋め込んでおけば記事単位でアクセス数のカウントができる。infoseek では httpd のアクセスログを提供してくれないので、当サイトでは使えない手法だけど。

- 参考

RSSにサイトのロゴを埋め込む方法 : NDO::Weblog
http://naoya.dyndns.org/~naoya/mt/archives/000296.html

RSS(RDF Site Summary)によるサイト情報の要約と公開
http://www.kanzaki.com/docs/sw/rss.html

2004-11-29 (Mon)

* chalow が出力する RSS に CDATA で全文を入れる

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [chalow] [ChangeLog メモ] [RSS]

たつをさんが面白そうなことを始めてるなあ、と思ったらあっという間にいろいろできてた。さすがだ。

- chalowでitem別ページ

http://nais.to/~yto/clog/2004-11-27-3.html

item 別ページ大歓迎。私もこれやろうとしたんですよ。削除アイテムの扱いをどうするか、2004-01-25 の「記事単位での html 出力と記事の削除」で悩んだり。そのときの結論も「削除しない」とか、「削除したらダミーの記事を追加する」とかだった。でも結局、一個ずつファイル作ってたら infoseek では 50MB しかディスク容量が使えないためにあっという間に制限を超えてしまうので断念。もっと容量を使えるサーバに移転すればいいんだけど URL 変えたくないしなあ。

「一記事一 URI」って美しい。SEO を意識してというよりも、自分を含む読み手のことを考えると自然とこうなる。Google の検索結果で、「Landscape - エンジニアのメモ 2004-01-08 」って表示されるより、そのものズバリの「gpg で標準入力からパスワードを渡してバッチ処理で暗号化」って表示された方がわかりやすい。

- item 数と html 生成・ファイル転送

5671 - 「たつをの ChangeLog」の公開item数
http://nais.to/~yto/clog/2004-11-28-2.html
今までの日付ページ1650、月ページ59も引き続き出力するので、8400ページ近くになる。昨晩、rsyncでWebサーバに転送したら35分かかった。

すごい数・・・。こうなってくると DB 使ったり動的生成したくなってきたりするなあ。これもいつもジレンマなんだよなあ。ChangeLog メモの良さを損なわずにいかに便利にスケーラブルにするかは悩ましい問題。

- ChangeLog パーサ

ChangeLogの読み込みとハッシュへの格納
http://nais.to/~yto/clog/2004-11-28-5.html
こういうライブラリがあると実に便利。あとはハッシュへのアクセスを抽象化してあげれば ChangeLog メモクラスとして完成するなあ。エンティティクラスであるためシンプルで使いやすそう。

- RSS に全文入れる

chalow の RSS の description で CDATA
http://nais.to/~yto/clog/2004-11-29-1.html
これからは CDATA で全部どかっと行く。

bloglines で読んでいたら突然全文を読めるようになったのはこういうわけか。素晴らしい。2004-10-26 の「content:encodedが足りねぇ… じゃんじゃん 持ってこい」でも書いたように、私は全文入った RSS が大好き。記事単位でサクサク読めるのが最高。

で、その RSS を Bloglines で見てみると、
相対URLがおかしくなってるなあ。2004-11-27-3.html を
http://nais.to/2004-11-27-3.html にしちゃってる。

私は RSS 中の 相対 URL の補完は以下のように簡単に置換しています。私の場合、../ などの処理は考慮する必要がなかったので楽でした。複雑な相対パスを指定してる場合はちょっとだけ手間が増えますね。
# " のあとに http が無かったら補完。
my $home_page_url = 'http://sonic64.com/';
my $content = RSS_DOCUMENT

$content =~ s%(<a href|<img src)="(?!(https?|JavaScript):)%$1="$home_page_url%ig;

- chalow の機能強化

chalow の不満な所が一気に無くなってゆく
http://tokuhirom.tdiary.net/20041129.html#p03
これまでのバージョンの chalow で気にくわなかった所は

エントリごとのページが生成されない
SEO 的にマズー
見た目的にもマズー
RSS に本文そのものが入らない
という所だったのですが、全部解消って感じですね。

あと、なんかあったっけ?

私は記事の通し番号が変わるという問題を解決したいですね。この問題は私の使い方が変わっていることが原因ですが。

私は LAN の中にだけ公開したい文書は L: カテゴリを指定しています。L カテゴリの文書は、web に出す html を生成するときは p: を指定したプライベートアイテムと同じように削除されます。

この結果、LAN の中だけに公開される文書と web で公開可能な記事が入り交じると、出力先によって記事の数が変わってしまい、同じ記事なのに LAN の中と外で番号が変わってしまうという問題があります。その結果、2004-11-29-1 という日付参照 + アイテム参照の順序が狂います。

これは記事番号の採番を一元的に行う主体や方法がないのが原因で、シンプルなツールなら仕方のないことなんですけどね。

あ、でもなんとかできそうな気がしてきた。結局、出力ファイルの名前空間が YYYY-MM-DD.html や YYYY-MM-DD-ITEM.html しかないから問題になる。だったら、パースの時に独立した名前空間ごとに記事を格納するようにして、html 出力の時も NameSpace-YYYY-MM-DD.html みたいにして名前空間付きでファイル名を生成すればいい。

以前に、「p: を指定されたプライベートアイテムだけを出力したページが欲しい」という要望があったけど、これならできそう。パーサはプライベートアイテムだけのエントリを消すのではなく、プライベートアイテムだけを独立した名前空間に格納してやると。で、html 出力部分 にどの名前空間のデータを渡すかはコントローラが決めるので、p 付きのデータを出力するようなコントローラを書けばいい。

2004-10-26 (Tue)

* content:encodedが足りねぇ… じゃんじゃん 持ってこい

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS]

Landscape の「直近7日分の記事全文を含む RSS」 http://sonic64.com/cl.xml には、記事のタイトルと記事の全文が content:encoded として入っている。他にも記事の先頭400バイト分が description として入ってる。

こうなっている理由は、いろんな方法で記事を読めるようにするため。RSS リーダーを使って読んでもいいし、bloglines などの RSS 閲覧サイトを使ってもいい。また、このRSS を使って何か新しいサービスが生まれるかもしれない。あと、一気読みが楽。それが理由。

ウェブを見て回ってると、RSS を提供しているサイトは多いけど、全文入れてるサイトはまだまだ少数派だと気づくだろう。読む側にとっては全文入りの RSS もあると便利なんだけどなあ。「content:encoded が足りねぇ… 次元、全文入りの RSS だ。じゃんっ じゃんっ 持ってこい」と言いたい。あ、全記事入りである必要はないよ。直近一週間分の RSS に全文入りバージョンを用意してくれればそれで充分。

以下は content:encoded で全文を提供することへの否定的意見に対し、私の考えを列挙。

- content:encoded に全文が入っていると本体のサイトのページビューが減っちゃう

ページビューの多寡を気にするサイト管理者はそう感じるかもしれない。

私もページビューが増えると単純に嬉しい。ゲームでハイスコアを出したときと同じ感覚。レイストームで言ったら パルミラ渓谷の基礎点4000の赤ボートを R-GRAY2 を使って16ロックオンして 999900点出すようなもの。

でも、http://sonic64.com/ のページビューは減っちゃうかもしれないけど、記事が読まれるチャンスは増えるはず。それで良いと思う。そうやって便利になるならいい。RSS のページビューを可視化したければ、RSS の記事ごとにアクセス解析を埋め込むとか、効果測定できる仕組みを付ければいい。

- content:encoded に全文が入っていると解析が重い

データ量が増えるんだから重くなるかもしれない。でも、Landscape の「直近7日分の記事全文を含む RSS」だったら通常40キロバイトくらい、多いときでも100キロバイト未満。その程度だったら楽勝だろう。

ただ、「すべての記事全文を含む RSS」 http://sonic64.com/cl-full.xml は2メガバイトを超えるファイルサイズになってる。ちょっと大きい気もしないでもない。でも、そういうファイルを扱うクライアントがインテリジェントになれば済むこと。全部一気にパースしようとするんじゃなくて、一定サイズ以上だったら逐次処理に切り替えるとか。

- content:encoded に全文が入っていると読むのが大変

そのための description です。それでも多いなら title だけ表示するクライアントを使えばいい。
大事なのは、全部必要になったときに楽にデータを取得できること。

- content:encoded に全文が入ってたら、もはやサマリーじゃない

確かにそうかも。でも、考え方によってはサマリーだ。

広告バナーやナビゲーションリンク、直近30日分の文書のリンク、BlogPeople や MyblogList などのバナーなどのノイズは入っていないから。Landscape としてはそういった余計なものを全部含めてサイトとして構成してるけど、そういう余計な情報を含むことなく記事そのものを見られる。だからサマリーってことで。

ただ、RSS 内にバナーやナビゲーションリンクなど、何から何まで全部入れられたらサマリーじゃないとは思う。

- content:encoded に全文が入っているとネットワークの転送量が増えちゃう

これも確かにそうだろうなあ。HEAD メソッドや If-Modified-Since HTTP リクエストヘッダ、Contnet-Encoding を使った HTTP 圧縮転送など、いくらでもトラフィックを抑える仕組みはあるけど、それをクライアントが実装してなかったら意味がない。クライアント開発者の配慮に期待。

2004-02-21 (Sat)

* api.my.yahoo.com に weblogUpdates.ping すると Wrong content-type エラー

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS] [Ruby]

昨日 2004-02-20 に、api.my.yahoo.com へ更新通知する方法を書いたが、ruby 1.8.1 の XMLRPC 1.2で weblogUpdates.ping を送るとエラーになってしまった。
$ script/update_ping.rb http://api.my.yahoo.com/RPC2
/usr/local/lib/ruby/1.8/xmlrpc/client.rb:543:in `do_rpc': Wrong content-type (RuntimeError)
from /usr/local/lib/ruby/1.8/xmlrpc/client.rb:409:in `call2'
from /usr/local/lib/ruby/1.8/xmlrpc/client.rb:399:in `call'
from script/update_ping.rb:18
update_ping.rb は 2004-02-15 に作ったスクリプト。

何が悪いのかを調べるため、ソースを追いかけてみることにした。/usr/local/lib/ruby/1.8/xmlrpc/client.rb を開く。攻殻機動隊の素子風に言うと「ソースにダイブする」かな。

do_rpc メソッド。538行目付近に例外の発生源があった。
ct = parse_content_type(resp["Content-Type"]).first
if ct != "text/xml"
  if ct == "text/html"
    raise "Wrong content-type: \n#{data}"
  else
    raise "Wrong content-type"
  end
end
resp というのはレスポンスだな。Content-Type レスポンスヘッダの値が text/xml じゃないと例外を発生させてるわけだ。api.my.yahoo.com はどんな Content-Type を返してきてるんだろう? ct を puts で出力させてみる。
text/plain
text/plain か。http://api.my.yahoo.com/rss/ping?u=http://sonic64.com/ を叩いたときと同じだな。

- どう修正しよう?

これって api.my.yahoo.com が悪いのかな。それとも、ruby の XMLRPC が厳格過ぎるのかな。この Content-Type をチェックしている if 文を無効にしてしまえばエラーを回避することはできるが、別のところで破綻しそうな気がする。とりあえず api.my.yahoo.com への更新通知は http://api.my.yahoo.com/rss/ping?u=http://sonic64.com/ に HTTP GET する方法を取ることにしよう。 代替手段もあることだし、XMLRPC のレスポンスは xml じゃないとダメなのか、などの深追いはしないことにする。

追記。その後、例外を rescue してエラーメッセージを標準エラー出力に出力するようにした。これならスクリプトの実行は継続され、weblogUpdates.ping はとりあえず成功するし。というわけでスクリプトは以下のようになった。

#!/usr/bin/env ruby
require 'xmlrpc/client'
require 'uri'

name = "Landscape - エンジニアのメモ"
url  = "http://sonic64.com/"

ping_uri = ARGV.shift
uri = URI.parse(ping_uri)
connection = XMLRPC::Client.new(uri.host, uri.path, uri.port)

result = nil
begin
  result =  connection.call("weblogUpdates.ping", name, url)
  puts "message: " + uri.host + ": " + result["message"]
rescue Exception => e
  puts Time::now.to_s + ' error: ' + ping_uri + ": " + e.message.split("\n")[0];
  puts Time::now.to_s + ' ' + ping_uri + ': weblogUpdates.ping: error'
  exit 1
end

- 余談

今回の記事のタイトルはじつに長くて読みづらい。日本語が7文字しかない。これ以上削れないと思って、「RSS: Ruby: api.my.yahoo.com に weblogUpdates.ping すると Wrong content-type エラー」という長いタイトルにしたんだけど、今考えると Wrong content-type は削ろうと思えば削れるかなあ。「RSS: Ruby: api.my.yahoo.com に weblogUpdates.ping するとエラー」だけでも良かったかも。

2004-02-20 (Fri)

* yahoo.com に RSS の更新を通知する

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS]

2004-02-15 の 「Ruby: weblogUpdates.ping でサイトの更新を通知する Ruby スクリプト」に続き、サイトの更新を通知する weblogUpdates.ping の話。

yahoo.com に更新を通知するには、http://api.my.yahoo.com/rss/ping?u= に続けて自分のサイトの url または RSS の url を記述して HTTP GET するか、http://api.my.yahoo.com/RPC2 に weblogUpdates.ping を送ればいい。

以下に説明がある。
RSS Syndication - Frequently Asked Questions for Publishers
http://my.yahoo.com/s/publishers.html
How do I make sure my latest post appears immediately?

When you update your site, you can also ensure My Yahoo! gets updated by using our API. Our system will schedule an immediate refresh of your site so that My Yahoo! has the most up-to-date version of the RSS feed. The two interfaces currently available are: REST and XML-RPC.
The REST interface is as follows:
URL: http://api.my.yahoo.com/rss/ping
Parameter(s): u=<site or feed url>
HTTP method: GET

Examples:
http://api.my.yahoo.com/rss/ping?u=http://rss.news.yahoo.com/rss/topstories
http://api.my.yahoo.com/rss/ping?u=http://site.example.com/blog
The XML-RPC interface is as follows:
RPC endpoint: http://api.my.yahoo.com/RPC2
Method name: weblogUpdates.ping
Parameter(s):  1. Name of site (string)
              2. URL of site or RSS feed (string)
Returns:  Struct with two members:
          1. flerror (boolean) which is true if an error occurred.
          2. message (string) which contains "OK" (if successful) or
            the error message

- Landscape の更新を yahoo.com に通知するための url

http://api.my.yahoo.com/rss/ping?u=http://sonic64.com/

HTTP GET で更新通知を送信したときのレスポンス。上記の説明では成功時には OK もしくは successful が返ってくる、と書いてあるけど、実際には以下が返ってくる。まだ本格稼働を開始していないからだろうか?
Refresh requested: http://sonic64.com/

2004-02-14 (Sat)

* 複数の RSS を RSS auto-discovery で提供するには

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS]

Landscape の各ページの html には、以下のヘッダが埋め込まれている。
<link rel="alternate" type="application/rss+xml" title="RSS" href="cl.xml">
これは RSS auto-discovery と呼ばれるもので、html から RSS の URL を明示するために使う。人間の目で html を見て RSS のパスを探しても良いのだが、これがあると User-Agent は RSS のパスを html から機械的・自動的に得ることができるので非常に便利だ。メタ情報万歳。

- 複数の RSS を auto-discovery させるにはどう書くの?

Landscape は2つの RSS を提供している。直近の記事だけを載せた RSS と、過去の記事をすべて含んだ RSS だ。現在の Landscape では RSS auto-discovery に直近の RSS の URL のみしか書いていなかったが、今後は過去の記事をすべて含んだ RSS の URL も書きたい。でも、複数の RSS auto-discovery を書きたいとき、どんな風に書けば良いんだろう? スタイルシートを複数指定したい場合は title 属性を変えて link 要素を複数列挙すればいいが、RSS auto-discovery の場合はどうするんだろう?

- 調査

Google で link rel alternate rss 複数を検索。いくつか参考になりそうなサイトがヒット。

NDO::Weblog: RssRolling における RSS auto-discovery の使用例
http://naoya.dyndns.org/~naoya/mt/archives/000471.html
ちょっと手抜きなんですが、HTML::RSSAutodiscovery を使って見つかった RSS の URL のうち一番最初のものを採用して呼び出し元に返すメソッド、rss_url を用意しています。複数見つかった場合にはアレなんですが、どうもこの方法でほとんどのケースに対応できるっぽいので、とりあえずはこんなところ。
複数の RSS を提供してるサイトは少ないし、手抜きと言われようとも、私も同じ方法を取るだろうなあ。

さらに調べて、RSS auto-discovery を提唱したサイトで、複数の RSS auto-discovery についての記述を発見。
Important change to the LINK tag [dive into mark]
http://diveintomark.org/archives/2002/06/02/important_change ...
Tips for site authors:

If you have multiple RSS feeds, define one LINK tag for each of them. (I’m doing this now for my category-specific feeds; view-source on diveintomark.org for an example.) Presumably next-generation news aggregators (and the way things have been going, we’re talking maybe by Friday here) will display a list of all available feeds and let the user choose one or more. Give each LINK tag a different title, so users know what they’re selecting.

「もし複数の RSS があるんなら、それぞれに一つずつの LINK タグを定義してね。 (私は カテゴリ指定のフィードでこれをやってるよ。diveintomark.org を例として参照してね。)」って意味だよね。

例があるんだったらそれを見た方が早いので、diveintomark.org のトップやその下の archive などの html ソースを見たが、複数の RSS auto discovery についての記述は見あたらなかった。その後勧告を撤回したのかな、と思って、サイト内検索をかけてもとくにそれらしい記述は見あたらない。 http://diveintomark.org/mt/mt-search.cgi?search=multiple+RSS 単にやめちゃっただけなのかな。「複数書けば良い」って言ってるんだから、例が無くても気にしないことにする。

- 二刀流

というわけで、Landscape の RSS auto-discovery は2つの RSS を明示するようにした。
<link rel="alternate" type="application/rss+xml" title="RSS" href="cl.xml">
<link rel="alternate" type="application/rss+xml" title="RSS full archive" href="cl-full.xml">
title がいまいちしっくり来ないなあ。「すべての過去記事を含んだ RSS」ということを表すには、どんな title を付けたら良いんだろう?

2003-12-29 (Mon)

* 過去記事をすべて載せた RSS で何をやってたか

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS]

ここ数日の間、chalow による RSS 出力や、Bullkfeeds、RSS で遊んでいた。データが多いほうがやりやすかったので、巨大な RSS を作っていたというわけだ。今は年賀状を書きつつ、過去の記事を読み返して2003年を振り返ったり、ちょこちょこと過去の記事を直したりしている。

- glucose

いくつか RSS リーダを使用してみたのだが、一番使いやすかったのが glucose というツールだ。

glucose
http://glucose.dip.jp/Zope
・日本語完全対応で文字化けなし。
・無料で使用できる。RSS リーダにはなぜかシェアウェアが多い。
・エントリのソートができる。Mozilla + rssreader ではソートできなかった。

chalow でメモを取ると、「* RSS: RSS の使い道」のように、アイテムはカテゴリ名で始まる。で、これが 「* メモ: 」だったり「* memo: 」だったり 「* 雑記: 」だったりと表記揺れが起きる。表記揺れを少なくするには、全体を見渡して再分類するのが良い。しかし、それには全体を楽に見渡せるブラウザが必要だ。glucose ならできる。

- unix 環境にはいいブラウザやスクリプトがあるのに、と言われるかもしれないけど

仕事場では Linux を使えるが、家のメインマシンは windows だ。Debian woody もあるけど、常時立ち上げてる訳じゃない。こういう状況だと、Windows + 秀丸 + Cygwin + chalow という組み合わせになる。こんな環境でコマンドラインで grep したりすると、対象ファイルとコンソールの文字コードが一致しないときに文字化けしたりする。DOS プロンプトを無理矢理 bash 化しただけのコンソールだとどうも使いにくい。

- まだ RSS リーダよりも Web ブラウザでいい

RSS リーダを使ってみて感じたのは、ウェブサイトをブラウズするには、まだ RSS リーダよりもブラウザの方が便利と言うことだ。なんか当たり前のことを言ってるようだが、実際そう感じたんだから仕方がない。RSS ならではの便利な使い方が見いだせないのだ。たいていのニュースサイトでは直近の記事のヘッドラインを載せてる。はてなアンテナのような更新チェッカーがある。RSS リーダが提供する機能は、今の Web ブラウザ自体の機能、各種ツール、ウェブサイト作成側の配慮という要素の組み合わせでなんとか実現できてしまう。

2ちゃんねるブラウザを初めて使ったとき、メール欄表示やレスポップアップ、未読既読管理、画像ファイルへのリンクをインライン画像として展開するといった機能が便利で手放せなくなった。使い勝手が天と地ほどに違っていた。しかし、RSS にはそれがない。

RSS だと、ヘッドラインしか提供されてない場合が多いことも問題。記事を読みたいのに、見出ししか取得できないんでは魅力も半減する。かといって、過去記事全部を RSS 化すると、処理が重くなるというデメリットがある。

- その他現状の不満点を列挙

そのサイトが RSS を提供しているかどうかを探すのが大変
RSS をリーダーに登録するのが手間
記事を表示するときの見た目をユーザ側でカスタマイズしたい
見た目をカスタマイズしたいけど、スタイルシートを書いたりするのは面倒 <- 勝手だなあ
ブラウザとリーダを統合するか連携してほしい <- Mozilla + rssreader は良いアプローチだと思う

リーダ側の機能追加で対処できそうな問題ではあると思う。

2003-12-29 (Mon)

* サイズの小さい RSS と大きい RSS を用意しました

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS]

- ごめんなさい

http://nais.to/hiki/?Chalow%A5%B5%A5%DD%A1%BC%A5%C8%A5%DA%A1 ...
2003-12-29 (月) 02:05:12 yto : そういえば、Bulkfeedsの中の人が、Landscape の RSS がでかくて処理重め、と言ってました。RSS 1.0 はサイズ制限はないので、仕様上は問題ないのですが。

ごめんなさい。Lanscape の RSS は過去すべての記事を RSS 化していたため、250KB 弱という巨大なサイズになっていました。これが原因で処理が重くなってしまっていたようです。今後は トップページの記事の分だけを出力したものと、すべてを出力したものの両方を用意しました。Bullkfeeds には軽い方を登録します。

トップページの記事だけを載せた RSS
http://sonic64.hp.infoseek.co.jp/cl.xml

過去すべての記事を載せた RSS。
http://sonic64.hp.infoseek.co.jp/cl-full.xml

追記。
sonic64.com へのサイト移転に伴い、RSS の URL も変更になった。

直近7日分の記事全文の RSS
http://sonic64.com/cl.xml

過去の全記事全文の RSS
http://sonic64.com/cl-full.xml

2003-12-25 (Thu)

* RSS の channel 要素の link 要素の末尾には / 不要?

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS]

chalow.0.22 には RSS 出力がある。設定ファイルの cl.conf で channel 要素の子要素の link 要素に設定する値を決められるが、なぜか末尾の / は不要とされている。
# ChangeLog を公開する URL (相対 URL 不可) - RSS に必要
# 末尾の "/" は不要
$clog_url = q(http://sonic64.hp.infoseek.co.jp);
現時点では上記記述に従って / を省いた URL を書いているが、Blukfeeds に登録されているサイトの RSS を見ると、ファイルを指定しているサイトを除き、ほとんどのサイトで / を付けている。Google で rss 1.0 link channel 末尾 スラッシュ を検索したが、とくに根拠を見つけられなかった。何でだろう?

RSS -- サイト情報の要約と公開
http://www.kanzaki.com/docs/sw/rss.html

- もしかして単に実装を簡潔にするため?

$clog_url = q(http://sonic64.hp.infoseek.co.jp/);
と試しに / を付けてみたところ、出力された RSS が以下のようになってしまった。
<rdf:li resource="http://sonic64.hp.infoseek.co.jp//2003-12.html#2003-12-25-4" />
write_rss() で定義している RSS のテンプレートを見てみると、$clog_url を直に埋め込んでいる。
<channel rdf:about="$clog_url/cl.rdf">
<title>$changelog_name</title>
<link>$clog_url/</link>
$clog_url/cl.rdf と書いた場合、/ は変数名として使えないので、perl は / より前を変数名、/ より後を文字列として解釈してくれる。つまり、文字列中に直で変数の中身を埋め込める訳だ。sprintf() を使ったり、文字列と変数を . で連結したりといった手間を省けるので、/を付けているのではないだろうか? 楽をするための道具として perl を使うなら、これは十分許容範囲だと思う。http アクセスが増えてしまうといったデメリットはあるが、致命的ではない。

2003-12-23 (Tue)

* Bulkfeeds に登録してみた

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS]

bulkfeeds は RSS を登録したり、検索したりできるサイト。

Landscape を登録すると、Bulkfeeds から25995という番号をもらった。登録すると以下のようにしてサイトの情報を確認できる。

Bulkfeeds: Landscape - RSS Directory & Search
http://bulkfeeds.net/app/view/25995.html (直近7日分の全文)
http://bulkfeeds.net/app/view/544703.html (全記事全文)

sonic64.com に移転してからは http://bulkfeeds.net/app/view/1444933.htmlhttp://bulkfeeds.net/app/view?u=http%3A%2F%2Fsonic64.com%2Fc ... および http://bulkfeeds.net/app/view/1767907.htmlhttp://bulkfeeds.net/app/view?u=http%3A%2F%2Fsonic64.com%2Fc ... になった。

- サイトの登録と更新通知

Bulkfeeds: Developer's API - RSS Directory & Search
http://bulkfeeds.net/app/developer.html

Bulkfeeds への登録・更新通知は、
XML-RPC weblogUpdates.ping で通知する方法と、単なる HTTP で通知する方法がある。
HTTP で通知する方だと、 http://bulkfeeds.net/app/add.xml?url=http://sonic64.com/cl.x ...
に HTTP GET するだけなので楽。ブラウザでリンクをクリックしても良いし、http リクエストを投げるスクリプトを作っても良い。この方針で行こう。

- wget で更新通知 URL をアクセスする

以下を、Landscape 更新用シェルスクリプトに組み込んだ。
$ wget -q -O - http://bulkfeeds.net/app/add.xml?url=http://sonic64.com/cl.xml

上記リクエストを送ったとき、 bulkfeeds から返ってくるレスポンス。
<?xml version="1.0" encoding="UTF-8" ?>
<result>

<successes>

<success about="http://bulkfeeds.net/app/view/25995.html">
http://sonic64.com/cl.xml</success>

</successes>

</result>


すべての記事の見出し (全1029件)
全カテゴリの一覧と記事の数
カテゴリごとに記事をまとめ読みできます。記事の表題だけを見たい場合は、すべての記事の見出し (カテゴリ別表示) へ。

直近30日分の記事
2007-04-23 (Mon)
2007-03-07 (Wed)
2007-02-27 (Tue)
2007-01-17 (Wed)
2007-01-15 (Mon)
2007-01-14 (Sun)
2007-01-08 (Mon)
2006-12-01 (Fri)
2006-11-22 (Wed)
2006-11-20 (Mon)
2006-11-19 (Sun)
2006-09-30 (Sat)
2006-08-29 (Tue)
2006-08-04 (Fri)
2006-07-27 (Thu)
2006-07-23 (Sun)
2006-07-17 (Mon)
2006-07-10 (Mon)
2006-07-06 (Thu)
2006-07-03 (Mon)
2006-06-29 (Thu)
2006-06-28 (Wed)
2006-06-27 (Tue)
2006-06-25 (Sun)
2006-06-19 (Mon)
2006-06-18 (Sun)
2006-06-15 (Thu)
2006-06-11 (Sun)
2006-06-01 (Thu)
2006-05-30 (Tue)
プロファイル
斎藤 宏明。エンジニアです。宇都宮市に住んでいます。
リンク
RSS
スポンサードリンク
Powered by
さくらインターネット

© 斎藤 宏明 Saito Hiroaki Gmail Address
Landscape - エンジニアのメモ http://sonic64.com/
Landscape はランドスケープと読みます。
ひらがなだと らんどすけーぷ です。