인스타는 api는 주기적으로 업데이트되니 참고할것
해당 포스팅에선 개인 유저의 이미지만 가져오는 방법에 대해 설명합니다.
2023-08-24 기준입니다.
초기세팅하기
1. 우측 상단의 앱 만들기 클릭
2.하단의 없음 클릭
3. 앱이름 추가 -> 1번 사진에 보여질 이름을 기입합니다
4.방금 만들어진 앱을 클릭
5. 좌측 메뉴의 제품 - 제품추가 클릭 (제 사진속 basic display는 이미 추가되었던 상황이라 원래는 제품추가만 있는 상태가 맞습니다)
6. 인스타 baisc display클릭 (그래프 API는 좀더 전문적이며 하단의 링크 참조)
인스타 공식 doc : https://developers.facebook.com/docs/instagram-api
7. 좌측에 생성된 메뉴바를 클릭하여 기본표시 클릭
8. 해당 화면에서 새 앱 만들기 클릭
9. 하단의 "유효한 OAuth 리디렉션 URI"에 자신이 사용할 URL 입력한뒤 콜백 URL 승인 취소,데이터 삭제 요청 URL도 동일하게 작성하기
(https로 사용하여야 하지만 SSL이 없는 http라도 그냥 https로 적으신뒤 진행해주시면 됩니다)
또한 상단의 id, 코드는 나중에 겹치는 부분이 있기에
인스타그램 앱 ID - (A)
인스타그램 앱 시크릿코드 - (B) 라고 명명하곘습니다.
10. 화면을 내려서 add or remove instargram testers 클릭
11. 클릭시 해당 화면으로 이동되며 인스타 테스터추가 클릭하여 자신이 가져올 인스타 계정 ID 입력 (대기중으로 뜨면 끝)
12. 가져올 인스타 계정에 로그인한뒤 프로필 -> 우측 상단 톱니모양 클릭 -> 앱 및 웹사이트 -> 테스터 초대 -> 수락클릭
13. 11번째 사진으로 돌아가서 (대기중) 표시가 없어지면 개발자 세팅 완료
단기 토큰 가져오기
인스타 API 링크: https://developers.facebook.com/docs/instagram-basic-display-api
해당 게시글에서 4단계부터 진행한다.
상단의 9번째 사진을 참고할것
1시간 유효합니다
1. 기본폼 작성해서 URL에 입력하기 (단기 실행 코드)
코드 수정이 많으니 메모장 또는 여러 사이트를 활용해 바꿀것 (저는 해당 사이트를 활용해서 수정했습니다.)
https://www.mycompiler.io/ko/new/php
단기 실행 코드 발급용 기본 form
https://api.instagram.com/oauth/authorize
?client_id={app-id} //(A)
&redirect_uri={redirect-uri} // 동일하게 입력한 URL
&scope=user_profile,user_media //그대로
&response_type=code //그대로
수정한 form
https://api.instagram.com/oauth/authorize
?client_id=29..37
&redirect_uri=https://localhost:8989/
&scope=user_profile,user_media
&response_type=code
만일 문제가 없다면 해당 사진처럼 허용 여부를 물어볼것이다 (띄어쓰기 주의!, 이미 승인한 상황이라 계속 공유할지 물어보는것이다.)
2. 허용을 눌러 상단 URL을 복사
설정에 따라 다르겠지만 현재 https에서만 접근을 허용하나 http인 서버를 강제로 https로 입력하여 코드를 얻어낸 모습이다.
이것은 현재 1시간 짜리 단기 코드이며 이를 활용해 장기 사용 토큰으로 변경해야한다.
하단의 코드는 전체 URL이며 여기서 code뒤에 있는 부분만 활용한다
code 뒤쪽에 보면 #_가 붙는 경우도 있는데 #_는 날리고 사용한다
https://localhost:8989/?code=AQBWc7-au_Y1nh.....BrFQ#_ -> 여기 전체에서
AQBWc7-au_Y1qf1..BrFQ -> 요거만 사용할 예정
3. 해당 코드를 활용해 post요청을 전송
리눅스의 경우 cmd에 crul 코드 전송이 가능하지만.. 윈도우는.. 행운을빕니다..
장기 토근 발급 교환코드 기본 form
curl -X POST \
https://api.instagram.com/oauth/access_token \
-F client_id={app-id} \ 9번째 사진 (A)
-F client_secret={app-secret} \ 9번째 사진 (B)
-F grant_type=authorization_code \ 그대로
-F redirect_uri={redirect-uri} \ 9번째 사진 URL
-F code={code} 방금 발급받은 코드 (#_ 지운 코드)
수정한 form
curl -X POST \
https://api.instagram.com/oauth/access_token \
-F client_id=29..37 \
-F client_secret=98..6b9 \
-F grant_type=authorization_code \
-F redirect_uri=https://localhost:8989/ \
-F code=AQBWc7-au_Y1nh..JgBrFQ
정상적으로 돌아갔을경우 상단의 사진과 같은 결과가 출력된다 (해당 코드 장기토큰에서 사용할 예정이니 저장해두기)
IGQWRO....3VE9ndwZDZD", "user_id": 650...15
4. 정상적으로 받아왔는지 테스트하기
curl -X GET \
'https://graph.instagram.com/{user-id}?fields=id,username&access_token={access-token}'
여기에서 방금 받아온 id, 토큰값을 변경하기
curl -X GET \
'https://graph.instagram.com/650...15?fields=id,username&access_token=IGQWRO....3VE9ndwZDZD
자신이 가져오기로한 계정 이름이 username과 동일한지 확인해보자
여기까지 진행한걸 축하한다 드디어 인스타 1시간짜리 연결이 완성되었다.
현재까지 진행한건 단기 토큰으로 이를 장시간 사용하기 위해선 장기토큰으로 바꿔줘야한다.
장기 토큰 가져오기
만일 토큰 기간이 다되었단 에러가 나타날경우 바로 위의 단기 토큰 가져오기를 다시 진행해주시면 됩니다
(1시간 이내로 작업하기)
장기 토큰 가져오기 기본 form
curl -i -X GET "https://graph.instagram.com/access_token
?grant_type=ig_exchange_token //그대로
&client_secret={instagram-app-secret} // (B)
&access_token={short-lived-access-token}" //방금 발급받은 1시간짜리 토큰값
작성 예시 (해당 코드는 가독성을 위해 이렇게 작성되었지만 crul에서 가끔 못읽는 경우도 있으니 1줄로 보내주자!..)
curl -i -X GET "https://graph.instagram.com/access_token
?grant_type=ig_exchange_token
&client_secret=98..b9
&access_token=IGQW...ZDZD"
즉, 이렇게 입력해줘라
curl -i -X GET "https://graph.instagram.com/access_token?grant_type=ig_exchange_token&client_secret=98..b9&access_token=IGQW...ZDZD"
완료시 cmd에선 다음과 같이 출력되며 expires_in은 sec로 약 60일간 유효한 토큰을 얻은것이다.
만일 해당 토큰이 만료될경우 다음과 같은 방법을 사용한다.
장기토큰 재발급 받기
고맙게도 이건 쉽다.
장기 실행토큰 새로 고침 기본 form
curl -i -X GET "https://graph.instagram.com/refresh_access_token
?grant_type=ig_refresh_token //그대로
&access_token={long-lived-access-token}" //60일짜리 토큰
적용한 form(이거도 1줄로 써주자)
curl -i -X GET "https://graph.instagram.com/refresh_access_token
?grant_type=ig_refresh_token
&access_token=IGQWROUFAwcT...BQQZDZD"
여기까지 문제없이 따라왔다면 마지막으로 검색해보며 포스팅을 끝내겠다
URL 기본 form
https://graph.instagram.com/{app-id}/media?fields=id,media_type,media_url,permalink,thumbnail_url,username,caption&access_token={access_token}
{app-id}는 (A)를, access_token은 아까 발급받은 1시간, 60일 짜리 토큰 아무거나 사용하면 된다.
적용 form
https://graph.instagram.com/65..15/media?fields=id,media_type,media_url,permalink,thumbnail_url,username,caption&access_token=IGQWRQV...QZDZD
해당 url을 입력할경우 json 형태로 자신이 원하는 인스타 데이터를 가져올수 있게된다!
참고사이트 (php코드 변경) : https://www.mycompiler.io/ko/new/php
참고 블로그 : https://tonhnegod.tistory.com/245
'Spring' 카테고리의 다른 글
putty를 활용해 EC2에 접근하기 (0) | 2024.02.01 |
---|---|
Spring MVC의 핵심 애노테이션 (1) | 2024.01.26 |
SSR, CSR, SSG (0) | 2024.01.23 |
개인 프로젝트 회고 (0) | 2024.01.21 |
SMTP를 활용하여 이메일 보내기 (0) | 2024.01.04 |