1. WebBrowser로 URL을 호출하고 인스타그램에 사용자 로그인 및 권한을 요청합니다.
var url: string; param: string;
begin
url := 'https://api.instagram.com'; param := '/oauth/authorize?client_id=xxx&redirect_uri=https://developist.tistory.com/&scope=user_profile&response_type=code';
//인스타그램 개발자 페이지에서 발급받은 앱 ID와 Code를 받을 Redirect 주소를 입력합니다. WebBrowser1.Navigate(url + param);
end;
2. 인스타그램에서 사용자 계정에 앱을 추가합니다.
승인을 누르게 되면 위에 설정한 주소로 Code와 함께 Redirect됩니다.
3. Redirect된 WebBrowser의 BeforeNavigate2 이벤트에서 Code를 파싱합니다. (파싱은 자유롭게 하시면 됩니다.)
procedure TForm1.WebBrowser1BeforeNavigate2(ASender: TObject; const pDisp: IDispatch; const URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool); begin if (Pos('https://developist.tistory.com/?code=', url) > 0) then begin //URL뒤에 발급된 Code가 붙어서 날아옵니다. FCode := Copy(url, Pos('code=', url) + Length('code='), Length(url));
if Pos('&', FCode) > 0 then FCode := Copy(FCode, 1, Pos('&', FCode) - 1); FCode := Copy(FCode, 0, Length(FCode) - 2); //Code 맨 뒤에 #_은 불필요하므로 제외시켜줍니다. Cancel := True; end; end;
4. 파싱한 Code로 Token을 발급받습니다.
//Indy 컴포넌트를 쓰셔도 무방합니다. RESTClient1.BaseURL := 'https://api.instagram.com/'; RESTRequest1.Resource := 'oauth/access_token/'; RESTRequest1.Method := rmPOST; RESTRequest1.Accept := '*/*'; RESTRequest1.Params.Clear; RESTRequest1.Params.AddItem('grant_type', 'authorization_code'); RESTRequest1.Params.AddItem('client_id', 'xxx'); //인스타그램에서 발급받은 앱 ID RESTRequest1.Params.AddItem('client_secret', 'xxx'); //인스타그램에서 발급받은 앱 시크릿 코드 RESTRequest1.Params.AddItem('redirect_uri', 'https://developist.tistory.com/'); RESTRequest1.Params.AddItem('code', FCode); RESTRequest1.Execute; if not RESTResponse1.JSONValue.TryGetValue<string>('access_token', FToken) then
ShowMessage('토큰이 존재하지 않습니다.'); if not RESTResponse1.JSONValue.TryGetValue<string>('user_id', FUserid) then
ShowMessage('유저ID가 존재하지 않습니다.');
5. 발급된 Token 정보
{
"access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"user_id": 1xxxxxxxxxxxx
}
참조1 : https://developers.facebook.com/apps
참조2 : https://developers.facebook.com/docs/instagram-basic-display-api/overview