0

我检查了将 fusiontables 集成到基于 Delphi TWebBrowser 的应用程序中的可能性。

但是我不能继续我的项目,因为我不明白很多事情。

我有一个公共表,我想访问它,上传一些行,更新一些行,并用 fusiontablelayer 显示它。我现在只有“免费”帐户。

问题:

1.)

我需要进行身份验证。

var
    posts, s, url : string;
    authToken : string;
    postdata,
    header : OleVariant;
    params : TStringList;
    i : integer;
begin
    header := 'Content-type: application/x-www-form-urlencoded'#13#10;

    params := TStringList.Create;
    try
        params.Values['accountType'] := 'GOOGLE';
        params.Values['Email'] := 'any';
        params.Values['Passwd'] := 'any';
        params.Values['service'] := 'fusiontables';
        params.Values['source'] := '?'; // WHAT IS THIS?
        posts := EncodeParamsToURL(params);
    finally
        params.Free;
    end;

    postdata := VarArrayCreate([0, Length(posts) - 1], varByte);

    // Put Post in array
    for i := 1 to Length(posts) do
        postdata[I - 1] := Ord(posts[I]);

    url := 'https://www.google.com/accounts/ClientLogin';
    wb.Navigate(url, emptyparam, emptyparam, postdata, header);

    while wb.ReadyState <> READYSTATE_COMPLETE do
        Application.ProcessMessages;

    s := (wb.Document as iHTMLDocument2).body.innerText;

这只是一个演示,但它正在工作。我不知道什么是“SOURCE”参数,但我得到了三行结果,最后一行是包含令牌的“Auth=....”。

http://code.google.com/intl/hu-HU/apis/fusiontables/docs/samples/apps_script.html

2.)

我需要将此令牌推送到标题中。当我这样做时,我得到了 401 错误。

params := TStringList.Create;
try
    params.Text := s;
    authToken := params.Values['Auth'];
finally
    params.Free;
end;


header := 'Authorization : GoogleLogin auth="' + authToken + '"'#13#10;

url := 'http://www.google.com/fusiontables/api/query?select * from 1236944';

wb.Navigate(url, emptyparam, emptyparam, emptyparam, header);

所以我现在完全糊涂了。

第一的:

因为JavaScript层没有认证接口,我想我需要对“浏览器”进行认证。可能这是错误的想法,但我的想法基于常见的 Web 登录逻辑,其中登录创建一个 Session,并且 Session 被识别为隐藏的 cookie,在这个浏览器中是有效的。但是可能谷歌登录是使用每个请求传递的标识符......我不知道。

因此,因此我必须在浏览器中进行自动“登录”。(如果不是这样,那么我可以使用 WinInet 或 IdHTTP 进行登录,并且只使用浏览器中的令牌)。

现在我不知道如何在不显示 html 中的登录名/密码或在 TWebBrowser 中显示令牌结果的情况下自动进行此登录...

第二:

我必须修改数据。这可以在透明组件中实现,例如 idHTTP,我只能显示 WebBrowser 中的更改...

第三:

我可以显示带有图层的融合表。如果我已经通过身份验证,这并不难......

所以:我现在很困惑,因为谷歌只支持 Python/Java 作为客户端库,而不支持 Delphi。我需要非常透明地将身份验证和可视化集成到我的 TWebBrowser 组件中。

但是网上没有很好的例子或资源来演示登录+融合表操作......

有人可以帮我解决这个问题吗?

4

1 回答 1

1

问题 1在“ClientLogin 界面”部分中得到解答:

资源:

标识您的应用程序的短字符串,用于记录目的。此字符串应采用以下形式:“companyName-applicationName-versionID”。

问题2:

你的网址是错误的,它必须是:

url := 'http://www.google.com/fusiontables/api/query?sql=select * from 1236944';

看到“sql=”部分了吗?这很重要。看看这里的例子。

关于您的其他问题:它们有点令人困惑。我认为您不必使用 TWebBrowser 并且可以使用任何可以发出 GET 和 POST 请求的东西。对于登录部分:此信息应该由您的用户提供,因为您的应用程序应该授权您的用户使用他们的数据,对吗?

于 2011-08-04T15:51:44.560 回答