あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

Fastladderと東急電鉄のRSS

FastladderRSS購読するようになって唯一読めていなかったRSS東急電鉄のやつだけで、忙しくてずっと放置していたのですが、重い腰を上げて調べてみることにしました。

まとめ

  • Fastladderの実装は現在の規格にそっている
  • 東急のRSS提供方法が古い
    • 東急に問い合わせる?すげえ期待出来なさそう(田園都市線沿線民並感)
  • ユーザー的にはそうは言っても読めて欲しい
  • スクリプトでごまかすのが一番穏便っぽい気がしている

やったこと

curlでヘッダーをとるとContent-Type: application/xmlになっていました。

$ curl -I http://www.tokyu.co.jp/rss_news.xml
HTTP/1.1 200 OK
Server: Apache
Last-Modified: Fri, 12 Jan 2018 01:17:00 GMT
ETag: "1118-5628a05733b00"
Accept-Ranges: bytes
Content-Length: 4376
Content-Type: application/xml
Date: Sat, 13 Jan 2018 03:40:14 GMT
Connection: keep-alive

XMLの中を見ると「application/rss+xml」とあります。

<atom:link href="http://www.tokyu.co.jp/rss_news.xml" rel="self" type="application/rss+xml"/>

ホーン!合ってないからか!と思い、雑なスクリプトを書いてみました。

<?php
header('Content-Type: application/rss+xml');
$xml = "http://www.tokyu.co.jp/rss_news.xml";
print file_get_contents($xml);

これをFastladderに食わせたら、読んでくれるようになりました。でもFastladderで読めるべきでは??と思って調べると、Feedの取得はfeed_searcher gemに切り出されていて、lib/feed_searcher/page.rbで許容するMIME typeのリストがありました。

    MIME_TYPES = %w[
      application/atom+xml
      application/rdf+xml
      application/rss+xml
    ]

あーじゃあここにapplication/xmlを足せば動くのね!と、追加してやると、東急のRSSがそのまま読めるようになりました。なぜapplication/xmlが含まれていないのか疑問に思いつついくつかページを探して回ってもわからんので、Reject覚悟でとりあえずプルリクを出してみました。

add application/xml into MIME_TYPES by Akkiesoft · Pull Request #10 · fastladder/feed_searcher · GitHub

1分でTravis CIが失敗しました。specファイルという存在に気づいてませんでした……。spec/feed_searcher_spec.rbにはRSS読み込みのテストが記述されていて、application/xmlは読み込まないようになっていました。

 # This example makes sure the following specifications.
(略)
 #   * it does not recognize application/xml

ォォン……。その理由はfeed_searcherのプルリク#1のコメントにあった記事で解説されていました。見ていたけれど、斜め読みになってて理解できていなかった。わたしアホ。

r7kamura.hatenablog.com

  • XMLRDF(で書かれたRSS)はapplication/rdf+xmlを使えばよかったけど、昔はいろいろあって、リクエストではapplication/xmlと答えつつXMLにはapplication/rss+xmlなどと書くことが多かった
  • 今はいろいろ解決したので、application/rdf+xmlと書いて問題なくなった

たぶん上記の理由から、Fastladderでは昔からの「リクエストではapplication/xmlと答えつつXMLにはapplication/rss+xmlなどと書く」やつは弾いているのだろうと理解しました。application/xmlだとRDF以外のよくわからん文書食わされるかもわからんわけですし。プルリクする前に理解しないとあかんかったやつだ。

腑に落ちていない感じがあるのは、MIME_TYPESにapplication/rss+xmlはあるのにapplication/xmlがないところかもしれません。application/rss+xmlはIANAに入らなかったのでは?みたいな。ただ、RSS Autodiscoveryという機能的にはapplication/rss+xmlを書くようにとあるので、このあたりなのか。

さておき、東急のお問い合わせページを開いて↑を説明しながらContent-TypeをApplication/rdf+xmlにしてもらうのが正攻法と言うことになりそうですが、なんかそれはしんどそうだな……というのが今の心境です。サイト担当者の人見てたら直して頼む〜。

一方でこのままでは古いやり方のRSSFastladderで読めないので、なんか妥協しながらでも読んでほしいなあと思ったりもします。ので、出してしまったプルリクを下げるのも躊躇している状態です。コメントにどう書くか迷ってここにだらだらっと書いててしまった。。

どこにも変更を加えず、問い合わせもしないでやるなら、雑スクリプトを以下のとおりにしてやればそれでOKかな……と言う妥協を書く替え始めているところ。

<?php
header('Content-Type: application/rdf+xml');
$xml = "http://www.tokyu.co.jp/rss_news.xml";
$data = file_get_contents($xml);
print str_replace("application/rss+xml", "application/rdf+xml", $data);

WikipediaRSSのページを読んだら闇深そうな歴史とか書いてあるし、RSS自体なんか枯れてしまったままだし、ォォン……。

結局

上のスクリプトでやることにしました。東急のxmlのデータが以下のfeed_searcherの判定に1つも当てはまらないのでだめと言う感じでした。

  • で始まっているか(始まっていない)
  • サーバーの応答Content-typeがapplication/(rdf/rss/atom)+xmlか(application/xmlなので本当にRDF/RSS/Atomかわからない)

あと、rss_infomation.xmlって……。rぬけてる……。

金魚を略1年半略

前回から半年くらい経ちました。

akkiesoft.hatenablog.jp

さっき水槽掃除して思ったんですけど、飼い始めた時のプラ水槽に掃除の合間入れてるだけでもかわいそうなくらい、水槽が小さい……否、金魚がでかくなってるような気がします。

f:id:Akkiesoft:20180108190309j:plain:w450

掃除後(エアーは漂白中だけど)に写真をとってみると、うーん、一回りでかい気がします。

▼前回

f:id:Akkiesoft:20170816215335j:plain:w450

▼今回

f:id:Akkiesoft:20180108190636j:plain:w450

実家の金魚もアホかってくらい巨大化しててあれなことになってるんですけど、うちのも大概だわなあ……。

あと、水替え中にバシャバシャ暴れて台所中水浸しにするのやめて欲しい。もう少しおとなしい子になって欲しい。

ジャイアンという命名が良くなかった気がします。

アキバ

またアキバに行ってきました。新年は2回目。年末は30日にも。コミケ前後はどうしてもハイペースになりますよねって言う感じなんですが、それとは別にはんだごてのヒーターが壊れてしまい、替えパーツを買いに行く用事もできたので今日行ってきました。某の原稿が進まぬけど、はんだごてが直らないと進められないので(震え声)。

あと、半年だけ世話になったガラケーを、購入したアキバのゲオモバイルで買い取りに出しました。が、買取価格200円(笑)。値段が付けば御の字だろうとは思ってましたけどなるほどねという。欲を言えば月曜日のたわわの委託を買えるくらいはほしかったけど叶わなかった₍₍ (ง ՞ਊ ՞)ว ⁾⁾

うすい本とはんだごてのヒーターを買った以外は特に買い物もなく、ミスドでGPD Pocketを開いてmikutter3.6のインストールをやってから帰路についたものの、ちょっと気が向いてAitendoへ。そして5日にHey社でひらかれた新年会で話題にのぼって弄っていたI2CのOLEDボードを買ってみました。500円。財布にお金なくてレジに預けてお金おろしに行った……。

www.aitendo.com

帰宅して、はんだごてのヒーターを交換し無事に復活。そして原稿より先にOLEDボードに手をだしてしまうのであった……。

f:id:Akkiesoft:20180107215938j:plain:h400

コミケけものフレンズのかばんちゃんとサーバルちゃんの形をしたユニバーサル基板をゲットしていたので、今回は『きばんちゃん』の方にOLEDボードを載せることにしました。2x10のピンソケットを帽子部分につけて、ボードを顔部分に設置。ケーブルは適当につけて完成。

f:id:Akkiesoft:20180107220230j:plain

ググってみるとAdafruitのPythonライブラリがそのまま使えるとのことだったので、その通りインストールしてサンプルを動かすことができました。

aitendo OLEDモジュールをRaspberry Piで利用する

GitHub - adafruit/Adafruit_Python_SSD1306: Python library to use SSD1306-based 128x64 or 128x32 pixel OLED displays with a Raspberry Pi or Beaglebone Black.

ボードは128x64ドットなので、サンプルスクリプトを動かすときはコメントアウトの位置を変えて縦64ドットに変更します。

f:id:Akkiesoft:20180107220333j:plain

image.pyと言うサンプルはppmファイルと言う2値のビットマップファイルを扱うそうなので、Gimpを使ってppmファイルを書き出してやれば、好きな画像を出すことができました。つまりこう。サイバーかばんちゃんだ!!

f:id:Akkiesoft:20180107220725j:plain

そんな言う感じでさっくり動いたので(ありがてえ!)、あとはなんかもうちょい組み合わせて面白い物体としてOSCとかで展示できると良いですね。

ザングース

日本にいないはずのザングースが出ているときいて、昨日は自転車で狩りに出かけました。マップアプリを使いながら回ったんですが、意外といないというか、非常に地味な公園とか住宅地にちょいちょい出る感じで、ほんとにマップアプリ必須という感じでした。。。

f:id:Akkiesoft:20180107155750p:plain

気が付いたら成瀬の某社のほうにまで行ってしまったので、長津田周りも見て帰宅。そんなつもりじゃなかったんだけどな。6121Fの構内試運転が見れたので結果オーライですかね。しかしコンプレッサーの動作音、先祖返りかってぐらいいい音してますね。HS20っぽいというかなんというか。

等々力緑地に行ってきた

イーブイのあめ補充がしたくて行ってきました(ンゴ並感)。等々力といえば渓谷の地味に自然たっぷりみたいなイメージがあったので、緑地と言うからにはグリーングリーンしているのかと思っていってみたら、なんかスタジアムやら球場やらミュージアムやらがドカドカ立ち並ぶクソでかい公園でした。緑地とはなんだったのか。いや、今が冬だからで、春になればグリーングリーンするのかもしれないけど。

行きは溝の口から武蔵中原まで南武線で。快速にあたったけど、中原までじゃあ意味がないんだよなあっ。

f:id:Akkiesoft:20180103010844j:plain

イーブイのあめ補充と言いつつ、そもそもモンスターボールが枯渇気味だったこともあり、武蔵中原から等々力緑地まで歩きながらボールをかき集めまて行きました。等々力緑地につくと、なんか人がわらわらいるし、なんか声援がすごい。スタジアムに近づいてみたら、高校サッカーをやってました。なるほどね。

f:id:Akkiesoft:20180103010926j:plain

公園内をひたすらぐるぐる歩いて、イーブイをせっせと集めて来ましたが、わさっとイーブイが湧く決定的なスポットはなく、歩いては1匹捕まえるみたいな感じを繰り返しました。冬イベント中のせいなのかしらん。当初は200個くらい貯めようかと思っていたものの、寒いので85個で断念して帰りました。昨日でレベル37になって、サンダースやらシャワーズをまた強化する必要があるんですが、まあこれだけあればなんとか足りるでしょう。エーフィもそろそろ育てたい。

f:id:Akkiesoft:20180103011459j:plain

帰りは駅まで歩くのがだるいのでバスを……と思って調べたら高津経由溝の口行きが走っていたのでこれに乗って高津まで移動して帰りました。