2

我已经构建了一个 GPS 跟踪器,它可以使用其位置(和网络摄像头图像)更新主页。

如何更新谷歌纬度用户的当前位置?一个调用 curl 或 c 程序的简单 bash 脚本会很好!

更新:我还需要知道如何进行身份验证。

4

3 回答 3

8

当您说要“更新”谷歌纵横用户时,您想“更新他们的当前位置”,对吗?

对于一些谷歌服务,谷歌会在谷歌代码上建立一个谷歌API项目。在这种情况下,您很幸运,因为有一个 Google Latitude API 描述了您可以使用 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
    }
}

Google Latitude API 网站描述了完整的细节。您需要先获取 API 密钥,然后才能开始编写代码,并且需要进行 OATH 2.0 身份验证握手,然后才能真正更新用户的位置。

更新

如果您不想自己编写身份验证代码,Google 提供了几个预打包的客户端库,分别采用.NET、GWT、Java、PHP、Python 和 Ruby。它们都支持完整的 API,包括身份验证。

谷歌有一个完整的例子,它使用他们的 Java API 进行身份验证。按照http://samples.google-api-java-client.googlecode.com/hg/latitude-json-oauth-sample/instructions.html?r=default上的说明进行操作并尝试一下。

于 2011-08-21T14:02:56.153 回答
4

这是你要找的吗?

API 控制台中,请务必在“服务”选项卡下请求访问 Latitude。该脚本将提示输入 API 密钥、客户端 ID、客户端密码,然后启动浏览器进行登录(您可能需要为您的系统调整该行,见下文)。登录并授予对应用程序的访问权限后,您将获得一个代码,您将在脚本提示时粘贴该代码。然后您将输入您的纬度/经度/海拔高度,这将被发布到服务中。

#!/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} } }"
于 2012-03-27T01:34:14.087 回答
2

有一个关于如何将 Curl 与谷歌服务一起使用的条目:

http://code.google.com/apis/gdata/articles/using_cURL.html#other-tools

在此之后,第一步将是:

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,并用于将所有这些长命令拆分为多行。

于 2012-03-30T08:10:22.710 回答