シェルスクリプトマガジン

第10回 写真から場所を調べる

 25行目では、/tmp/gps_dataファイルから北緯の「N」、南緯の「S」、東経の「E」、西経の「W」を取り出しています。南緯と西経の場合は、先ほど計算した結果を負の値にしなくてはいけません。26行目が負の値にする処理です。第1回で説明した「if」文でもよいのですが、このシェルスクリプトでは「test」コマンドを使いました。

 testコマンドでは、引数の指定した条件式に一致した場合、戻り値として「0」を、一致しなかった場合、「0」以外を返します。「&&」は、前のコマンドが正常終了したときにだけ、その後ろに続くコマンドを実行する「制御演算子」です。戻り値が「0」の場合にだけ正常終了になります。よって、testコマンドと&&でif文のような分岐処理が記述できます。

 「printf」は、フォーマットを指定して文字列を出力するコマンドです。フォーマットを指定しなけば、そのままの文字列が出力されます。改行もされません。

 以上のtestコマンドと&&、printfコマンドを組み合わせて、26行目と25行目で、南緯と西経のときに数値の先頭に「-」を付けて負の値にするようにしています。

 31と32行目は、前述したように、先ほど定義した関数「coordinate」を使って、加工した緯度と経度の値を取得し、変数「gps_latitude」に緯度を、変数「gps_longitude」に経度を代入しています。

 35行目以降で、地図を表示するHTMLファイル(photo.html)を作成しています。地図はPNG形式の画像で出力されますが、「FAQ よくあるご質問」に「API経由で取得したデータを保存したり、二次利用することはできません。」と書かれているのでファイルに保存できません。

 よって、「Yahoo!スタティックマップAPI」のサンプルコードを用いて、HTMLファイルで出力するようにしています。このHTMLファイルにアクセスしたときだけ地図を取得するようにしています。HTMLファイルの作成には、「echo」コマンドと「>」と「>>」のリダイレクトを用いています。書き込み対象のファイルがある場合は「>」で上書き、「>>」で追記します。

 35~40行目はHTMLファイルのヘッダーです。42~47行目がボディーです。42~44行目では、ファイル名や撮影日、撮影時間は、変数から出力しています。

 46行目に記したURLでYOLPのWebサービスにアクセスしています。Yahoo! JAPANのアプリケーションID、地図の幅と高さ、縮尺、地図用に加工した緯度と経度は、変数で与えるように書き換えただけで、サンプルコードのままです。「pointer=on」で撮影場所を示すポインタが表示されます。