GUST NOTCH? DIARY

スケジュールデータを iPad から更新

こちらですが、サーバにはスタティックなファイルしか置いてないんですね。HTML と CSS でページを作って、ブラウザ側で XML を読み込んで JavaScript (jQuery) で処理させている。で、映画館のリストと各映画館のスケジュールの XML ファイルだけ毎週更新しています。
なんでこんな仕様になったかというと、プロバイダと契約したときに Web ページを作れるサーバがついてきたのですが CGI くらいしか使えなくて。どっかのサーバを調達するのも管理が面倒なので単にファイルを置く形にしたと。
ちなみにこのサーバ、プロバイダ側もやる気がないのか HTTPS には対応してくれてなくて、危険なサイト扱いされちゃったりするんですよね。基本的にデータを GET してくるだけで情報を送信することはないので安心してください。一応 Cookie を使っているので、それ関係のリクエストは飛ぶかもしれません。

さて、その XML ファイルの更新なんですが、今までは自宅の PC でやってました。具体的には VirtualBoxUbuntu を入れて、Python で書いたスクリプトでクロールして、XML にしたものを FTP でアップという感じです。
なので完全にローカル環境で作業していたので、帰省とか出張とかの時は更新できていませんでした。実は以前は MacBook Air に同じ環境を作っていたのでそちらを持ち歩いている時は更新できていたのですが、流石に10年以上前の機種で OS もサポートが切れて、最近は使っていないという状態です。外出時は iPad mini を持ち歩くようになったので Web やメールくらいならこちらで十分。一応 Office も入れてあるし。
まあ自分しか使っていないと思うので、わたしが忙しい時は映画に行く暇もないので使えなくても特に問題はないというか。でもたまに帰りの途中で寄ろうかなと思った時に使えないという場面もあったりして。

そんなわけで、iPad での開発環境ってないのかなーと思って調べたりはしていました。いやー、意外なことにないんですね、これが。だからまだ Mac を売ってるとも言えます。
当初は Perl で書いてたんですよね。それを数年前に Python で書き直した。なので Python が動く環境があればいいのでそれで探してみました。
で、一番使えそうだったのが Pythonista3 でした。まあこれもアプリ開発ができるわけではなくて、ローカル iPhone/iPad 上で任意の Python スクリプトが動かせるものです。他のが学習用とかチュートリアル用だったりする中、結構なモジュールやライブラリが使えるのが特徴です。わたしの場合は特に BeautifulSoup が使えて Web スクレイピングもできるというのがポイントでした。それだけに有料です。
そのうち試そうと思っていたまましばらく経ってしまい、そんなことをしていたら 1200 円だったのが円安のせいで 1500 円になってしまったり。

今回やっと重い腰を上げて購入。で、iPad から更新できるかというのを試していたわけです。
BeautifulSoup くらいしか使ってないから、逆にこれが動くんだったら大丈夫だろう、と思ってはいました。心配だったのはファイルの読み書きがどこになるのかなとか、もしかしたら使えるメモリに上限があったりして動かないとかないかな、とか。
結果としては一昨日昨日に書いたように、BeautifulSoup の XML パーザが使えないということになったのですが、代わりの ElementTree で無事に処理することができました。
いやー、 BreakPoint 置いたり CallStack が見えたり変数の状況もわかるし、デバッグするのも便利便利。

XML ファイルの生成はできたので、最後にこれをサーバにアップロードしないといけません。自宅ではシェルスクリプトで ncftp を呼んでいたのですが、ファイルシステムはアプリ内に閉じているため、これに相当する部分も Pythonista でやらないといけません。外部ストレージからのファイルの取り込みはできるんですけどね。中のものは外には見えない。
こちらも ftplib というのがあるので簡単に実装できました。単にアップできればいいだけなので。事前にアップするファイルの一覧を作成して、ファイルごとに接続、ディレクトリ移動、バイナリ書き込み、を繰り返す。

実際にデータをアップしてみたら XML ファイル中の不具合が発覚。BeautifulSoup から ElementTree に変更した際に人為的な理由で値の設定し忘れがあったのがいくつか。もう一つはアルゴリズム的にこれって前から不具合が出ててもおかしくなかったんじゃないか、というやつ。BeautifulSoup と ElementTree での要素の追加の挙動の違いなんだろう。
修正できたので多分これで大丈夫。

ということで iPad からも更新することでできるようになりました。基本週イチで更新していたので、木曜とか祝日前とかだと「あれ?今日の分のスケジュールが含まれてないな」ということがあったりしました。そんな時これからはその場で最新のスケジュールに更新することもできます。