Я проверяю возможность интеграции 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 ...
Кто-нибудь может мне помочь в этом вопросе?