목차
워드프레스는 전체 웹사이트의 약 41.3%를 운영하는 인기있는 플랫폼입니다. 그러나 적당한 규모의 블로그를 운영한 경험이 있다면, 모든 콘텐츠를 최신 상태로 유지하는 것이 어렵다는 것을 알고 계실 것입니다. 이미지가 깨지거나 링크가 작동하지 않거나 가격 및 제품 정보가 최신이 아닌 경우가 흔합니다. 수동으로 모든 콘텐츠를 일일이 확인하고 업데이트하는 것은 번거로운 일입니다.
하지만 파이썬과 워드프레스 API를 활용하는 방법을 알면 업데이트 작업을 자동화하여 작업 속도를 크게 향상시킬 수 있습니다. 워드프레스 API는 모든 워드프레스 사이트에서 사용할 수 있는 강력한 도구입니다. 이 글에서는 파이썬과 워드프레스 API를 활용하여 자동화된 블로그 업데이트를 수행하는 기본 사항과 예제 코드를 제공합니다.
본 글을 통해 여러분은 워드프레스 API의 기본 개념을 이해하고, 파이썬을 사용하여 API 요청을 보내고 응답을 처리하는 방법을 배울 수 있습니다. 예를 들어, 파이썬을 활용하여 이미지를 업로드하고 링크를 갱신하거나, 가격 및 제품 정보를 자동으로 업데이트하는 방법을 익힐 수 있습니다.
파이썬의 기본적인 문법은 기타 여러 사이트를 통하여 익히거나, 유튜브 통하여 기본 적인 방법만 숙지 하고 작업 하는것이 도움이 될 수 있습니다.
워드프레스에서 비밀번호 얻기
사용자 > 프로필에서 중간쯤에 보면 “새 응용 프로그램 이름” input창이 있다. 여기서 본인이 원하는 문구를 아무꺼나 넣고, “새 응용 프로그램 비밀번호 추가”를 누르게 되면 24자리 비밀번호를 생성해준다.
생성 이후 한번만 노출 되기 때문에 어딘가 잘 저장을 해놓아야한다. 만약에 저장 해 놓지 못 했지만.. “폐기” 후 재 발급 받아서 사용을 해야 한다.
API Token 셋팅 하기
import requests
import base64
wordpress_user = "위에서 생성한 이름 그대로"
wordpress_password = "7wJc xxxx lA9g Wkmt xxxx Zcps" #발급받은 비밀번호
wordpress_credentials = wordpress_user + ":" + wordpress_password
wordpress_token = base64.b64encode(wordpress_credentials.encode())
wordpress_header = {'Authorization': 'Basic ' + wordpress_token.decode('utf-8')}
비밀번호를 알았으므로, 이제 스크립트 작업을 시작할 수 있습니다. 우선 필요한 패키지를 가져와서 토큰을 생성해야 합니다. 토큰이 설정되면 워드프레스 사이트와 상호작용을 시작할 수 있습니다.
API를 이용해서 워드프레스 글 가져오기
def read_wordpress_posts():
api_url = 'https://makeupmagicskin.com/wp-json/wp/v2/posts'
response = requests.get(api_url)
response_json = response.json()
print(response_json)
가장 간단한 작업으로 시작해 보겠습니다: 콘텐츠를 읽는 작업입니다. 브라우저에서 진행할 수도 있습니다. API URL(예: https://makeupmagicskin.com/wp-json/wp/v2/posts)로 이동하면 됩니다. 그러나 파이썬을 사용하여 이 작업을 수행하려면 다음과 같은 코드를 사용해야 합니다:
다음과 같은 작업을 수행하고 있습니다:
api_url = 포스트를 가져올 API URL입니다.
response = 이전에 정의한 api_url에 대해 GET 요청을 수행합니다.
response_json = 응답을 읽을 수 있는 형태로 변환합니다.
이렇게 하면 작업할 JSON 데이터가 제공됩니다. 다음과 같은 형식일 것입니다:
{‘id’: 347, ‘date’: ‘2021-05-09T02:42:48’, ‘date_gmt’: ‘2021-05-09T00:42:48’, ‘guid’: {‘rendered’: ‘https://makeupmagicskin.com/?p=347’}, ‘modified’: ‘2021-05-09T02:42:50’, ‘modified_gmt’: ‘2021-05-09T00:42:50’, ‘slug’: ‘think-outside-the-box’, ‘status’: ‘publish’, ‘type’: ‘post’, ‘link’: ‘https://makeupmagicskin.com/blog/think-outside-the-box’, ‘title’: {‘rendered’: ‘Why Trying to Think Outside The Box is a Waste of….
하지만 한 가지 문제가 있습니다. 큰 사이트의 경우 API는 한 번에 최대 100개의 게시물을 반환합니다. 이는 서버가 큰 요청을 처리하는 데 시간 초과되지 않도록 하는 데 사용됩니다.
사이트의 모든 게시물을 가져오려면 API URL에 매개변수를 추가하여 다음 페이지로 이동해야 합니다. 예를 들어, 페이지당 100개의 게시물을 가져오고 두 번째 페이지를 가져오려면 API URL은 다음과 같이 보일 것입니다: https://makeupmagicskin.com/wp-json/wp/v2/posts?page=2&per_page=100
이제 페이지네이션 수를 수동으로 증가시키는 것은 비실용적이므로 자동화해야 합니다. 이를 위해 먼저 사용 가능한 페이지 수를 확인해야 합니다. 이는 WordPress가 요청 헤더로 이 정보를 보내주기 때문에 매우 간단합니다.
간단한 GET 요청을 수행하고 헤더를 확인함으로써 사용 가능한 전체 페이지 수를 얻을 수 있습니다. 그런 다음 모든 페이지를 하나씩 반복하여 내용을 가져와 리스트에 추가하는 루프를 만들 수 있습니다. 예를 들면 다음과 같습니다
def get_total_pagecount():
api_url = 'https://makeupmagicskin.com/wp-json/wp/v2/posts?page=1&per_page=100'
response = requests.get(api_url)
pages_count = response.headers['X-WP-TotalPages']
return int(pages_count)
def read_wordpress_post_with_pagination(): total_pages = get_total_pagecount() current_page = 1 all_page_items_json = [] while current_page <= total_pages: api_url = f"https://makeupmagicskin.com/wp-json/wp/v2/posts?page={current_page}&per_page=100" page_items = requests.get(api_url) page_items_json = page_items.json() all_page_items_json.extend(page_items_json) current_page = current_page + 1 return all_page_items_json
콘텐츠를 가져왔다면, 해당 콘텐츠를 조작하고 재미있는 작업을 수행할 수 있습니다.
API를 이용해서 워드프레스 글 쓰기
def create_wordpress_post():
api_url = 'https://makeupmagicskin.com/wp-json/wp/v2/posts'
data = {
'title' : 'Example wordpress post',
'status': 'publish',
'slug' : 'example-post',
'content': 'This is the content of the post'
}
response = requests.post(api_url,headers=wordpress_header, json=data)
print(response)
일련의 콘텐츠를 가져오는 것은 상당히 지루할 수 있으므로, 대신 게시물을 만들어 보겠습니다. 이를 위해 몇 가지 데이터를 전송해야 합니다.
api_url = 이것은 데이터를 전송해야 하는 URL입니다.
data = WordPress에 전송할 인수들이 포함됩니다. 전송할 수 있는 항목들은 매우 많으므로, API 참조를 읽는 것을 추천합니다. 이 예제에서는 간단한 게시물을 만들기만 합니다.
response = POST 요청을 수행하고, 어떤 URL로 이동해야 하는지, WordPress 자격증명, 게시물 데이터를 함께 전송합니다.
작업이 완료되면 사이트를 확인해보면 게시물이 실시간으로 생성되어 있을 것입니다 (상태를 ‘publish’로 설정한 경우).
물론 이는 매우 기본적인 예시입니다. 실제로는 WordPress 콘텐츠를 다양한 방법으로 생성하고 실험할 수 있습니다. 예를 들어, 콘텐츠의 템플릿을 만들고 CSV를 사용하여 다른 변수를 자동으로 채울 수도 있습니다.
API를 이용해서 워드프레스 글 업데이트 하기
def update_wordpress_post():
api_url = 'https://makeupmagicskin.com/wp-json/wp/v2/posts/'
post_id = '440'
data = {
'title' : 'Updated example wordpress post',
'status': 'publish',
'slug' : 'example-post-update',
'content': 'This is the updated content of the post'
}
response = requests.post(api_url + post_id,headers=wordpress_header, json=data)
print(response)
블로그 게시물을 업데이트하는 것은 새로운 게시물을 만드는 것과 매우 유사합니다. 유일한 차이점은 API URL에 게시물 ID를 추가해야 한다는 것입니다.
게시물 ID를 찾는 방법을 모르는 경우, API에 다시 요청하거나 편집하려는 게시물을 WP 대시보드에서 열어보면 게시물 ID를 URL에서 확인할 수 있습니다. 예를 들어: https://makeupmagicskin.com/wp-admin/post.php?post=380&action=edit
그런 다음 게시물을 생성하는 데 사용한 코드와 동일한 코드를 사용하여 내용을 업데이트할 수 있습니다.
하지만 콘텐츠를 업데이트하는 데는 한 가지 주요 문제가 있습니다. Gutenberg 에디터를 사용하고 API를 사용하여 콘텐츠를 가져오는 경우, 에디터에서 사용하는 블록에 관련된 데이터를 전송하지 않습니다.
콘텐츠를 가져오고 변경한 후 다시 전송하면, WordPress는 게시물 전체에서 사용한 블록을 추적할 수 없게 됩니다. 이는 고전 에디터로 되돌아가고, 자동으로 블록으로 변환하려고 시도하면 모든 것이 사용자 정의 HTML 블록으로 변환될 수 있는 위험성을 가지게 됩니다.
일반 텍스트만 있는 경우에는 이것이 괜찮을 수도 있지만, Piktochart에서처럼 사용자 정의 블록을 사용하는 경우에는 이 방법이 쓸모없어집니다. 이것이 내가 말하려는 바입니다.
WordPress는 블록 데이터를 사용하여 에디터에 어떤 종류의 블록을 사용하는지 알려줍니다. 이는 리비전을 확인할 때 확인할 수 있습니다.
또는 모든 게시물의 XML을 내보낼 수도 있습니다. XML 파일에는 모든 블록 데이터도 포함되어 있습니다. 예를 들어:
이러한 데이터 없이는 WordPress가 어떤 블록을 사용해야 하는지 알 수 없으며, 문단과 같은 표준 블록으로 되돌아갈 것입니다.
따라서 사이트의 모든 게시물 또는 페이지의 XML을 내보내고 해당 XML을 사용하는 것을 권장합니다. 블록 데이터에 액세스할 수 있으며, API를 사용하여 업데이트를 보내면 WordPress가 해당 블록 데이터를 사용하여 블록의 유형을 결정할 수 있습니다.
이렇게 하면 API를 사용할 수 있고, 필요한 경우에는 여전히 에디터에서 적절하게 편집할 수 있습니다.
API를 이용해서 워드프레스 글 삭제 하기
def delete_wordpress_post():
api_url = 'https://makeupmagicskin.com/wp-json/wp/v2/posts/'
post_id = '440'
response = requests.delete(api_url + post_id, headers=wordpress_header)
print(response)
종합해보기
이 게시물에서는 API와 상호작용하는 기본적인 방법을 알아보았습니다. 그러나 이것은 단지 시작에 불과합니다. 이제 여러분은 이들을 결합하거나 중간 단계를 추가하거나 다른 API를 사용하여 프로세스를 향상시킬 수 있습니다.
다음은 API를 사용하여 수행할 수 있는 몇 가지 작업입니다:
- 콘텐츠의 템플릿을 만들고 CSV를 사용하여 변수를 채웁니다.
- 모든 블로그 URL을 가져와 Google Analytics 데이터를 추가하여 보고서를 생성합니다.
- 모든 콘텐츠를 가져와 오래된 링크를 찾고, CSV를 사용하여 다른 링크로 변경합니다.
- 모든 콘텐츠를 가져와 Google Search Console 및 Google Analytics와 확인하여 매일 1명 이상의 방문자가 없는 게시물을 삭제합니다.
- 콘텐츠를 가져와 내부 링크가 깨진 경우를 검사하고, 기계 학습 알고리즘을 사용하여 다른 URL을 제안합니다. 그런 다음 업데이트 함수를 사용하여 모든 깨진 내부 링크를 업데이트합니다.
- 콘텐츠를 가져와 자동으로 제목과 URL을 소셜 미디어에 게시합니다.
- 콘텐츠를 가져와 헤딩을 스캔하고, 각각에 점프 링크를 자동으로 추가합니다. 그런 다음 첫 번째 H2 위에 목차를 추가합니다.
스스로 시도해보면 API가 얼마나 강력한지 이해하게 될 것입니다. 또한 단순 작업을 자동화함으로써 많은 시간을 절약하게 될 것입니다.