以前の記事のこことここで、ブログ(ココログ)の記事を自動取得して、「新館」の「ザ・公園」に表示したいみたいなことを書きました。ココログの記事の情報を取得する方法はその記事内で解決されていますが、記事数が多い場合に、とてつもない時間がかかるため、あの記事を書いている時点では自動取得は盛り込んでいないのでした。
ですがまぁ、その後もいろいろ考えていまして、折衷案というか、そんなものの実装に成功しましたので、またもや記事にしてみようというわけです。
なぜ自動取得にこだわるのか?と言いますと、単に「面倒」だからです。自動取得を実装するまでは、ココログの管理ページから記事のタイトルとURLを手動で持ってきて、それを一種のリストにしてプログラムでリンクとして表示する、みたいなことをやっていました。ブログに記事を書いたら、手動でこのリストを更新していく必要があります。また、いちいちタイトルとURLをコピペするのも面倒です。
面倒な作業は億劫になります。そうして、ブログに記事を書いたはいいけど、「新館」には反映されない、なんてことになっていたわけです。
そこで自動取得なのですが、さすがにブログに記事を書いたら勝手にリストも更新、とはいきません。そのためにはココログのシステムから何らかのアクションが必要になるのですが、さすがにそれは無理です。ですから、できるだけ少ない手間で程度に考えることにしました。
ココログの記事には、ユニークなID(投稿ID)が付いていますから、これだけリストにしておけば、投稿IDからタイトルやURL、投稿日まで自動で取得できるはずです。これについてはすでに記事にしているので、そっちを見て下さい。ですが、非常に時間のかかる処理なので、投稿IDの数が多いと数十秒の処理待ちになり、とても使えません。
Ajaxを活用することも考えました。つまり、ブログ記事の一覧を表示する段階で、1個1個問い合わせに行き、徐々にリンクを作っていくというイメージです。最近よく見かける、お待ち下さい的なグルグルを表示しながら処理すると、けっこうそれっぽいと思うのですが、時間がかかるのには変わりありません。
ではどうするか?誰でも考えるのが「キャッシュ」ですね。ココログ側から取得した情報をサーバレベルでキャッシュし、二度と問い合わせには行かないとすれば、レスポンスは劇的に向上するでしょう。では何でキャッシュを実現するかですが、キャッシュと言っても恒久的に情報を保持する必要がありますから、やはりDB(データベース)を使うしかないでしょう。
そこで、ココログから取得した情報はDBにストックし、リンクの一覧はDBにバインドしたデータコントロール(ListViewなど)で表示させることにしました。そうすれば、記事数が多い場合にもページャが使えるなど、使い勝手も向上するでしょうし、作る方も楽です。それが冒頭の画面です。
次に考えるのは、リストが更新されたら、追加された投稿IDについてどのようにできるだけ効率よく処理するかです。まぁいろいろ考えたのですが、リストの項目数(つまり投稿IDの数)とDBのレコード数(登録されている投稿IDその他の数)を比べて、リストの項目数の方が大きければ追加された投稿IDがあると判断、リスト内の各投稿IDについて、すでにDBにあるか問い合わせを行っていきます。なければ、ココログから情報を取得してDBに追加し、新しいDBの内容に基づいてデータコントロールを更新すればいいわけです。
ひとつずつ問い合わせ、のところが重いのですが、これは記事がリストに追加されたときに1回だけ行われる処理ですから、よしとしましょう。
この方法の欠点は、たとえばココログ側でタイトルを変えたとか、そういった変更に追従できないことです。追従しようとすれば、結局毎回取得しなければならなくなり、せっかくの仕組みが無意味になります。ですので、そういう場合にはDBで該当レコードを削除する、あるいは全取得するようなものを別途作っておく、などで対応すればよいでしょう。
何事も完全を目指すとうまく行かないものですが、適当に妥協するとほどほどのものが簡単にできるというよい例です。
あ、そもそもこういう仕組みを考えて、それを実装するというのがそもそも「面倒」なのでは?という質問も来そうですが、それは却下です。それを言い出したら、そもそも「新館」などやっていませんってば。
さらに!せっかく過去記事の一覧を見れるようにしましたので、ぜひ古い記事も読んで下さいませ(そういう人は、そもそもこの記事を読まないだろうなと思う)。
コメント