Perlで動作するAsahi.comのニュース取得プログラム

完成版とは言いがたいのですが、Perlで動作するAsahi.comのニュース取得プログラムがあります。

動作確認は、Linux(Cent OS)でのみ行っています。
取得結果は、Webブラウザ、ZaurusのTTextReaderで読むことができます。

欲しい方いらっしゃいますか?
いらしたら、コメントください。

| | コメント (1) | トラックバック (0)

Tips: 地図レシピのファイル名変更

GmlMgr本体の話ではないのですが…

bucchiさんが、地図レシピというzoom2~19までの県別座標のデータを公開されています。
これは、自分用の地図データを作りたい人には非常にうれしいデータです。

が、GmlMgrと組み合わせるには、ちょっと手順が必要になる場合があります。

というのは、地図レシピではデータが各県毎のフォルダにわかれており、それぞれのzoom値に対応したファイルは"02.txt"のような名前になっているために、東京のzoom=2のデータと、千葉のzoom=2のデータは同じ名前になっているのです(もちろんデータの管理上望ましいことです)。

使われている方はお分かりでしょうが、GmlMgrでの座標指定は複数のデータ指定ファイルを使用することができます。

しかし、東京と千葉のzoom10~2までのデータを作成するときには、この地図レシピのファイル名のままでは名前が重なってしまうため、ファイル名の変更や、新たにデータ指定ファイルを作成する必要があります。

= 以上、前置き終わり =

そこで、以下のような手順で実行することにより、すべてのレシピファイルを異なった名前にすることができます。

1. map_recipe-081030.zip などを展開するとmap_recipeというフォルダが現れますが、その中に、以下のような内容のバッチファイルを作成します。

@echo off
set NEWDIR=map_recipe_my
mkdir %NEWDIR%
FOR /D %%F in ("??-*") do copy "%%F\02.txt" "%NEWDIR%\%%~nF.02"
FOR /D %%F in ("??-*") do copy "%%F\03.txt" "%NEWDIR%\%%~nF.03"
FOR /D %%F in ("??-*") do copy "%%F\04.txt" "%NEWDIR%\%%~nF.04"
FOR /D %%F in ("??-*") do copy "%%F\05.txt" "%NEWDIR%\%%~nF.05"
FOR /D %%F in ("??-*") do copy "%%F\06.txt" "%NEWDIR%\%%~nF.06"
FOR /D %%F in ("??-*") do copy "%%F\07.txt" "%NEWDIR%\%%~nF.07"
FOR /D %%F in ("??-*") do copy "%%F\08.txt" "%NEWDIR%\%%~nF.08"
FOR /D %%F in ("??-*") do copy "%%F\09.txt" "%NEWDIR%\%%~nF.09"
FOR /D %%F in ("??-*") do copy "%%F\10.txt" "%NEWDIR%\%%~nF.10"
FOR /D %%F in ("??-*") do copy "%%F\11.txt" "%NEWDIR%\%%~nF.11"
FOR /D %%F in ("??-*") do copy "%%F\12.txt" "%NEWDIR%\%%~nF.12"
FOR /D %%F in ("??-*") do copy "%%F\13.txt" "%NEWDIR%\%%~nF.13"
FOR /D %%F in ("??-*") do copy "%%F\14.txt" "%NEWDIR%\%%~nF.14"
FOR /D %%F in ("??-*") do copy "%%F\15.txt" "%NEWDIR%\%%~nF.15"
FOR /D %%F in ("??-*") do copy "%%F\16.txt" "%NEWDIR%\%%~nF.16"
FOR /D %%F in ("??-*") do copy "%%F\17.txt" "%NEWDIR%\%%~nF.17"
FOR /D %%F in ("??-*") do copy "%%F\18.txt" "%NEWDIR%\%%~nF.18"
FOR /D %%F in ("??-*") do copy "%%F\19.txt" "%NEWDIR%\%%~nF.19"

2. このバッチファイルを実行します。

3. map_recipeフォルダ内に、map_recipe_myフォルダが作成され、すべてのデータファイルが異なった名前でコピーされます。

例: 47-沖縄県\03.txtは47-沖縄県.03になります。

これによって、必要な地図レシピをGmlMgrのmainとかburnディレクトリにポンポンほおりこんで、好きな地図データを作ることができるようになります。

バッチファイルが美しくないのは、カンベンしてください…

| | コメント (2) | トラックバック (0)

GmlMgr 1.03

Google Mapsのバージョンが、w2.99になったため、ダウンロードできなくなっていたので、1.03をリリースします。

w2.99対応以外にも、1.01から以下の変更点があります。詳細についてはmk_burn.plのページを参照してください。

変更点

  • Google Maps w2.99対応(以前のバージョンではダウンロードできません)。
  • mk_burn.plで、addr, imgs/dataが存在する場合にはそのまま使うようにした(若干動作が早くなります)。addr, imgs/dataをアップデートしたい場合は-u(update)オプションを使用するかgmlmgr.ini内で指定する。
  • mk_burn.plで、地図データがディスクに無いときの動作を指定できるようにした。-d(download)オプションを使用するかgmlmgr.ini内で指定する。
  • メッセージの英語がおかしかったのを修正した。

「gmlmgr0103.zip」をダウンロード

旧バージョンを使っていた方は、Zipファイルを展開したものを単に上書きしてください。

なお、Google Maps w2.99に対応するだけでしたら、down_maps.pl中に3箇所存在する"com/mt/"という文字列を"com/vt/"に置換するだけで、ダウンロードできるようになります。

 

| | コメント (28) | トラックバック (0)

GmlMgr 設定ファイル gmlmgr.ini

設定ファイルは、gmlmgrディレクトリのgmlmgr.iniになります。
特に変更する必要は無いはずです。
もし設定を変更したい方がいれば以下を参照して適当にいじってください。
基本的にここで設定している値は、正しく変更すれば動くはずです。
まだ実際に有効でない設定もありますが…

設定項目と、値を空白(タブまたはスペースの連続)で区切って表記します。
#先頭行が#の行はコメントとして読み飛ばします(実際には存在する設定項目以外は無視します)。

既定値とあるのは設定項目が記載されてない場合の値です。値を設定せずに設定項目だけを記載した場合は、""(空白)が設定されてしまい正しく動作しないことがあります。

  • addr_dir: 住所と位置のマッピングデータが入ったgm_lite直下のフォルダ名。変更するとGM_Liteの住所検索機能が動作しなくなります。既定値:addr
  • bin_dir: GmlMgrのフォルダ名。既定値:gmlmgr
  • range_dir    範囲設定データを置くフォルダ名。既定値:range
  • rangemain_dir    ダウンロード範囲設定データを置くrange_dir以下のフォルダ名。既定値:main
  • rangeremove_dir    消去範囲設定データを置くrange_dir以下のフォルダ名。既定値:remove
  • rangeburn_dir    mk_burn.plで作成する範囲設定データを置くrange_dir以下のフォルダ名。既定値:burn
  • imgs_dir    地図データが入ったgm_lite直下のフォルダ名。既定値:imgs
  • burn_dir    mk_burn.plで作成するデータを置くgm_lite直下のフォルダ名。既定値:burnimg
  • imgsdata_dir    GM_Liteで使用する縮尺表示用画像パーツなどが入ったimgs以下のdataフォルダ名。既定値:data
  • gmhtml        GM_Liteで使用する初期表示用HTMLファイル名。既定値:gm_lite.html
  • ignore_suffix    範囲設定データを読み込むときに無視する拡張子。既定値:bak   
  • burn_update    mk_burn.plでburnimg以下にaddr, imgs/dataが存在する場合にアップデートするなら1を設定する。存在しなくてもそのままにしておく場合2を設定する。既定値:0(既存のものを使う)
  • burn_download    mk_burn.plで地図データが存在しない場合のデフォルト動作を指定する。
    • 0    問い合わせる(既定値)
    • 1    ディスクに存在するデータのみで作成する
    • 2    ディスクに存在しないデータはダウンロードして作成する
    • 3    中止する
  • log_file    ログファイル名。指定していない場合、ログファイルは作成されず、指定されれば、GM_Lite直下にその名前でログファイルが作成されます。既定値:log.txt
  • verbose        饒舌モード。一番饒舌なメッセージを表示する1、普通の0、静かな-1があります。既定値:0
  • debug_mode    デバッグモード。1にすると実行にかかった時間などを表示します。デバッグ用。既定値:0

gmlmgr.iniの設定は、実行時オプションで上書きされます。ただし、gmlmgr.iniで設定したオプションを取り消すことはできません。すなわち例えば、

gmlmgr.iniに"burn_update 1"を設定したら、かならずaddr, imgs/dataは上書きされます。
gmlmgr.iniに"burn_burn_download 1"を設定したら、"-d2"でダウンロードを指定することはできますが、"-d0"として問い合わせするようにはできません。

| | コメント (2) | トラックバック (0)

GmlMgr todo

今後気が向いたらやろうと思うこと。
上から、優先度順。

これ以外には「おお、それは便利だ!!」とか思ったり、「すげえぇぇ、そいつは画期的なアイデアだ」とか思うリクエストがあれば、やるかも。

ちなみにダウンロード速度の高速化は行ないません(コードの改善によって速くなってしまう!!かもしれませんが)。
それで、サーバからブロックされては百害あって一利なしなので。

使用法例の作成
まあ、私が想定している使い方をとりあえず書いておこうかと思う。

除外指定
取得データ除外指定を可能にする。
これは、GoogleMapsで縮尺によっては地図が提供されていない場所があり、その場所を何度も取得しようとするのを避けるための機能。
ignore.datという名前に記載されている地図は、リクエストをしないようにする。
一旦ログを作成してログから自動作成できるようにすると非常に良いと思われる。
その場合、数回取得を試みてからの方が良いとは思われるが。

bakファイルへのリネーム
remove_maps.pl時に、fool proofとして実行対象の範囲指定ファイルの拡張子をbakにする。

log, debugオプション
コマンドラインでもlogやdebugを指定できるようにする。

いろいろなことをするメニューの作成。
やっぱり、メニューがあったほうがいいって人もいるよね。

オブジェクト指向にする
コードの低品質さは全体的に激しいのだが、特にGmlMgr.pmがpmという名前をつけるに値しないくらい情けなさなので、もうちょっと懲りたい…
まあ、perlは動けばいい、っていうのも正しい道なのだけれど。

範囲のネガティブ指定
削除にしか使い道が無いと思うので、ファイルパスからz, x, yを示す関数を作成し、それが指定範囲内か調べるという形で実装する。

HTTPヘッダを利用しての地図データ更新
If-Modified-Since、Last-Modifiedヘッダーを使用して地図の更新チェックして、必要なデータだけ更新できるようにする。
が、まずGoogleMapsが対応しているか調べるところからはじめないと…

| | コメント (3) | トラックバック (0)

GmlMgr 1.01

GmlMgr 1.00を出して1日も経っていませんが、1.01をリリースします。

現在は動作しません。

すでに1.00をダウンロードしている方は、変更点を読んで、必要であれば1.01をダウンロードして、mk_burn.plを入れ替えてください。

変更点

  • mk_burn.plにおいて、ハードディスクに地図データが存在しない場合に、ダウンロードしないを選んだ後、存在するデータのみでburningディレクトリを作成するか選べるようにした。
  • 指定した範囲内にGoogleMapsでは存在しない縮尺の地図データが存在する場合、その地図データをGoogleMapsにリクエストしても、当然エラーが返ってくるだけです。
    そのような指定をしていることが明白な場合には、リクエストを行なわないでもburningディレクトリを作成できるようにしました。

「gmlmgr0101.zip」をダウンロード

burn2iso.batが入っていないという問題が発覚したので、03/03 8:37にgmlmgr0101.zipを差し替えました。

| | コメント (2) | トラックバック (0)

GmlMgr burn2iso.bat

burn2iso.bat で burnimg ディレクトリの ISO ファイルを作ることができます(Windows環境のみ)。
ISO ファイルは gm_lite 直下に gm_lite.iso という名前で作成されます。
ディレクトリの名前を変更した場合は、burn2iso.batの中身も適宜書き換えてください。
すでに、 gm_lite.iso が存在する場合は上書きされます。

この場合、作成されるのはISOファイルなので、マウントするときには、gm_lite.romではなく、gm_lite.isoを指定します。

例: /home/zaurus/Documents/gml_mount /home/zaurus/Documents/gm_lite.iso

なお、Windows環境でのisoファイルの作成にはmkisofs.exeが必要です。

GM_Lite配布パッケージの中にはCygWin環境で使える mkisofs が同梱されているので、それを使用するようになっていますが、CygWin環境から脱却したい場合は、別途Windowsネイティブバイナリのmkisofs.exeを入手し、gmlmgrフォルダに置いてください。

Windowsネイティブバイナリの mkisofs.exe の入手先。
mkisofs - Mona OS developers Wiki

| | コメント (14) | トラックバック (0)

GmlMgr remove_maps.pl

gmlmgr/range/removeフォルダの下に置いてある範囲指定データを基に、ディスク内の地図イメージを削除します。

せっかく作ったのですが、GmlMgrを使う限りあまり日の目を見ることはないと思われるかわいそうなコマンドです。

なぜなら、実際にはディスク内の地図データを消去したいというニーズはそうそうないでしょう。
持ち運び用地図を作るのであればmk_burn.plを使えばよいですし、思いつくのはディスク容量の不足か、一部のデータを消して再度取得したい(すなわち更新したい)くらいです。

更新の場合は、down_maps.plの"-u"オプションで一発でできます。
ディスク容量の不足であればこのツールを使えるのですが、必要な部分だけのこして他の部分を削除したいというニーズが多いでしょう。要る部分を指定することは簡単ですが、要らない部分の指定はなかなか面倒ということです…
要る部分が長方形だったとしても、要らない部分を指定するには、最低でも、4つの長方形を指定しなくてはならないでしょう。

一度、要る部分を指定するものも作りかけたのですが、安易に作ると凶悪にメモリを消費してしまいました…
そして、安易にできないくらいなら、ディスクを買ったほうが早いということで断念しました…

まあ、どうしてもディスク容量が足りなくなったら使ってやってください。

| | コメント (7) | トラックバック (0)

GmlMgr mk_burn.pl

gmlmgr/range/burnフォルダの下に置いてある範囲指定データを基に、ディスクに存在するデータから、持ち運び用gm_liteフォルダburnimg(burningではありません)を新たに作成します。

オリジナル版には、copy_imgsという、地図データコピーツールがありますが、mk_burn.plは、他の環境で使う地図データを作成する作業に特化したツールです。

burnimgフォルダはgm_lite直下に作成されます。

このburnimgフォルダには、(閲覧に必要な)gm_lite.html、addrおよびimgs\dataフォルダもコピーされるので、そのままイメージ化してもしくはフォルダ丸ごと別の機器に移して、GM_Liteを使用することができます。

すでにburnimgというディレクトリおよび、その中にファイルが存在すれば、新しい地図データがgm_lite/imgsの中にあればアップデート、指定範囲外のものは削除されます。addr、gm_lite.htmlの内容もアップデートされます。

ディスクに存在しない地図データがある場合には以下のように聞いてきます。

Target File is not exist local disk.
Do you want to download? (y/n)

地図データをGoogleMapsからダウンロードする場合には「y」を、ダウンロードしない場合には「n」を押します。

「n」を選んだ場合にはさらに、存在するデータのみでburningディレクトリの作成を継続するか、一旦作成をやめるかを以下のように聞いてきます。

Continue makeing burnimg directory? (y/n)

継続するには「y」を、停止するには「n」を押します。

まあ、焼くためのイメージファイルを作るという感じでcopy_imgsではなくmk_burnとします。

addr, imgs/dataが存在する場合には、そのまま使います(見ているのはフォルダが存在するかだけです)。
addr, imgs/dataをアップデートしたい場合には、-uオプションをつけて起動するか、gmlmgr.iniに"burn_update 1"という行を追加します(タブかスペースで区切ります。
addr, imgs/dataディレクトリは、通常GM_Lite本体が変更されない限りは、そのまま使って問題は無いはずです(自分で中身を書き換えている人は別ですが…)。
もし、addr, imgs/dataが存在しなくても、そのまま(存在しないまま)にしておきたい場合は、"-i"オプションをつけて起動するか、gmlmgr.iniに"burn_update    2"という行を追加します(qgmapユーザ向け)。

地図データが存在しない場合のデフォルト動作を指定することができます。-dオプションの次に数値を指定して実行すると、それぞれ以下の動作になります。
0    問い合わせる(デフォルト)
1    ディスクに存在するデータのみで作成する
2    ディスクに存在しないデータはダウンロードして作成する
3    中止する
これらの動作はgmlmgr.iniでも"burn_download 1"などと指定することができます。

なおburn2iso.batを実行すると、(使えるmkisofsが存在すれば)このフォルダのisoイメージ化ができます。

| | コメント (0) | トラックバック (0)

GmlMgr down_maps.pl

gmlmgr/range/mainフォルダの下に置いてある範囲指定データを基に、GoogleMapsから地図イメージを取得します。GM_Liteのdown_imgs、down_imgs2に相当します。

まずgmlmgr/range/mainフォルダの下に範囲設定データを記載したファイルを置いて、それからdown_maps.plを実行します。

コマンドラインから使う場合、"-u"オプションをつけて起動すると、ディスク内に既存のデータがあってもすべて更新ダウンロードします。
たとえば、新しい住宅地ができたとか、駅ができたとか一部のエリアの地図を更新したい場合に使うとよいでしょう。
このような場合、範囲設定でzoom値の逆指定を使うと、ダウンロードする地図を必要最小限に抑えることができます。

コマンドラインを使わない人は、以下のようにショートカットを設定して更新したいときにはそちらを使うとよいでしょう。

  1. down_maps.plのショートカットを作成します。
    09030201_2
  2. update_mapsとでも名前を変更します。
  3. プロパティでリンク先に"-u"を追加します。
    09030202_4
  4. 09030203_3

| | コメント (1) | トラックバック (0)

«GmlMgr 1.00