« GooブログのXML-RPCとBlogWrite:その後 | メイン | なにげにはてな検索 »
2005年11月28日
BlogWriteでの過去記事取得(というか同期)について
BlogWriteに関していただく最近一番の要望は、過去記事の取得に関する事です。(ここ、ここ、ここ、など)
大別すると、下記の二つになります。
1.BlogWriteを使い始める前からの記事も全てBlogWriteに取り込みたい。
2.別のPCやウェブ管理画面からの投稿した記事もBlogWriteに取り込みたい。
非常に良く分かりますし、是非実装したいと思っています。が、どうしても気になることがあります。
もし普通にアクセスして、全過去記事を取得して取り込むとすると、サーバーにかなりの負荷をかけるのです。具体的には、100の記事がある場合、BlogWriteは100回+1回の計101回の連続アクセスをする事になります。これはまずいです。DoS攻撃並。レンタルサーバーによっては極端な負荷をかけるスクリプトを停止することもありますので、これもまずいです。101回のアクセスで数秒の間を空けることも出来ますが、101回だったら結局全ての処理に長い時間がかかってしまいます。
以上のような懸案があって悩んでいる中、先日のXML開発者の日にSixApartの某氏と雑談の中で、結局IMAPのような仕組みが必要かも、とか、Atomフィード形式でエクスポートしたものを取り込めば…なんて会話がありました。
例えば、記事の「タイトル」、「最終更新日時」、「メインカテゴリ」、「記事のIDもしくはEditURI」、最低この四つの項目さえ取れれば、ローカルのログの時刻と比較して、必要に応じて記事をサーバーから取得する、という事が可能になります。この仕組みであれば、結構上手くいくのではと思います。
問題は、現在の所どのブログサービスもそういった一覧を取得出来るようにはなっていないことなのですが...。 何か対策、ご意見、賛同者、例、などございましたら是非ご一報くだされば嬉しいです。
追記:
「MovableTypeであれば、“エントリの書き出し”で同じことが出来るのでは」という御連絡をいただきました。
Movable Typeだけに対応するのであれば、確かにMTから書き出したものを解析すれば良いのですが、他のブログのフォーマットにも一々対応するのは現実的ではない、など色々ありまして、(他にも例えば、Perlなどのようなスクリプト系言語での強力な正規表現が楽に使えない環境もあれば、文字コードやら改行コードの判定が難しい環境もあるでしょう)
出来れば汎用フォーマット規格であるXMLで、なお且つ、元々ブログのアーカイブ(保存)フォーマットとして作られた、Atomフォーマット形式であれば、完璧かな~という所です。
さらに言うと、内輪規格はできるだけ避け、汎用的で標準的規格を採用するべきではないか、と思っています。例えばSixApartと私で独自フォーマットを決めちゃって、結果として他者(の利用など)を排除するようなクローズドな仕様はキライです。もしそういう事を他でされたら私なら文句を言います。
投稿者 BlogWrite担当 : 2005年11月28日 21:42
トラックバック
このエントリーのトラックバックURL:
http://www.witha.jp/b/mt-tb-hate-spam.cgi/351
コメント
冬星@僕も最近クライアント書き始めました、です。
過去記事取得でサーバーに負担…は確かにそうですね。
XML-RPC 投稿API の場合しかわかりませんが GetRecentPosts でリクエストした記事を全部一度で返してもらえるはもらえますが、カテゴリーのキーと名前の情報が足りないんですよね。
カテゴリーキーと名前の情報が返されるよう拡張されれば、一発で過去記事取得できるようになるのですが…とか思っております。(^^;
投稿者 冬星 : 2005年12月03日 14:15
そうなんですよね~。カテゴリーが一緒に取れないのが致命的。
でもXML-RPCのMetaWeblog APIが拡張されるとは思えないのです。Dave Winer氏がうるさいだろうとか、元々XML-RPCは拡張される事を想定しておらず、メソッドの追加ぐらいしか出来ないという事などがあって...。
投稿者 BlogWrite担当 : 2005年12月03日 15:55
ありゃ MetaWeblog APIって拡張される見込みがあまりないんですか。 Atom API の方はまだ仕様を見ておらず、そのあたりカバーできているのかどうかわからないのですが、標準を目指してがんばってほしいです。
>結局IMAPのような仕組みが
…ということは Atom の方でも現状できていないのかしらん。(^^;
投稿者 冬星 : 2005年12月04日 23:11
Metaweblog.GetRecentPostsメソッドではなく、新たなメソッド(例えば「MyOwn.GetPostsAll」とか)を追加する必要がでて来ます。
これは拡張ではなく、メソッドの追加です。
AtomAPIでは、XMLの名前空間を用いた拡張ができるので現状に追加したり、変更したりせずに拡張出来ます。
このあたり、今度詳しく記事に起こして見たいと思います。
投稿者 BlogWrite担当 : 2005年12月04日 23:46
なるほど…XML-RPC,Atom API共に、こういったケースではAPI仕様拡張で対応が必要ということですか。
んー、ブログ事業者ごとにばらばらに拡張されると、対応する側としては厳しいデスネ。できるだけ標準APIとして今回の件でのカテゴリー取得ぐらいのことはできるよう設計しておいて欲しいところです。(^^;
Atom API の記事楽しみにしてます。
投稿者 冬星 : 2005年12月06日 21:41
すいません、無茶な要望を出していたその1のNarikenと申します。
ものすごくアナログなご提案で申し訳ないのですが、寝る前に「ブログ全取得」を実行して朝起きたら終了しているというような、「連続してはいるが、ある程度の間隔をおいた取得」というのはできますでしょうか?
これならDos攻撃にもならずに済むかと... いかがでしょう?
投稿者 Nariken : 2006年01月15日 22:45

