본문 바로가기
개발/개발 일기

인스타그램 게시물 데이터 가져오기 대작전

by 째스터 2022. 4. 3.
728x90

개발팀에서 거의 매일 가는 성수동 최고 맛집 그린한식뷔페.
https://www.instagram.com/green_food_buffet/

매일 사장님께서 메뉴를 인스타에 올려주는 것을 보고
오늘의 메뉴 알림 앱을 만들 수 있을 것 같다는 생각을 했다.

Plan A, 인스타그램 API를 사용해보자.
인스타그램 API를 이용하려 했더니 사장님 인스타 계정에서 연동을 부탁드려야 한다.
=> 나는 샤이 개발자이므로 실패.

리서치를 해보니 아래 url을 들어가 보면 복잡하지만 json으로 데이터를 리턴할 수 있다.
이 json을 파싱 해서 사진 이미지 url과 포스트 내용을 가져올 수 있다.

https://www.instagram.com/green_food_buffet?__a=1

찾았다! 이미지 링크

Plan B, 위 URL에서 인스타그램 json을 parsing 하자.
저 url에서 가져온 json을 C# 객체로 deserialize 해야 한다.
물론 내가 일일이 class를 만들 필요는 없다.
github에 검색해보면 누군가가 C#으로 class를 생성해두었다.👍
하지만 두 가지 문제가 있었다.

1. 위 url에 여러 번 request를 날리면 내 IP가 밴이 되어 어느 순간 json 대신 login 페이지로 redirect 된다.
2. 일단 중간 페이지로 이동하고, 그다음에 두 번째 페이지로 이동해서 json을 가져온다. 따라서 HttpClient.GetAsync()로 첫 번째 페이지만 가져올 수 있다.

1번 문제는 받아온 데이터를 하루 날짜 정보와 함께 저장해서 해결했다.
오늘 날짜로 이미 받아온 데이터가 있다면 request를 하지 않고 그 데이터를 parsing 해서 보여준다.
이러면 하루에 1번의 request여서 IP 밴이 되지 않는다.

2번 문제는 해결할 방법이 없었다.

Plan C, 하지만 크롤링을 이용하면 어떨까?
Selenium이라는 라이브러리의 ChromeDriver를 활용해서 크롤링을 시도했다.
드디어 성공!

테스트 페이지

다만, 이미지 CDN 링크는 CORS 설정이 되어있어서 미리보기를 제공해줄 수 없다.😥
아무튼 이대로 마저 개발하면 되겠다 싶었는데 느낌이 싸했다.
'과연 azure에서 크롤링을 허용할까??'

git action을 이용한 CI/CD를 만들고 azure app service로 배포를 해봤다.

azure 실서버에서 에러가 발생한다.

Anglesharp은 된다는 사람이 있어서 실험해봤는데 여전히 불가능하다.

아래 방법을 시도해도 자꾸 login page로 redirect된다...

https://www.instagram.com/graphql/query/?query_hash=8c2a529969ee035a5063f2fc8602a0fd&variables=%7b%22id%22%3a%2224269503564%22%2c%22first%22%3a12%2c%22after%22%3a%22%22%7d
// https://www.instagram.com/graphql/query/?query_hash=8c2a529969ee035a5063f2fc8602a0fd&variables={"id":"24269503564","first":12,"after":""}

용기를 내어 사장님께 말씀드려봐야 하나...🤔

728x90

'개발 > 개발 일기' 카테고리의 다른 글

.NET 소스코드 찾아보다 느낀점  (0) 2022.06.18
Kaikas API 연동 찍먹해보기  (0) 2022.06.08
Azure Storage 도입과 MVC 전환  (0) 2022.03.26
오픈소스식 문제해결  (0) 2022.01.18
SMS를 읽고싶다.  (2) 2021.12.30

댓글