« 2006年5月14日 - 2006年5月20日 | トップページ | 2006年5月28日 - 2006年6月3日 »

2006年5月27日 (土)

LWP::UserAgentがとってきたのはutf8ではなかった

前回に続いてGoogle Maps APIをいじってて分かったこと。

データベースに座標データとコメントをいれておいて、それを取り出しGoogle Mapsにマークをつけるプログラムを書いてました。それで今度はWebページからデータを入力してデータベースに格納することをしていました。

最初は経度、緯度、コメントをそのまま入力する形で作成。これは@ITの記事を参考にしながらやったら、意外と簡単にできました。

それで、次は経度・緯度をそのまま数値で入力させるのは面倒なので、住所をいれたら勝手に経度・緯度を調べる仕組みに変更します。Google Mapsをいじり始めたあたりから変換してくれるサービスを探していてGeocodingというよさそうなサービスを見つけていました。

というわけで、そのサービスを使うために通信する方法を調べて、経度・緯度を取得するテストプログラムを作りました。返ってくるデータはXML形式なので欲しいところだけ抽出するように変更します。XML::DOM::Parserモジュールなどを使用したのですが、expatを入れないと上手くインストールできないことに気づかずしばらく悩みました。

それから前のCGIプログラムをコピーし、それに切り貼りしました。そうしたら、コメントが文字化け?する事態が発生。Webページに表示させてみたりしたんですが、utf8で表示させると正しく入力した通りにでるので問題ありませんでした。

問題だったのは経度・緯度がutf8になってなかった事でした。正確にはどういう状態かよく分からないのですが、utf8フラグというものがついていないせいだと思います。

経度・緯度もutf8に変換するようにしてみたら、正しく動作するようになりました。まぁ、まだまだ色々問題あるのでもう少しいじってみたいと思います。

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

2006年5月23日 (火)

install_driver(mysql) failed

ここ数日、大学のWSのほうでGoogle Maps APIで少々試していました。そこで学んだことで主だったことを記録に残します。

  • Webサーバ名とIP直打ちではAPIのキーが変わる。つまり、http://www.google.co.jp/http://216.239.59.104ではキーが別になる。
  • 文字コードをutf-8にしないと文字化けするどころかmapが表示されない。

上記のはすぐ気づいたので良かったです。

しかし、「MySQLにデータを取り出しGoogleMapのマーカー(検索すると地図の上に出るピンみたいなの)の座標として表示する」といった処理をPerlを使って書いていたんですが、端末上で実行する際には問題ないのにブラウザでアクセスするとエラーになるといった問題にかなり苦戦してました。

これがそのエラーです。

[Mon May 22 22:59:00 2006] [error] [client 192.168.14.4] install_driver(mysql) failed: Can't load '/export/local/lib/perl5/site_perl/5.8.8/sun4-solaris/auto/DBD/mysql/mysql.so' for module DBD::mysql: ld.so.1: /export/local/bin/perl5.8.8: fatal: libgcc_s.so.1: open failed: No such file or directory at /export/local/lib/perl5/5.8.8/sun4-solaris/DynaLoader.pm line 230.,

これのために色々試しました。gcc(libgcc_s.so.1)はNFSでつながっているディレクトリにあったのでロードできないのかなと考え、gccをコンパイルしたりもしました。

結論としてはApacheのhttpd.confに

SetEnv LD_LIBRARY_PATH /export/local/lib(libgcc_s.so.1があるディレクトリ)

を付け加え、Apacheを再起動するだけ。ローカルにライブラリが有るか無いかは関係ないようです。NFSって凄いですね。

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

« 2006年5月14日 - 2006年5月20日 | トップページ | 2006年5月28日 - 2006年6月3日 »