티스토리 뷰
만드는 중인 웹에 내가 티스토리에 쓴 글들을 그대로 가져와 보여주고 싶었다.
그 과정과 문제들, 해결한 방법에 대해 기록한다.
- 티스토리에 쓴 글들 (html) 을 내 웹의 디자인을 적용하고 싶다
- 내가 쓴 글들은 천개가 넘는다. 천개의 html 파일들을 모두 수정 불가능
- html 내부에 코드를 보여주기 위한 github gist <script> 이 존재
- 내가 쓴글 html 을 동적으로 가져오면 <script> 실행이 동적으로 안되는 문제 발생
- SOP 에 의해 github 에 대한 요청 거부됨
- 반드시 gist 들을 모두 가져온 이후에 실행되어야 할 로직들이 존재
- 내가 쓴글 html 에 이미지가 포함된다
- html 에 포함된 <img> 의 경로와 내가 fetch 해서 가져온 후 경로가 다르다
우선 티스토리 관리 페이지에서 내가 쓴 글들을 백업할수 있도록 백업파일들을 받을수있다.
백업하기를 누르면 내가 쓴 글들을 html, css, img 파일로 제공한다.
이렇게 제공되기 때문에 그냥 static 폴더에 다 넣으면 된다. (spring)
1. 티스토리에 쓴 글들 (html) 을 내 웹의 디자인을 적용하고 싶다
그런데 나는 이 글들에 모두 내 웹의 헤더 디자인 등을 적용하고 싶었다.
따라서 javascript 로 해당 html 파일을 읽어서 header 디자인 등이 모두 적용된 html 파일의 중간에 삽입하도록 했다.
- tistoryPage.html 이라는 html 을 따로 만들고
- 티스토리 글(html) 의 경로를 javascript 로 가져와서 해당 경로에 있는 html 파일 fetch
- fetch 결과를 tistoryPage.html 에 삽입
2. html 내부에 코드를 보여주기 위한 github gist <script> 이 존재
1. 내가 쓴글 html 을 동적으로 가져오면 <script> 실행이 동적으로 안되는 문제 발생
(1)번에서 티스토리 글 html 을 fetch 해서 tistoryPage.html 에 삽입한건 좋은데,
티스토리 글 html 에 존재하는 <script> 가 실행되지 않는 문제가 발생했다.
- 원인
- github embedded gist 는 document.write 를 사용해 gist element 를 생성하는데, document.write 는 페이지 로드 이후 실행되지 않는다.
따라서 존재하는 <script> 를 모두 읽어서 동적으로 실행해줘야 했다.
2. SOP 에 의해 github 에 대한 요청 거부됨
여기서 또 문제는 자바스크립트는 동일근원정책 (SOP, Same Origin Policy) 에 의해 서로 다른 도메인에 의한 요청을 거부한다.
이를 회피하기 위한 방법으로 JSONP 를 사용했다.
JSONP 는 <script> 으로 다른 도메인으로 요청시 SOP 가 적용되지 않는다는 사실을 이용해 SOP를 회피하는 방법이다.
3. 반드시 gist 들을 모두 가져온 이후에 실행되어야 할 로직들이 존재
JSONP 에 의한 gist 요청은 비동기적으로 처리된다.
따라서 promise,async,awiat 을 통해 적절히 처리해줘야 했다.
3. 내가 쓴글 html 에 이미지가 포함된다
티스토리에서 백업 받은 파일들의 구조는
tistory 폴더 내부에 글 번호의 폴더들이 존재하고, 해당 폴더 내부에 html 파일, 그리고 img 폴더가 있다.
따라서 이미지의 경로는 아래와 같게 된다
문제는 티스토리 글 html 을 fetch 해서 가져오면 저 이미지 경로는 다른곳을 가르킨다.
<img> 의 경로를 바꿔주면 되지만 티스토리 글은 천개가 넘는다.. 일일히 바꿔주는것은 불가능.
따라서 티스토리 글 html 을 fetch 한후 모든 <img> 엘러먼트를 스캔해서 src를 바꿔줬다.
예를들어 좌측과 같은 경로를 우측처럼 변경.
"http://localhost:8080/blog/img/img_5.png" -> "/tistory/1070/img/img.png"
결과
tistory 글
https://tose33.tistory.com/536
백준 1011. Fly me to the Alpha Centauri
https://www.acmicpc.net/problem/1011 1011번: Fly me to the Alpha Centauri 우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내
tose33.tistory.com
내 웹
페이지
lsh-portal-f9ba5ffd8137.herokuapp.com
fetchTistory.js
'Web' 카테고리의 다른 글
Google OAuth2 (0) | 2023.11.12 |
---|---|
Thymeleaf 와 URL 인코딩 (0) | 2023.11.06 |
Service 계층과 Repository 계층 나누는 이유 (0) | 2023.07.07 |
web project address (0) | 2023.06.09 |
spring project heroku에 배포시 경로 문제 (template might not exist or might not be accessible by any of the configured Template Resolvers) (0) | 2023.06.03 |
- Total
- Today
- Yesterday
- priority queue
- binary search
- 조합
- C++
- CSS
- 자료구조
- graph
- two pointer
- db
- Kruskal
- DP
- floyd warshall
- Stack
- Python
- Dijkstra
- Tree
- back tracking
- 이분탐색
- greedy
- permutation
- dfs
- BFS
- 재귀
- recursion
- Unity
- Spring
- Implementation
- C
- MVC
- Brute Force
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |