Обновите Google широту

Я построил GPS-трекер, который обновляет домашнюю страницу с ее позициями (и изображениями с веб-камеры).

Как я могу обновить текущее местоположение пользователя Google Локатора? Простой скрипт bash, вызывающий curl или c-программу, был бы хорош!

Обновление: мне также нужно знать, как сделать аутентификацию.

3 ответа

Решение

Это то, что вы ищете?

В консоли API обязательно запросите доступ к Локатору на вкладке "Службы". Этот скрипт запросит ключ API, идентификатор клиента, секрет клиента, а затем запустит браузер для входа в систему (вам может потребоваться настроить эту строку для вашей системы, см. Ниже). После того, как вы вошли в систему и предоставили доступ к своему приложению, вы получите код, который вы вставите по запросу сценария. Затем вы введете свой широту / долготу / высоту, которая будет опубликована в сервисе.

#!/bin/sh

LoginUrl="https://accounts.google.com/o/oauth2/auth"
TokenUrl="https://accounts.google.com/o/oauth2/token"
RedirectUri="urn:ietf:wg:oauth:2.0:oob"
Scope="https://www.googleapis.com/auth/latitude.all.best https://www.googleapis.com/auth/latitude.all.city https://www.googleapis.com/auth/latitude.current.best https://www.googleapis.com/auth/latitude.current.city"
CurlocUrl="https://www.googleapis.com/latitude/v1/currentLocation"

read -s -p "Enter your API Key: " APIKey
echo ""

read -s -p "Enter your Client ID: " ClientId
echo ""

read -s -p "Enter your Client Secret: " ClientSecret
echo ""

# this next line may need to be tweaked in order to launch the browser
open "${LoginUrl}?response_type=code&client_id=${ClientId}&redirect_uri=${RedirectUri}&scope=${Scope}"

read -s -p "Log in, grant permission, enter the code: " Code
echo ""

resp=`curl -is "${TokenUrl}" -d "code=${Code}&client_id=${ClientId}&client_secret=${ClientSecret}&redirect_uri=${RedirectUri}&grant_type=authorization_code"`

AccessToken=`echo "${resp}" | sed -e '/access_token/ !d; s/ *"access_token" *: *"\(.*\)",*/\1/'`
TokenType=`echo "${resp}" | sed -e '/token_type/ !d; s/ *"token_type" *: *"\(.*\)",*/\1/'`
ExpiresIn=`echo "${resp}" | sed -e '/expires_in/ !d; s/ *"expires_in" *: *"\(.*\)",*/\1/'`
RefreshToken=`echo "${resp}" | sed -e '/refresh_token/ !d; s/ *"refresh_token" *: *"\(.*\)",*/\1/'`

echo "Enter the location details." 
read -p "Latitude in degrees (nn.nnnn): " latitude
read -p "Longitude in degrees (nn.nnnn): " longitude
read -p "Elevation in feed (nnnn): " altitude

curl -is "${CurlocUrl}" -H "Content-Type: application/json" -H "Authorization: OAuth ${AccessToken}" -d "{ 'data': { 'kind': 'latitude#location', 'latitude': '${latitude}', 'longitude': '${longitude}', 'accuracy': 0, 'altitude': ${altitude} } }"

Когда вы говорите, что хотите "обновить" пользователя Локатора Google, вы хотите "обновить его текущее местоположение", верно?

Для некоторых служб Google Google настроит проект Google API на Google Code. В этом случае вам повезло, потому что есть API Google Локатора, который описывает различные действия, которые вы можете выполнять с помощью интерфейса REST (REST всегда совместим с curl). Вот их пример кода для обновления местоположения пользователя:

POST https://www.googleapis.com/latitude/v1/currentLocation?key=INSERT-YOUR-KEY
/* Authorization header here */
Content-Type: application/json

{
  "data": {
    "kind":"latitude#location",
    "latitude":37.420352,
    "longitude":-122.083389,
    "accuracy":130,
    "altitude":35
    }
}

Веб-сайт API Google Локатора описывает все детали. Вам нужно будет получить ключ API, прежде чем вы сможете начать писать код, и вам нужно будет выполнить подтверждение подлинности OATH 2.0, прежде чем вы сможете на самом деле обновить местоположение пользователя.

Обновить

Если вы не хотите писать код аутентификации самостоятельно, Google предоставляет несколько готовых клиентских библиотек: .NET, GWT, Java, PHP, Python и Ruby. Каждый из них поддерживает полный API, включая аутентификацию.

У Google есть полный пример, который использует свой Java API для аутентификации. Следуйте инструкциям на http://samples.google-api-java-client.googlecode.com/hg/latitude-json-oauth-sample/instructions.html?r=default и попробуйте.

Существует запись о том, как использовать Curl с сервисами Google:

http://code.google.com/apis/gdata/articles/using_cURL.html

После этого первым шагом будет:

curl ^
  -k ^
  --proxy <your_proxy_here> ^
   https://www.google.com/accounts/ClientLogin ^
   --data-urlencode Email=hellonico@gmail.com ^
   --data-urlencode Passwd=<cant_tell_you> ^
   -d accountType=GOOGLE ^
   -d source=Google-cURL-Example ^
   -d service=lh2

Это вернет вам что-то вроде:

SID=<long_string_1>
LSID=<long_string_2>
Auth=<long_string_3>

Теперь вы можете использовать этот токен непосредственно для аутентификации и доступа к Службам Google. Доступ к Picassa в режиме чтения:

curl ^
 --silent ^
 --header "Authorization: GoogleLogin auth=<long_string_3>" ^    
 "http://picasaweb.google.com/data/feed/api/user/default"

И чтобы обновить данные, используя PUT или POST:

curl ^
  --silent ^
  --request POST ^
  --data-binary "@template_entry.xml" ^
  --header "Content-Type: application/atom+xml" ^
  --header "Authorization: GoogleLogin auth=<long_string_3" ^
  "http://picasaweb.google.com/data/feed/api/user/brad.gushue" 

То же самое относится и к Google Location, вам просто нужно сначала запросить GoogleAPI, а затем перейти к документации, объясняющей, как размещать данные.

POST нужно что-то вроде этого:

POST https://www.googleapis.com/latitude/v1/location?key=INSERT-YOUR-KEY
/* Authorization header here */
Content-Type: application/json

{
 "data": {
 "kind":"latitude#location",
 "timestampMs":"1274057512199",
 "latitude":37.420352,
 "longitude":-122.083389,
 "accuracy":130,
 "altitude":35
 }
}

Вот и ты.

В этом посте все знаки ^ означают EOL и используются для разделения всех этих длинных команд на несколько строк.

Другие вопросы по тегам