0

Google Latitude APIの v1 (OAuth 2.0 経由) 、特にlistメソッドを使用して、ロケーション履歴を取得しようとしています。

2 つのタイムスタンプ間のレコードを取得しようとすると、場所が返されません。ただし、最新の場所 (〜 860、過去 24 時間のみ) を取得できます。「最近」のセットで返されたものと同じ期間内の場所を取得しようとしても、結果はゼロになります。

私がここで何か間違ったことをしているのか、それとも問題が Latitude にあるのか、誰かが知っていますか? この方法でロケーション履歴を取得できますか?

解決済み: 指定された開始と終了のタイムスタンプはミリ秒単位である必要があります

datetimeオブジェクトをミリ秒に変換するために使用した関数を次に示します。

def dt_from_epoch(epoch):
    epoch = int(epoch)
    secs = epoch/1000
    mils = epoch - (secs*1000)

    dt = datetime.datetime.fromtimestamp(secs)
    dt.replace(microsecond=mils*1000)
    return dt

def dt_to_mils(dt):
    return int((time.mktime(dt.timetuple())*1000) + (dt.microsecond/1000))

元の例

テスト ケース スクリプト:

# Service obtained in the usual OAuth 2.0 way using oauth2client and
# apiclient.discovery.build.
# Scope used: https://www.googleapis.com/auth/latitude.all.best

print "## Retrieve most recent history"
locs = service.location().list(granularity='best', max_results=1000).execute()
first = locs['items'][len(locs['items'])-1]
last= locs['items'][0]

first = datetime.datetime.fromtimestamp(int(first['timestampMs'][:-3]))
last = datetime.datetime.fromtimestamp(int(last['timestampMs'][:-3]))

print "%s - %s: %d" % (first.strftime('%Y-%m-%d %H:%M:%S'),
    last.strftime('%Y-%m-%d %H:%M:%S'), len(locs['items']))


print "## Retrieve history between %s and %s" % (
    first.strftime('%Y-%m-%d %H:%M:%S'), last.strftime('%Y-%m-%d %H:%M:%S'))

locs = service.location().list(
    granularity='best',
    min_time=int(time.mktime(first.timetuple())),
    max_time=int(time.mktime(last.timetuple())),
    max_results=1000
).execute()

results = len(locs['items']) if 'items' in locs else 0
print "%s - %s: %d" % (first.strftime('%Y-%m-%d %H:%M:%S'),
    last.strftime('%Y-%m-%d %H:%M:%S'), results)

スクリプト出力:

## Retrieve most recent history
2012-08-25 23:02:12 - 2012-08-26 15:37:09: 846
## Retrieve history between 2012-08-25 23:02:12 and 2012-08-26 15:37:09
2012-08-25 23:02:12 - 2012-08-26 15:37:09: 0

「最近の履歴」の JSON 出力:

{
  "data": {
    "kind": "latitude#locationFeed",
    "items": [
      {
        "kind": "latitude#location",
        "timestampMs": "1345995443316",
        "latitude": (latitude),
        "longitude": (longitude)
      },
    (continues...)
    ]
  }
}

「X と Y の間の履歴」の JSON 出力:

{
 "data": {
    "kind": "latitude#locationFeed"
  }
}
4

1 に答える 1

2

ミリ秒ではなく秒単位で渡しているようです(エポック以降)。具体的には、[:-3] を使用して 1000 で割っている方法に注意してください...

于 2012-08-31T18:13:06.557 に答える