今回はKLWPで作ったホーム画面にRSSを表示します。
ちょうど使いやすいKomponentが配布されているので、フィードURLを入手するだけです。
KLWP RSS Komponentを入手
製作者はそれぞれ、
前者はMycolorscreenでも常連のデザイン狂+Alex Tさん、
後者はKLWPのオフィシャルコミュニティ「Kustom Gallery」の管理メンバーにもなっている+Carla Jacobsさんです。
どちらも参考になるテーマ・コンポーネントを大量に作成し、Playストアでも販売されています。
ダウンロードした「○○.komp.zip」は以下の場所に移動します。
/内部ストレージ/Kustom/Komponents/
KLWPのKomponentを追加する時は通常のレイヤーを追加する時のように+ボタンから行います。
ZIP形式のKomponentは「SDカード」セクションに表示されます。
フィードを指定するだけで使える簡単なコンポーネント
この画像はAlex Tさんの配布された「RSS FEED」です。
グローバル変数としてRSSフィードが定義されているため、この部分をタップして取得したいフィードURLに書き換えるだけで動作します。
ためしに次のフィードURLを登録してみましょう(笑)。
http://feeds.feedburner.com/tomandroid_rss
ちなみにこういう時はPushbulletのユニバーサルコピー&ペーストが最高に便利です。
こんなふうになると思います。
サイズが合わない時はレイヤータブの「スケール」から変更します。
Carla Jacobsさんの配布されたものはデフォルトのスケールが 50 なので、画面いっぱいにしたい時は 100 にします。
注:タップは非対応です
タッチアクションに指定のページを開く(ブックマークのショートカット等を使う)方法もありますが、「表示されたRSSを開く」アクションは指定できない可能性があります。
Carla JacobsさんのコンポーネントはRSS本文も取得するようになっているので、そちらで補う方法もあります。
Komponentの中を見てみよう
というわけでCarls Jacobsさんのコンポーネントを解剖してみます。
KLWP Komponentはデフォルトではロックされているため、南京錠マークをタップしてロックを解除します。
最大4つまで表示できるフィード(個数はグローバル変数「Show」で変更可能)は全てグループ化されています。
まず最初に、唯一重ねる(Overlap)グループになっている「サイト名」表示要素を見てみます。
※開けてわかりましたが激ムズです。
中身は図形(背景となる白い帯)とテキストでした。
このテキストの中身が画像右側です。
$if(gv(title)=1,(tc(ell(wg("feeds.bbci.co.uk/news/world/rss.xml", rss, title)25))),if(gv(title)=2, (tc(ell(wg("feeds.bbci.co.uk/sport/0/rss.xml?edition=int", rss, title)25))),if(gv(title)=3, (tc(ell (wg("feeds.bbci.co.uk/news/entertainment_and_arts/rss.xml", rss, title)25))),if(gv(title)=4, (tc(ell (wg("www.cnet.com/rss/news/", rss, title)25))),if(gv(title)=5, (tc(ell (wg("www.androidpit.com/feed/main.xml", rss, title)25))),if(gv(title)=6, (tc(ell (wg("feeds2.feedburner.com/androidcentral/", rss, title)25))),if(gv(title)=7, (tc(ell (wg("feeds2.feedburner.com/androidphonefans/", rss, title)25))),if(gv(title)=8, (tc(ell (wg("www.androidauthority.com/feed//", rss, title)25))),if(gv(title)=9, (tc(ell (wg("feeds.feedburner.com/androidpolice", rss, title)25))),if(gv(title)=10, (tc(ell (wg("rss.cnn.com/rss/edition_world.rss/", rss, title)25))),if(gv(title)=11, (tc(ell (wg("rss.cnn.com/rss/edition_sport.rss/", rss, title)25))), if(gv(title)=12, (tc(ell(wg("news.yahoo.com/rss/", rss, title)25))),if(gv(title)=13, (tc(ell (wg("feeds.skynews.com/feeds/rss/world.xml/", rss, title)25))),"NEWS")))))))))))))$
と、全て1行に収まっています(涙)。
これはCarlaさんがRSSにギミックを仕込んでいるためで、帯をタップするごとに「Feed1」に指定したURL、「Feed2」に指定したURL、「Feed3」に指定したURLと切り替えるためのものです。
ですのでそこを除いて、シンプルに1フィードをうまく表示する方法だけを盗みます。
必要なコマンドは次の通りです。
(tc(ell(wg("feeds.bbci.co.uk/news/world/rss.xml", rss, title)25)))
まずこの部分で feed.bbsi.co.uk/news/wold/rss.xml というフィードからのRSSタイトルを、最大25文字までの制限付きで表示しています。
ダブルクオーテーションで挟まれたURL部分を変更することで取得するフィードタイトルを決められます。
一番外側の tc(ell) が文字数制限を加える部分で、 ell の属性は「字余りの場合末尾に … をつける」ものです。
wg() がRSSフィードを取得するためのもので、基本的に3つの属性を使います。
まず最初にurl、次にフィルター(rssまたはtxt)、最後にパラメータとなりますが、プリセットされた雛形を見たほうがわかりやすいと思います。
フィードタイトルを取得する場合は wg(url, rss, title) 、本文(説明)を取得するには wg(url, rss, desc) となるようです。
この他にもフィードの更新日時を取得する date 、件数を取得する count 、サムネイルを取得する thumb などのパラメータがあります。
以上を踏まえた上で基本的な構造を考えると次のようになります。
$wg("http://feeds.feedburner.com/tomandroid_rss", rss, title)$
こちらがサイトタイトルを取得するもの、
$wg("http://feeds.feedburner.com/tomandroid_rss", rss, 0, title)$
こうすると0番目(最初)のフィードタイトルを取得するもの、
$wg("http://feeds.feedburner.com/tomandroid_rss", rss, 0, desc)$
さらにこうすることで0番目のフィード本文(説明)を取得するものとなります。
ちなみに指定した番号のフィード情報のみを取得する場合は属性を足します。
wg(url, フィルター, 番号, パラメータ) とすることで、「○番目のフィード」を指定できます。
記入する際のルールとしては、
- http:// はなくても大丈夫
- 属性は全て半角コンマで区切る(半角スペースは見やすくするために入れてるだけで、なくても大丈夫)
現時点ではバグがあるようです
SO-02Gで確認した際は2つのおかしな挙動を確認しました。
- XML形式以外のRSSフィードを指定すると、読み込み中を示す「Loading...」が出ない
- フィードURLを直接入力すると desc が反映されない
特に2番目が深刻ですが、これはAlex Tさんの方式を使うと解消できます。
このように wg() の中に gv() を代入します。 gv() はグローバル変数を指定するコマンドです。
そしてグローバル変数にフィードURLを指定するものを作成します。
以上を踏まえて、フィード本文(説明)を取得する関数は次のようになります。
$wg(gv(変数名), rss, 0, desc)$
これで0番のフィード本文(説明)を取得してくれると思います。
これを1つのレイヤーとし、複製して番号を増やすことで「1番のフィード」「2番のフィード」と連続して表示させることもできます。
また、URLとして指定するものがページURLではなくフィードなので、更新は自動で行われます。
その他の体裁(フォントやサイズ、色、文字数制限)は好みに合わせて作成してください。
オマケ:複数のサイトを効率よく見る方法
まぁ単純にスクロールアニメつけただけですw
そんな感じ。