Pebble Time用ウォッチフェイス「NEWSWATCH」を作りました

ネット上のニュースを自動で収集して、最新のニュースを表示することができるウォッチフェイスです。

f:id:Red-Comet:20150710004427j:plain

こちらからダウンロードできます。

https://apps.getpebble.com/applications/559e9a4b14e5792e1c00003c

使用上の注意

日本のニュースを配信するので日本語化が必要です。

中身としては、要はPebbleのWatchfaceをRSSリーダーにしただけです。一般に配信されているフィードを受け取って画面に表示させるだけのシンプルな作りになっています。

 

Instagram

壊れたりすることはないと思いますが、念のためインストールは自己責任でお願いします。ちなみに自分の環境では24時間動作させっぱなしでも問題ありませんでした。

圏外になると表示が止まってしまいますが、一度どこかのボタンを押してからウォッチフェイスに戻ってくると再起動できます。

開発メモ

というほど大したものではありませんが(^_^;)

Pebble Timeが手元に届いてから二週間、そろそろちゃんとしたアプリなりウォッチフェイスなどを作ってみたいと思っていました。

サンプルファイルを覗いてみると、Pebble timeは天気予報を取得する際にJavascriptでリクエストを投げ、JSON形式で受け取ったものを表示する仕組みになっていることが分かりました。これをみて、もしかしたらこの方法を工夫することで、ネット上の情報をなんでも表示させることができないかと考えたのが開発のきっかけでした。

意外と少ない無料API

すぐにぶつかった壁は、JSON形式で配信を行っている無料APIが予想以上に少ないことでした。そのため、最初は占い表示ウォッチフェイスでお茶を濁そうかとも思ったのですが、これはちょっと面白みにかけるかな、と。

そうこうしていたらGoogleスプレッドシートのデータをJSON形式で受け取ることができるスクリプトがあることが分かり、そちらを利用することにしました。行と列を変数で指定して特定のセルのデータを取り出すことができるので、アイデア次第でかなりのことが実現できそうです。
ただ、こちらからできる入力方法が限られるので完全なインタラクティブにならないのが難しいところ。例えば辞典を引いて意味を調べるというようなことはできません。青空文庫の本文を延々と表示させるようなものなら作れると思いますが、実用性に欠けますかね。

 

というわけで「ただ流しているだけでも意味がある」「読み逃しても困らない」「手軽に実装できる」という観点からニュースを表示させることにしました。

今回はウォッチフェイスにしましたが、アプリにするなら同じ仕組みを使って、例えばノベルゲームなどの、操作しない時間が長く、分岐を選ぶだけのゲームを作ると面白そうです。二択の結果によって次のセルの行列を指定してその中身を表示させる、みたいな。二択のローグライクとかを作っても楽しそう。

 

ニュースの更新はスプレッドシートの機能を使い、XMLの配信を受けて更新するようにしています。自分でスプレッドシートを開かなくても勝手に更新されるのは凄い。Google神に幸あれ\(^o^)/

苦労した点など

そうして開発を始めたわけですが、もちろんそう簡単にはうまくいきません。

まず最初に詰まったのが肝心のスプレッドシート用のスクリプトがうまくいかなかったこと。最近バージョンアップがあって仕様変更されたせいなのですが、その原因を探し当てるのになかなか苦労しました。Googleェ…。

ようやく取得できるようになった時はガッツポーズだったんですが、Googleは神でもあって悪魔でもあるのだと思い知らされましたよ。自分のような一庶民は大いなる力の前では無力なのだ…。

 

続いてのトラブルは記事の内容をPebbleに送ることができないことでした。

原因はバッファの量で、一度にやりとりできるデータ量が64バイトまでに限定されているからでした。少ない!

とはいえこれは仕様なので、JavascriptでFeedを取得しておいてから、24文字ずつPebble側に送るという方法で解決。3行かける8文字で24文字にしただけなので、実際にはもう少し文字数を増やせるはずです。

次に苦労したのが見出しです。本文だけだと何のニュースか分かりにくいので、本文の更新が終わるまで見出しを出しておきたかったのですが、これが意外に難しくて苦労しました。

見出しが更新される前に本文が代わってしまったり、見出しを表示する間に本文を表示させる時間が来てしまって一秒やそこらで1ページ目が消えてしまったり。インターバルで5秒おきにファンクションを回しているのですが、取得するタイミングの微妙な差を解消できず、一晩かけても解決できなかったので諦めて寝ることにしました。

そしたら次の朝起きた瞬間にひらめいてあっという間に解決\(^o^)/

いったん「見出しを更新するか本文を更新するか」のファンクションに飛ばしてフラグで管理するというだけでした。どうしてこれを思いつかなかった自分。眠い目をこすりながら書いていたのを見たら、If構文を全部elseで受けたりして、ものすごい入れ子構造のひどい文章になっていました。詰まったら寝るのが一番ですね(^_^;)

さらに本文の終わりに「続いてのニュースです」と言わせることで間を取り、タイミング的にはかなり大丈夫にしたつもりです。多少前後するのはまあ、大目に見てください。

残念ポイント

せっかくだからニュース番組っぽい壁紙を置こう!と思って書いてみたのですが、結局文字だけのほうが視認性が高いので徒労に終わりました(^_^;)

f:id:Red-Comet:20150710005208p:plain

まあ、書くのは面白かったのでいいですけど(^_^;)

プログラムは面白い

うーん、Pebble面白い。この時代にファミコンのゲームを作っているような素朴な面白さがあります。

C言語は完璧な素人、Javascriptはかじったことがある程度でしたが、ドキュメントが豊富なのと(英語力が試される…!)、AppStoreにあるアプリでもGitHubへのリンクからソースを読めるようになっているので、それらを参考に一週間ぐらいで形にすることができました。
CloudPebbleも非常に使いやすいし、プログラミング初心者でも簡単に始めることができると思います。Pebbleは学習用にはうってつけの教材かもしれませんね。