웹페이지 운영/워드프레스

워드프레스 API를 통한 자동 글쓰기 예제 (파이썬 버전)

공무원 봉급 2022. 5. 19. 12:50

 

블로그 자동화를 위해서는 네이버 블로그나 티스토리 블로그로는 한계가 있습니다. 하루에 발행할 수 있는 글의 개수에 제한이 있기 때문입니다. 그래서 GitHub Pages나 워드프레스로 블로그를 옮기는 경우가 많이 있습니다. GitHub Pages는 md 파일 또는 html 파일을 업로드만 하면 되기 때문에 아주 손쉽게 자동화를 이뤄낼 수 있습니다. 반면, 워드프레스의 경우 API를 통해서 글의 목록을 확인하거나 자동으로 글을 발행할 수 있는 기능을 제공합니다. 

필자의 경우 워드프레스의 XML PRC 기능을 이용해서 워드프레스 API를 호출하는 기능을 PHP 스크립트로 테스트해보았습니다만, 작업도 디버깅도 제법 힘이 들었습니다. 본 페이지에서는 파이썬 스크립트를 통해서 워드프레스에 자동으로 글을 쓰는 방법에 대해서 설명드리고자 합니다. 

 

워드프레스 API에 대해서

API는 "Application Programming Interface"의 약어로 컴퓨터 간의 정보를 교환하기 위해 만들어진 프로토콜이라고 할 수 있습니다. 사용자나 작업자의 개입 없이 자동으로 데이터를 교환하기 때문에 꼭 워드프레스가 아니더라도 자동화를 위해서 널리 사용되는 개념입니다. 

우선 워드프레스의 API에 대해서 잘 설명되어 있는 페이지를 먼저 살펴보는게 좋습니다. developer.wordpress.org에 접속하면 워드프레스 API에 대해서 아주 잘 설명되어 있을 뿐만 아니라, 샘플 코드들을 충분히 얻을 수 있습니다. 자료는 방대하지만 한 가지 단점이라면 영어로 되어 있어서 잘 읽히지 않는다는 단점이 있겠습니다.

API는 프로토콜이기 때문에 프로그래밍 언어의 제약이 없습니다. 쉘 스크립트, PHP, 파이썬 등 여러가지 언어로 호출이 가능합니다. 

 

시작에 앞서 읽어두면 좋은 글들

필자는 본 글을 작성하기에 앞서 PHP 스크립트를 이용해서 워드프레스의 API를 호출해보았습니다. 워드프레스의 API를 호출하면서 발생한 문제들을 어떻게 접근하고 해결했는가에 대한 내용입니다만, 워드프레스 API를 활용하기 위한 웹서버 설정 뿐만 아니라 디버깅 방법에 대해서도 포함되어 있으므로 아래 페이지들을 살펴보시는 것도 충분히 도움이 되실 것이라고 믿고 있습니다.

2022.05.18 - [워드프레스] - 워드프레스 API "PHP의 XML 확장이 가능하지 않습니다. 호스팅 회사에게 연락하여 PHP의 XML 확장을 활성화하세요."

 

워드프레스 API "PHP의 XML 확장이 가능하지 않습니다. 호스팅 회사에게 연락하여 PHP의 XML 확장을

본 페이지에서는 워드프레스의 API로 호출시에 "PHP의 XML 확장이 가능하지 않습니다. 호스팅 회사에게 연락하여 PHP의 XML 확장을 활성화하세요."라는 에러 메시지가 발생할 경우 조치하는 방법에

worldclassproduct.tistory.com

 

2022.05.18 - [워드프레스] - 워드프레스 Error ( -32300 ) : transport error - HTTP status code was not 200 해결 방법

 

워드프레스 Error ( -32300 ) : transport error - HTTP status code was not 200 해결 방법

새로운 분야에 도전을 한다는 것은 항상 가슴 뛰는 일이지만 괴로운 일이기도 합니다. 요즘 워드프레스 웹서버를 구성했고, API를 이용해서 블로그 자동화를 진행중에 있습니다. 이 과정에서 배

worldclassproduct.tistory.com

 

미리 설치가 필요한 패키지들

파이썬으로 워드프레스 글을 자동으로 발행하기 위해서는 몇가지 패키지가 설치되어 있어야 합니다. 

  • python-wordpress-xmlrpc 패키지 (워드프레스 클라이언트 쪽)
  • php-xml 패키지 (워드프레스 서버 쪽)

특히 워드프레스 웹서버에서는 php-xml 패키지가 반드시 설치되어 있어야 합니다. 그렇지 않으면 워드프레스에서 400 Bad Request 응답이 올 수 있기 때문입니다.

 

클라이언트 측에 python-wordpress-xmlrpc 패키지 설치

아래의 명령으로 python-wordpress-xmlrpc 패키지를 설치합니다.

$ sudo pip3 install python-wordpress-xmlrpc

 

만약 pip 패키지가 설치되어 있지 않다면 아래와 같은 에러가 뜹니다.

명령어 'pip' 을(를) 찾을 수 없습니다. 그러나 다음을 통해서 설치할 수 있습니다:

sudo apt install python3-pip


pip 패키지가 설치되어 있지 않다고 알려주면서, 친절하게도 어떤 패키지를 설치해야 되는지에 대해서도 알려줍니다. 메시지대로 python3-pip 패키지를 설치하시면 됩니다.

$ sudo apt-get install python3-pip

 

서버측에 php-xml 패키지 설치

서두에서 설명드렸지만 워드프레스 웹서버에 php-xml 패키지가 설치되어 있지 않으면 php-xml 패키지를 추가로 설치해줘야 합니다.

이미 설치되어 있는지 확인하려면 php -m 명령으로 확인해볼 수 있습니다.

$ php -m | grep xml

 

실행 결과 아래와 같은 php 모듈들이 확인되어야 합니다.

$ php -m | grep xml
libxml
xml
xmlreader
xmlwriter

 

만약 위와 같은 모듈중에 하나라도 확인되지 않으시면 아래의 명령으로  php-xml 패키지를 설치합니다.

$ sudo apt-get install php-xml

 

아래의 명령으로 아파치 웹서비스를 재시작해줍니다.

$ sudo service apache2 restart

 

자동 글쓰기 파이썬 예제

아래는 워드프레스에 자동으로 글을 작성하는 파이썬 예제입니다. 제목과 내용 등 필수적인 부분 정도만 포함되어 있기 때문에 카테고리 등 추가적인 정보까지 포함해서 발행하고자 하실 경우에는 좀 더 보완이 필요하겠습니다.

#!/usr/bin/python3

from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods import posts

def write_post(url, id, pw, title, slug, content):
  print("id :", id) 
  print("pw :", pw) 
  url = url + "/xmlrpc.php"
  print("url :", url)
  client = Client(url, id, pw) 
  post = WordPressPost()
  post.title = title
  post.slug = slug
  post.content = content
  post.terms_names = { 
                  'post_tag': 'wordpress',
                  'category' : ['']
  }

  post.post_status = 'publish'
  client.call(posts.NewPost(post))

if __name__ == '__main__':
  write_post( URL,
                  ID,
                  PW,
                  "자동 글쓰기 제목",
                  "자동 글쓰기 슬러그",
                  "자동 글쓰기 본문")

 

위와 같이 스크립트를 구성하고 python 스크립트를 수행하시면 워드프레스에 자동적으로 글이 올라가는 것을 확인하실 수 있습니다.

$ python3 send_article.py

만약 파이썬 실행 바이너리가 /bin/usr/python3에 위치해있다면 아래의 명령으로도 실행이 가능하겠습니다.

$ chmod +x send_article.py
$ ./send_article.py

 

워드프레스에 접속해보면 아래와 같이 자동으로 글이 올라간 것을 확인하실 수 있습니다.

 

이상으로 워드프레스 API와 파이썬을 이용해서 자동으로 글을 쓰는 방법에 대한 설명을 모두 마칩니다.