![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Здрасте, всем!
Пишу программу, которая авторизуется и создает fusion tables, на сервисе google, с помощью sql запроса. Работа осуществляется через Synapse. Проблема возникает при отправке самого запроса на создание этой пресловутой таблицы, в ответе от сервера сказано, что отправленный sql запрос пустой: Код HTML:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
Data: TStringList;
Response:TMemoryStream;
sql, URL, Params, Log, Psw:string;
http:THTTPSend;
begin
http:=THTTPSend.Create;
try
Response := TMemoryStream.Create;
sql:=EncodeURLElement('sql=CREATE TABLE Animal (animal: STRING, fav_food: STRING, population: NUMBER, location: LOCATION, timestamp: DATETIME)');
URL := 'https://www.google.com/accounts/ClientLogin';
http.Protocol:='1.1';
http.AddPortNumberToHost:=False;
http.MimeType:='application/x-www-form-urlencoded';
Params := 'accountType=HOSTED_OR_GOOGLE&Email=' + EncodeURLElement(Edit1.Text) +
'&Passwd=' + EncodeURLElement(Edit2.Text)+'&service=writely&source=Google Chrome';
// Авторизация
if HttpPostURL(URL, Params, Response) then
begin
try
Data:=TStringList.Create;
Response.Seek(0, soFromBeginning);
Data.LoadFromStream(Response);
Params:=Data.Text;
http.Headers.Add(Trim(Copy(Params, Pos('Auth=', Params) + 5, Length(Params))));
// Отправка sql запроса
http.Headers.Add('GData-Version: 3.0');
url:='https://fusiontables.googleusercontent.com/fusiontables/api/query?encid=true';
WriteStrToStream(HTTP.Document, sql); //задаю sql запрос
if http.HTTPMethod('POST',url) then
Memo1.Lines.LoadFromStream(http.Document);
finally
Data.Free;
Response.Free;
end;
end;
finally
http.Free;
end;
end;Видимо я, что-то не так делаю и не знаю как правильно это сделать. Пользуюсь synapse'сом только неделю. Подскажите где ошибка? ![]() Последний раз редактировалось TolAlik, 07.03.2012 в 02:28. Причина: Найдено решение |
|
#2
|
||||
|
||||
|
Еще раз здратсте!
Покумекав еще несколько дней, подзубрив английский и наконец-то правильно прочитав документацию, нашел решение ![]() Думаю, данный пример многим будет интересен, если кто захочет поработать с сервисом google геокодирование. Надеюсь, из документации вы поймете, в чем связь между Fusion Tables и геокодирование в google. Вот сам код: Код:
procedure TForm1.Button2Click(Sender: TObject);
var
sql, URL,s:string;
AuthStr: string;
begin
with THTTPSend.Create do
try
sql:='CREATE TABLE SaleInformation (customer:NUMBER)'; //Здесь формируется sql запрос на создание таблицы
AuthStr:='Authorization: GoogleLogin auth=' + GetAuthIdHTTP(Edit1.Text, Edit2.Text); //Здесь получаем ключ авторизации
Headers.Add('GData-Version: 3.0');
Headers.Add(AuthStr); //Записываем ключ авторизации в Headers
MimeType:='application/x-www-form-urlencoded'; //из документации
Protocol:='1.1'; //из документации
AddPortNumberToHost:=False; //из документации
URL:='https://fusiontables.googleusercontent.com/fusiontables/api/query?encid=true'; //адрес для отправки запроса (из документации)
Document.Clear;
WriteStrToStream(Document, 'sql='+EncodeURL(sql)); //Записывает тело потока наш запрос
if HTTPMethod('POST',URL) then //Отправка данных методом POST
Memo1.Lines.LoadFromStream(Document); //Вывели ответ сервера
finally
Free;
end;
end;![]() |