第七回:Komponentから学ぶ、ホーム画面にRSSを埋め込む方法【How to Kustom】

今回はKLWPで作ったホーム画面にRSSを表示します。

ちょうど使いやすいKomponentが配布されているので、フィードURLを入手するだけです。

KLWP RSS Komponentを入手

RSS Feed Komponent v1.0
Globals support. Change source URL in gv(source).…RSS Feed Komponent v1.0
Globals support. Change source URL in gv(source).…

※クリックでGoogle+に繋がります
Scroll through 13 different news sources. (Tab on rightside of source bar for…Scroll through 13 different news sources. (Tab on rightside of source bar for…
※クリックでGoogle+に繋がります 

製作者はそれぞれ、

前者は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のユニバーサルコピー&ペーストが最高に便利です。

Google play Pushbullet

Pushbullet
制作: Pushbullet
評価: 4.6 / 5段階中
価格: 無料 (2015/8/4 時点)

posted by: AndroidHTML v3.1

こんなふうになると思います。

サイズが合わない時はレイヤータブの「スケール」から変更します。
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つのおかしな挙動を確認しました。

  1. XML形式以外のRSSフィードを指定すると、読み込み中を示す「Loading…」が出ない
  2. フィードURLを直接入力すると desc が反映されない

特に2番目が深刻ですが、これはAlex Tさんの方式を使うと解消できます。

このように wg() の中に gv() を代入します。 gv() はグローバル変数を指定するコマンドです。

そしてグローバル変数にフィードURLを指定するものを作成します。

以上を踏まえて、フィード本文(説明)を取得する関数は次のようになります。

$wg(gv(変数名), rss, 0, desc)$

これで0番のフィード本文(説明)を取得してくれると思います。

これを1つのレイヤーとし、複製して番号を増やすことで「1番のフィード」「2番のフィード」と連続して表示させることもできます。
また、URLとして指定するものがページURLではなくフィードなので、更新は自動で行われます。

その他の体裁(フォントやサイズ、色、文字数制限)は好みに合わせて作成してください。

オマケ:複数のサイトを効率よく見る方法

まぁ単純にスクロールアニメつけただけですw

そんな感じ。

コメントを残す

メールアドレスが公開されることはありません。