我检查是否可以将融合表集成到我的基于Delphi TWebBrowser的应用程序中。Delphi,WebBrowser,Google登录,FusionTable
但是我不能继续我的项目,因为我不明白很多事情。
我有一个公共表,我想访问它,上传一些行,更新一些行,并用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,这个浏览器中有效。 但是,Google登录可能会使用每个请求传递的标识符......我不知道。
因此,我必须在浏览器中自动“登录”。 (如果不是这样,那么我可以使用WinInet或IdHTTP进行登录,并且只使用浏览器中的令牌)。
现在我不知道如何自动执行此登录不显示HTML中的登录名/密码,或显示在TWebBrowser令牌结果...
二:
我必须修改数据。这可以实现的在透明部件,如idHTTP,我可以只显示在web浏览器的变化...
第三:
我可以显示该融合表的层。这并不难,如果我已经被认证一次...
所以:我现在很困惑,因为谷歌只支持Python/Java作为客户端库,而不是Delphi。我需要非常透明地将认证和可视化集成到TWebBrowser组件中。
但在网什么证明登录+ fusiontable操作没有很好的例子,或源...
任何人可以帮助我在这个问题?
关于第三个,如果你的表是公开的,你为什么需要认证? (我猜你正在使用Google Maps API?)只需使用HTTP客户端(IdHTTP?)来验证和更新值,并使用webbrowser来显示地图。 – lmz
请不要问大问题。一次提出一个问题。把三个问题放在一起使得这个网站对每个人都没什么用处,关于编写你的应用程序的所有事情的一个非常棘手的问题是“太窄”而不能对其他人有用,所以下次你做一个大问题时,我会投票关闭。 –
首先:对于megaquestion抱歉,但我不知道从哪里开始,因为所有的都是一个......第二:现在我必须使用公共表,因为我没有非免费账户。但后来我必须使用私人表格,因为它们的信息很重要,而且他们不想分享它们。 – durumdara