CodeZine(コードジン)

特集ページ一覧

Curlで構築する電子県庁システム(ポータル・スケジューラー編)
RSSリーダーとメッセンジャー

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

ダウンロード サンプルソース (2.6 KB)

 今回は、長崎県庁グループウェアポータルサイトのトップ画面にあるRSSリーダーと、スケジューラーに実装したメッセージャーについて書いていきます。RSSリーダーは、RSS情報を非同期で取得して、記事を表示する際は文字をスクロールさせて表示しています。メッセンジャーは、CurlのUDPソケットの機能を使用して実装しています。

目次

はじめに

 今回は、ポータルサイトのトップ画面にあるRSSリーダーと、スケジューラーに実装したメッセージャーについて書いていきます。RSSリーダーは、RSS情報を非同期で取得して、記事を表示する際は文字をスクロールさせて表示しています。メッセンジャーは、CurlのUDPソケットの機能を使用して実装しています。

これまでの記事

RSSリーダー

 RSSリーダーには、主に以下の機能があります。

  • ヘッドラインをティッカー表示
  • ヘッドラインの一覧表示
  • ヘッドラインをクリックすると目的の記事をブラウザを起動して表示
  • フィードの登録・削除、記事の更新間隔・文字のスクロール速度の設定
ヘッドラインをティッカー表示
ヘッドラインをティッカー表示
ヘッドラインの一覧表示
ヘッドラインの一覧表示
フィードの登録・削除
フィードの登録・削除
記事の更新間隔・文字のスクロール速度の設定
記事の更新間隔・文字のスクロール速度の設定

 ポータルサイトを起動すると、RSS情報を一定時間ごとに自動的にダウンロードして、記事をティッカー表示するようにしました。RSS情報をダウンロードする際は、非同期で取得するようにして、ダウンロード中に画面が固まらないようにしています。

非同期でRSS情報を取得する
{define-proc public {my-async-read-open
                      p_src: Url,
                      p_after-access-proc: {proc-type {#TextInputStream}: void},
                      error-proc: #{proc-type {Exception}: void} = null
                    }: void
  let v_file: HttpFile =
        {p_src.instantiate-File} asa HttpFile
  {with-file-caching-style FileCachingStyle.resynchronize do
    let v_async-file-opener: AsyncFileOpener =
          {v_file.async-read-open
            {on t: AsyncFileOpenEvent do
              let v_stream: #TextInputStream = null
              {try
                {if-non-null t.exception then
                  {if-non-null error-proc then
                    {error-proc t.exception asa Exception}
                  }
                else
                  {if v_async-file-opener.done? and
                      not t.canceled? then
                    set v_stream = t.stream asa TextInputStream
                  }
                  {p_after-access-proc v_stream}
                }
              finally
                {if v_stream != null and
                    v_stream.open? then
                  {v_stream.close}
                }
              }
            }
          }
  }
}

||RSS情報を非同期で取得する
{my-async-read-open
  {url "http://rss.rssad.jp/rss/codezine/new/20/index.xml"},
  {proc {p_in: #TextInputStream}: void
    ||取得完了したときに呼ばれる
    {if-non-null p_in then
      let (v_buf: StringBuf,
           v_num: int) = {p_in.read-one-string}
              :
            省 略
              :
    }
  },
  error-proc =
    {proc {e: Exception}: void
      ||エラーが発生したときに呼ばれる
    }
}

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 株式会社ドゥアイネット 前田慎治(マエダシンジ)

    株式会社ドゥアイネットに勤務するプログラマーです。制御系から事務系まで 様々な開発を経験し、現在はCurlやOpenLaszloを使ってRIAの開発を担当してい ます。 OpenLaszloで開発した「スマートスケジューラー」 http://www.dinss.jp/

バックナンバー

連載:Curlで構築する長崎電子県庁システム(ポータル・スケジューラー編)
All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5