Delphi, веб-браузер, Google Login, FusionTable - PullRequest
0 голосов
/ 04 августа 2011

Я проверяю возможность интеграции 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 не имеет интерфейса аутентификации, я думаю, что мне нужно аутентифицировать «браузер». Может быть, это неправильная идея, но мое мышление основано на общей логике веб-входа, когда при входе в систему создается Сессия, а Сессия идентифицируется как скрытый файл cookie, действительный в этом браузере. Но, возможно, логин Google использует идентификатор, который передается при каждом запросе ... Я не знаю.

Так что из-за этого я должен сделать автоматический вход в браузер. (Если это не так, тогда я могу использовать WinInet или IdHTTP для входа в систему и использовать только токен в браузере).

Теперь я понятия не имею, как сделать этот вход автоматически, без отображения имени пользователя / pwd в html или показа результата токена в TWebBrowser ...

Второе:

Я должен изменить данные. Это может быть реализовано в прозрачном компоненте, таком как idHTTP, и я могу показать только изменения в WebBrowser ...

Третье:

Я могу показать таблицу слияния со слоем. Это не так уж сложно, если я прошел проверку подлинности один раз ...

Итак: я сейчас сбит с толку, потому что Google поддерживает только Python / Java в качестве клиентской библиотеки, а не Delphi. Мне нужно очень прозрачно интегрировать аутентификацию и визуализацию в мой компонент TWebBrowser.

Но в сети нет ни одного хорошего примера или источника, который демонстрировал бы логин + манипуляцию с использованием fusiontable ...

Кто-нибудь может мне помочь в этом вопросе?

1 Ответ

1 голос
/ 04 августа 2011

Ответ на вопрос 1 в разделе «Интерфейс ClientLogin» :

Источник:

Короткая строка, идентифицирующая ваше приложение, для целей регистрации.Эта строка должна иметь вид: "companyName-applicationName-versionID".

Вопрос 2:

Ваш URL неверный, должен быть:

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

Смотрите "sql =" -part?Это важноПосмотрите здесь для примера.

По поводу других ваших вопросов: они немного запутаны.Я думаю, что вам не нужно использовать TWebBrowser и можете использовать все, что может выдавать запросы GET и POST.Для части входа в систему: эта информация должна быть предоставлена ​​вашим пользователем, потому что ваше приложение должно дать вашим пользователям возможность работать с их данными, верно?

...