2011-08-04 2 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); 

그래서 전 지금 완전히 혼란 스럽습니다.

첫째 : 자바 스크립트 층이 인증 인터페이스를 가지고 있지 않기 때문에

, 나는 내가 "브라우저"를 인증 할 필요가 있다고 생각합니다. 이것이 잘못된 생각 일지 모르지만, 로그인이 세션을 생성하는 일반적인 웹 로그인 로직을 기반으로하는 나의 사고와 세션은 숨겨진 쿠키로 식별되며이 브라우저에서 유효합니다. 하지만 Google 로그인은 요청마다 전달 된 식별자를 사용합니다 ... 잘 모르겠습니다.

그래서 나는 브라우저에서 자동 "로그인"을해야하기 때문에. (그게 사실이 아니라면 WinInet이나 로그인 용 IdHTTP를 사용할 수 있고 브라우저에서 토큰 만 사용할 수 있습니다).

I :

지금 나는 ... 어떻게 HTML에서 로그인 이름/비밀번호를 표시하거나 TWebBrowser에서 토큰 결과를 보여없이 자동 로그인을 수행하는 두 번째

을 생각이없는 데이터를 수정해야합니다.

셋째 ...이 idHTTP처럼 투명한 구성 요소에서 실현 가능 할 수 있으며, I는 웹 브라우저의 변경 사항 만 표시 할 수 있습니다 : 나는 층으로 융합 테이블을 표시 할 수 있습니다

. 한 번 인증을 받으면 너무 어렵지 않습니다 ...

So : Google은 Python/Java를 클라이언트 라이브러리로만 지원하며 Delphi는 지원하지 않기 때문에 지금 혼란 스럽습니다. 인증 및 시각화를 TWebBrowser 구성 요소에 매우 투명하게 통합해야합니다.

그러나 로그인 + fusiontable 조작을 보여 무엇을 그물에 좋은 예 또는 소스가 없습니다 ...

아무도이 질문에 나를 도와 드릴까요?

+0

약 3 번째 테이블이 공개이면 왜 인증해야합니까? (나는 당신이 Google Maps API를 사용하고있는 것 같습니까?) HTTP 클라이언트 (IdHTTP?)를 사용하여 값을 인증하고 업데이트하고 웹 브라우저를 사용하여지도를 표시하십시오. – lmz

+1

메가 질문을하지 마십시오. 한 번에 한 가지 질문하십시오. 3 가지 질문을 하나씩 쓰면이 사이트가 모든 사람들에게 덜 유용하게 쓰일 수 있습니다. 앱을 작성하는 것과 관련된 모든 것에 대한 큰 질문은 "너무 좁아서"다른 사람에게 유용하지 않을 수 있습니다. 다음에 메가 질문을하면 투표 할 것입니다. 닫으십시오. –

+0

첫째로 : megaquestion을 유감스럽게 생각합니다. 그러나 모든 것이 하나이기 때문에 내가 어디에서 시작하는지 모르겠습니다 ... 둘째 : 이제는 무료 계정이 없기 때문에 나는 대중 테이블을 사용해야합니다. 하지만 나중에 개인 정보 테이블을 사용해야합니다. 정보는 중요하며 공유하지 않으려 고합니다. – durumdara

답변

1

질문 1 in section "The ClientLogin interface" 대답한다 :

출처 :

짧은 문자열이 로깅 목적을 위해, 응용 프로그램을 식별. 이 문자열은 "companyName-applicationName-versionID"형식이어야합니다.

질문 2 :

귀하의 URL이이되어야한다, 잘못 :

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

은 "SQL은 ="part의 참조? 중요합니다. 예를 들어 here을보십시오.

기타 질문에 대해서는 조금 혼란 스럽습니다. TWebBrowser를 사용할 필요가 없으며 GET 및 POST 요청을 발행 할 수있는 모든 것을 사용할 수 있다고 생각합니다. 로그인 부분 : 사용자가 응용 프로그램에서 데이터로 작업 할 수 있도록 권한을 부여해야하므로 사용자가이 정보를 제공해야합니다.

+0

이 질문을 닫고 두 부분으로 나눕니다. 다른 사람들이 반응을 보이지 않기 때문에 (너무 많은) ... 나는 대답을 수락합니다. – durumdara