我检查了将 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 组件中。
但是网上没有很好的例子或资源来演示登录+融合表操作......
有人可以帮我解决这个问题吗?