네이버 블로그를 백업해보자 - 3편

  • 오늘은 이번 네이버 블로그 백업 연재의 마지막편입니다.
  • 블로그 포스팅의 내용이 바뀌었다면 깃헙 레포지토리에도 바뀐 내용을 업데이트 해야겠죠?
    • 2편에서는 커밋을 통해 새로운 파일을 만들었다면, 이번에는 이미 파일이 있는 경우 수정하도록 해보겠습니다.
    • 방법을 간략하게 정리해 보면
      • 먼저 해당 파일이 존재하는지 확인하기 위해서 아래 페이지의 내용을 살펴봅시다.
        • 깃헙파일 정보얻기
        • 위 링크의 호출에서 파일이 존재하면 200 상태로 반응하고 Body에 sha 프로퍼티가 존재합니다.
            def get_github_sha(url, token):
                headers = {
                    "Accept": "application/vnd.github+json",
                    "Authorization": "Bearer %s" % token,
                    "X-GitHub-Api-Version": "2022-11-28"
                }
                r = requests.get(url, headers=headers)
                if r.status_code == 200:
                    return r.json().get("sha")
                return False
          
      • 위에서 얻게된 sha를 지난번까지 사용했던 PUT 호출에 함께 넣어 보내면 Create가 아니라 Update가 되는 것 입니다.
        • 깃헙파일 생성 혹은 수정하기
        • 파일이 수정되면 자동으로 푸시되게 하기 위해서 branch 프로퍼티를 추가했습니다.
            def put_github_file(url, github_owner, email, content, token):
                headers = {
                    "Accept": "application/vnd.github+json",
                    "Authorization": "Bearer %s" % token,
                    "X-GitHub-Api-Version": "2022-11-28"
                }
                sha = get_github_sha(url, token)
                if sha == False:
                    ## No sha means No File
                    data = {
                        "message": "commit",
                        "branch": "master",
                        "committer": {
                            "name": github_owner,
                            "email": email
                        },
                        "content": content
                    }
                    requests.put(url, data=json.dumps(data), headers=headers)
                else:
                    ## Update File
                    data = {
                        "message": "commit",
                        "branch": "master",
                        "sha": sha,
                        "committer": {
                            "name": github_owner,
                            "email": email
                        },
                        "content": content
                    }
                    requests.put(url, data=json.dumps(data), headers=headers)
          
      • 그렇게 되면 깃헙페이지 특성상 자동으로 깃헙액션을 수행하고, 빌드 및 배포가 진행됩니다.
  • 한편 배포된 깃헙 페이지의 URL이 구글검색에 표시될 수 있도록, 서치콘솔에 URL을 등록하는 호출도 해보겠습니다.
    • 그러기 위해서는 구글 개발자 서비스계정을 등록해야합니다.
    • 그리고 나서 인증에 사용되는 사용자를 등록한 후 JSON 파일을 받아야 합니다.
    • 마지막으로 서치콘솔 URL Indexing을 사용하겠다고 지정해야 아래의 호출을 정상적으로 수행 할 수 있습니다.
      • URL Indexing Creation API
          def update_google_search_console_url_index(url):
              SCOPES = [ "https://www.googleapis.com/auth/indexing" ]
              ENDPOINT = "https://indexing.googleapis.com/v3/urlNotifications:publish"
        
              # service_account_file.json is the private key that you created for your service account.
              JSON_KEY_FILE = "file_name.json"
        
              credentials = ServiceAccountCredentials.from_json_keyfile_name(JSON_KEY_FILE, scopes=SCOPES)
              headers = {'Content-Type': 'application/json'}
              http = credentials.authorize(httplib2.Http())
        
              content = """{
              \"url\": \"%s\",
              \"type\": \"URL_UPDATED\"
              }""" % url
        
              response, content = http.request(ENDPOINT, method="POST", body=content, headers=headers)
        
  • 전체 코드는 아래 링크에 올려두었습니다. 지난번과 비교했을 때 달라진 내용은 아래와 같습니다.
    • 블로그 내용을 가져올 때, 링크 형태이면 MarkDown에서도 링크 형태로 보여지도록 했습니다.
    • 파일명에 표시되는 날짜도 직접 지정할 수 있게 코드를 수정했습니다.
    • 전체코드
Share: Twitter Facebook
김민석's Picture

About 김민석

항상 공부가 부족한 개발자, 항상 시간이 부족한 딸바보, 항상 체력이 부족한 부족한남편, 그리고 고양이 집사

JungNangGu, Seoul, Korea Rep https://reddol18.pe.kr

Comments