2009-11-28

Google Static Maps APIで作成した地図画像を携帯で見ようとしても見れないことがある

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Google Static Maps APIで地図画像を作れるわけですが、ソコニイクでもこの機能を使っています。
この画像を携帯で見たときになんか見れたり見れなかったりすることがありました。
見れなくてもリロードすれば見れたりすることが多かったわけですが、たまになんどリロードしてもダメなときもありました。
同じ画面をPCの方から確認すると問題なく見れてしまう感じだったのです。

私が持っている携帯の調子が悪いのかな?と思ったりもしたのですが、調べてみると似たようなことが他の人にも起こっていることがわかりました。

http://okwave.jp/qa5396695.html
が似たような現象で、どうも携帯だとGoogle Static Maps APIの回数制限にかかりやすい感じということがわかりました。
そして、Google Static Maps API Version2にするのもよさそうな感じということがわかりました。
しかし回数制限にひっかかるとメーターが振り切った画像が出ると書かれているのですが、私の現象では普通の画像リンク切れみたいな感じでちょっと違う感じもします。
と思いつつソコニイクでもGoogle Static Maps API Version2に書き換えてみました。

他にも調べてみると
http://php.tekmemo.net/?p=1111
という記事もあり、こちらは画像がリンク切れみたいな感じと私の現象により似ている感じです。
コチラでは必須パラメータsensorの付け忘れが原因だったようで、私の場合はsensorはつけていたのでこちらも違う感じです。

でいろいろ調べていたところ私がGoogle Static Maps APIを呼ぶときですが、以下のように呼ぶべきところを
http://maps.google.co.jp/maps/api/staticmap?
size=300x200&path=color:0xFF0000|weight:40|0,0|35,139&
sensor=false&key=[MAPS_API_Key]
&がエスケープ処理が係っていて&となっていて
http://maps.google.co.jp/maps/api/staticmap?
size=300x200&path=color:0xFF0000|weight:40|0,0|35,139&
sensor=false&key=[MAPS_API_Key]
となっていました。
なのでこちらも直しました。

そしたらなんか調子よくなってしまいました。
APIをversion2にするのとエスケープ処理をとめるのを同時にやってしまったのでどちらが本当の原因だったのかわからなくなってしまいました。

ちなみにGoogle Static Maps APIの呼び方にエラーがあった場合は、エラーメッセージが表示されるようです。
<img src="http://maps.google.co.jp/maps/api/staticmap?
size=300x200&path=color:0xFF0000|weight:40|0,0|35,139&
sensor=false&key=[MAPS_API_Key]">
としているとエラーになるとリンク切れにしか見えませんが
<a href="http://maps.google.co.jp/maps/api/staticmap?
size=300x200&path=color:0xFF0000|weight:40|0,0|35,139&
sensor=false&key=[MAPS_API_Key]">test</a>
としてリンク先を見ればエラーメッセージが確認できたりします。

工人舎 デュアルディスプレーモバイルノート

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
工人舎さんから発表されたノートPCがキニナルのです。

モニタが2枚あるノートです。
なんか無茶な感じがとてもキニナルのです。

以下で発表されたノートPCが見れます。
http://ascii.jp/elem/000/000/478/478839/

こんなトリッキーなものが10万以下で買えるようです。
ちょっと前にレノボでもデュアルモニタのものが発表されていましたが
えらく高いしなんとなくハンパな感じがしていました。
http://journal.mycom.co.jp/articles/2009/04/20/w700ds/index.html

工人舎さんは、具体的な使い道や便利なのかどうかまったくわからないのですが
なんかキニナルので欲しくなったりしてしまいます。

2009-11-25

紙とあそぶレゴ(R)ブロック

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
無印さんとレゴさんのコラボです。
紙とブロックを組み合わせて遊ぶのです。

レゴブロックにちょうどよい穴をあけることができるパンチです。
と言ってしまえばそれまでな感じではありますが、なんかステキなのでキニナルのです。

詳細は以下を見てください。
http://www.muji.net/store/pc/user/campaign/campaign091113_01.jsp

2009-11-24

Google Static Maps API Version 2なるものがありました

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Google Static Maps APIについて調べると
Google Codeの
http://code.google.com/intl/ja/apis/maps/documentation/staticmaps/
にたどり着いてこちらを参考にすることが多いと思います。

私は知らなかったのですが、これにはVersion2があるのです。
ちなみに上記の日本語版はVersion1です。

Google Codeのページを英語に切り替えると実はVersion2の説明になっていたりします。
http://code.google.com/intl/en/apis/maps/documentation/staticmaps/

Version2に関して日本語の説明ページも別のところにありました。
http://googlemaps.googlermania.com/staticmapsv2/index.html
コチラのページを英語のページとあわせて使うと便利です。

Version2になって、そんなに大きく機能が変わるわけではないのですが、個人的にはVersion2で追加されたvisibleパラメータが便利だと思っています。
visibleには、地図上に表示させたいポイントを複数指定できます。
そしてそのポイントがいい感じで収まるズームサイズを勝手に判別してくれるもののようです。

過去に
Google Static Maps APIのいい感じのズームサイズを決定する
というエントリを書いたわけですが、ここで書いた計算をしないでもGoogleさんのほうでいい感じにしてくれるのです。

Google Codeの日本語記事はとても役に立つのですが、たまに実はちょっと古いみたいなことがある気がします。
最新を常に保って欲しいとはいいませんが、
最新情報が英語版のほうにあるよ
と日本語の記事でも教えてくれるとうれしいなぁとか思ってみました。

2009-11-23

DjangoでGETする際などに同じパラメタが複数設定されているものを取得する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
index.html?a=1&a=2&a=3
みたいなものを受け付けた時のことです。
通常だと
val = request.GET["a"]
みたいな感じで取得するわけですが、上記のような時は
3
とか一つしかとれません。
取得するには
list = request.GET.getlist("a")
のようにgetlistで取得する必要があるのでした。

2009-11-19

Googleトランジットを出発地か到着地を指定して呼ぶ

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
地図を使うアプリケーションでは、電車の乗り換え情報をなんらかの形で利用できると便利なことがあります。
その際に、出発地か到着地のどちらかが決まっているケースは多いような気がします。

携帯でもPCでも使えるGoogleトランジットでは以下のように呼べば出発地もしくは到着地を指定して呼ぶことが出来ます。

出発地を指定
http://www.google.co.jp/transit?saddr=出発地
到着地を指定
http://www.google.co.jp/transit?daddr=到着地
外苑前をセットする場合(地名はUTF-8で指定する必要があります)
http://www.google.co.jp/transit?saddr=外苑前
http://www.google.co.jp/transit?daddr=外苑前

携帯用の地図の場所メモを作成するソコニイクでは、作成した場所メモの最寄り駅を表示することができるのですが、そこで最寄り駅から移動するためのgoogleトランジットのリンクを追加してみました。

2009-11-16

com.docomostar.system.ScheduleのfindByDate

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
iアプリのJavaDocを斜め読みしていたら
com.docomostar.system.Scheduleクラスの中にfindByDateなるものがあるのを知りました。

これを使えば、Googleカレンダーのデータと比較してカレンダーを同期するアプリを作れるかも

と思ったのですが、よく読んだらトラステッドアプリでしか使えないようです。


iアプリでスケジュールに登録することは勝手アプリでもできることを確認したのですが、いちいち確認を求められるし、きっと同じスケジュールをたくさん登録できちゃう気がします。

Google App EngineにProxyを立ててiアプリはこのProxyに通信してGoogleカレンダーのデータを取得してお互いのデータの差分更新をやろうと思ったのですが、残念ながら勝手アプリでは断念です。

トラステッドしか使えないものをもっと少なくすれば、iPhoneやAndroidに意外に対抗できるような気がするかもとか思ってみました。

2009-11-08

iappliTool for Star-1.1でビルドすると落ちる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
私の環境では、iappliTool for Star-1.1でビルドするとiappliToolが終了してしまいます。
iappliToolが終了していてもビルド自体は出来ています。
ビルドできているのでいいと言えばいいのですが、いちいち再起動が面倒なわけです。

これを回避するためには、
iappliToolの「設定」-「エミュレータ環境設定」の「ビルドの設定」タブを選び
「チェック処理」の
「ADFチェック処理(起動時必須項目)を実行する」のチェックをはずす
とよいようです。
これでビルドしても落ちなくなりました。

2009-11-05

PythonさんでGoogleカレンダーのイベント内容を取得する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
PythonでGoogleカレンダーに登録されているイベントを取得してみました。

データの取得にはgdata-python-clientというのを使うのがとても便利です。
以下から取得できます。
http://code.google.com/p/gdata-python-client/

使い方は、以下を見る感じです。
http://code.google.com/intl/ja/apis/calendar/data/1.0/developers_guide_python.html

認証には、AuthSub,OAuth,ClientLoginと種類があるのですが、以下の例ではClientLoginを利用しています。

import gdata.calendar.service

def print_event():
#認証部分
username = 'グーグルアカウント'
calendar_service = gdata.calendar.service.CalendarService()
calendar_service.email = username
calendar_service.password = 'グーグルアカウントのパスワード'
#適当にプログラム名を指定すればよい感じ
calendar_service.source = 'Google_Calendar_Event_Get_test'
calendar_service.ProgrammaticLogin()

#デフォルトのカレンダーから取得する
visibility = 'private'
projection = 'full'
query = gdata.calendar.service.CalendarEventQuery(username, visibility, projection)
#検索条件の指定
#検索範囲を指定
query.start_min = '2009-11-01'
query.start_max = '2009-12-02'
#繰り返しイベントを別のイベントとして取得
query.singleevents = 'true'
#イベントの開始日時の昇順でソート
query.orderby='starttime'
query.sortorder='a'
feed = calendar_service.CalendarQuery(query)

for ev in feed.entry:
for e in ev:
print '%s. [%s]-[%s]' % (ev.title.text,e.start_time,e.end_time)


ちなみにCalendarEventQueryの検索条件に指定できるのは、以下を参照すると分かります。
http://code.google.com/intl/ja/apis/calendar/data/2.0/reference.html#Parameters
テキストで検索するには以下を参照するとわかります。
http://code.google.com/intl/ja/apis/calendar/data/1.0/developers_guide_python.html#RetrievingWithQuery

2009-11-03

Djangoでいきなりテンプレートへ渡す

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Djangoで説明ページなどでなんの処理もしないでいきなりテンプレートに渡したいと時があります。
その際には、汎用ビューの一つの
django.views.generic.simple.direct_to_template
を使えばOKです。
例えば/testというページにリクエストが来たらtemplate/test.htmlに飛ばしたいときは
urls.py
に以下のような感じで書くとよい感じです。

urlpatterns = auth_patterns + patterns('',
('^test/$','django.views.generic.simple.direct_to_template',
{'template': 'test.html'}),
) + urlpatterns

どうやるんだろうと思っていたら、Google App Engine Patchのサンプルのトップページでも使っていました。