首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebBrowser、谷歌登录、FusionTable

WebBrowser、谷歌登录、FusionTable
EN

Stack Overflow用户
提问于 2011-08-04 22:53:14
回答 1查看 2.8K关注 0票数 0

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

但是我不能继续我的项目,因为我不懂很多东西。

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

问题:

1.)

我需要认证。

代码语言:javascript
复制
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错误。

代码语言:javascript
复制
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组件中。

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

有人能帮我回答这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-04 23:51:45

问题1的答案是in section "The ClientLogin interface"

来源:

标识您的应用程序的短字符串,用于日志记录。此字符串的格式应为:"companyName-applicationName-versionID“。

问题2:

您的URL是错误的,必须是:

代码语言:javascript
复制
url := 'http://www.google.com/fusiontables/api/query?sql=select * from 1236944';

看到"sql=“-part了吗?这一点很重要。看一看here的例子。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6943626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档