我考虑了将fusiontables集成到我的基于TWebBrowser的Delphi应用程序中的可能性。
但是我不能继续我的项目,因为我不懂很多东西。
我有一个公用表,我想访问它,上传一些行,更新一些行,并用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;这只是一个演示,但它正在工作。我不知道什么是“源”参数,但我得到了三行结果,最后一行是“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登录逻辑,其中登录创建了一个会话,该会话被标识为在此浏览器中有效的隐藏cookie。但是可能Google登录使用的是在每个请求中传递的标识符...我不知道。
因此,我必须在浏览器中自动“登录”。(如果不是这样,那么我可以使用WinInet或IdHTTP登录,并且在浏览器中只使用令牌)。
现在我不知道如何自动登录而不在html中显示登录名/pwd,或者在TWebBrowser中显示令牌结果...
第二:
我必须修改数据。这可以在像idHTTP这样的透明组件中实现,并且我只能显示WebBrowser中的更改……
第三:
我可以显示带有图层的融合表。如果我已经被认证过一次,这并不是太难。
所以:我现在很困惑,因为Google只支持Python/Java作为客户端库,而不支持Delphi。我需要非常透明地将身份验证和可视化集成到我的TWebBrowser组件中。
但是在网络上没有很好的例子或资源来演示登录+融合操作……
有人能帮我回答这个问题吗?
发布于 2011-08-04 23:51:45
问题1的答案是in section "The ClientLogin interface"
来源:
标识您的应用程序的短字符串,用于日志记录。此字符串的格式应为:"companyName-applicationName-versionID“。
问题2:
您的URL是错误的,必须是:
url := 'http://www.google.com/fusiontables/api/query?sql=select * from 1236944';看到"sql=“-part了吗?这一点很重要。看一看here的例子。
关于你的其他问题:它们有点令人困惑。我认为您不必使用TWebBrowser,可以使用任何可以发出GET和POST请求的东西。对于登录部分:此信息应该由您的用户提供,因为您的应用程序应该使您的用户能够使用他们的数据,对吗?
https://stackoverflow.com/questions/6943626
复制相似问题