2011-08-04 70 views
0

我检查是否可以将融合表集成到我的基于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操作没有很好的例子,或源...

任何人可以帮助我在这个问题?

+0

关于第三个,如果你的表是公开的,你为什么需要认证? (我猜你正在使用Google Maps API?)只需使用HTTP客户端(IdHTTP?)来验证和更新值,并使用webbrowser来显示地图。 – lmz

+1

请不要问大问题。一次提出一个问题。把三个问题放在一起使得这个网站对每个人都没什么用处,关于编写你的应用程序的所有事情的一个非常棘手的问题是“太窄”而不能对其他人有用,所以下次你做一个大问题时,我会投票关闭。 –

+0

首先:对于megaquestion抱歉,但我不知道从哪里开始,因为所有的都是一个......第二:现在我必须使用公共表,因为我没有非免费账户。但后来我必须使用私人表格,因为它们的信息很重要,而且他们不想分享它们。 – durumdara

回答

1

问题1回答in section "The ClientLogin interface"

来源:

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

问题2:

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

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

参见 “SQL =” -part?这很重要。例如,看看here

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

+0

我关闭了这个问题,并打破了两个部分,因为这个其他人不能对它做出反应(太多)...我接受你的答案。 – durumdara