スポンサーリンク

Qiitaに投稿した記事をWordPressにも自動投稿してみた

出典 :Qiita

本記事は実際に自動投稿されたものです。

はじめに

普段はpythonを使ってエンジニアしたり、PHPでWeb系のお仕事したりと広く浅くプログラミングやってます。

pythonでこんなことできるよみたいな紹介ができればと思います。

スクレイピングとかも面白いかなと思ったのですが、そのあたりの記事はたくさんあるしなぁとか悩んだ結果、せっかくだしQiitaAPIを触って何かしてみようと思いました。

なので今回は、QiitaAPIを使ってQiitaに自分が投稿した記事を自分のサイト(WordPress)にも投稿できるよというのを紹介したいと思います。

python始めた方向けにpythonこんなことできるよという雰囲気を味わってもらえたらいいなと思っているので、細かい部分は省きながら説明していきます。

準備が必要なもの

今回の自動化で事前に準備が必要なのは、

1、QiitaAPIのアクセストークン
2、自分のWordPressのAPI用アカウント情報

それぞれの準備については今回の目的と外れますので参考になるサイトをそれぞれ張っておきます。

1、こちら
2、こちら

サンプルコード

今回は解説ではなくてこんなことできるよの紹介記事になるのでサンプルコードと実際にこの記事を自分のサイトに自動投稿してみた結果をご紹介します。

import requests
import json


def main():
    qiita_token = "QiitaAPIのアクセストークン"
    headers = {
            'Content-Type': 'application/json',
            'Charset': 'utf-8',
            'Authorization': 'Bearer {}'.format(qiita_token)
        }
    pf = PostFunctions()
    r_get = requests.get("https://qiita.com/api/v2/users/QiitaのユーザーID/items/", headers=headers)
    results = r_get.json()
    for result in results:
        article_id = result["id"]
        if pf.postcheck(article_id):
            pass
        else:
            title = result["title"]
            content = result["rendered_body"]
            pf.postadd(article_id)
            Article2WP(title, content)


class PostFunctions():
    # 既にWPに投稿されているか確認
    def postcheck(self, article_id):
        with open("article_id.txt", "r", encoding="utf8") as f:
            id_list = [s.strip() for s in f.readlines()]
            if article_id in id_list:
                return True
            else:
                return False
    # WPに投稿した記事IDを追加
    def postadd(self, article_id):
        with open("article_id.txt", "a", encoding="utf8") as f:
            print(article_id, file=f)


def Article2WP(title, content):
    user_id = "WP投稿用アカウントID"
    password = "WP投稿用アカウントパスワード"
    end_point_url ="https://自分のサイトドメイン/wp-json/wp/v2/posts/"
    payload = {
        'title': title,
        'content': content,
        'status': "draft",
        'comment_status': 'closed',
        'featured_media': アイキャッチ画像ID,
        'categories': カテゴリーID,
    }
    headers = {'content-type': "Application/json"}
    r = requests.post(end_point_url, data=json.dumps(
        payload), headers=headers, auth=(user_id, password))

基本的なコードはこれだけです。

定期実行するように作ってありますので既に自動投稿した記事をテキストファイルにメモしておくようにしていますが、そのあたり不要な方は削ってしまってもきちんと動きます。

最後に

個人的にはもう少し時間かかるかなと思ったのですが、かなり便利なAPIが双方に用意されていたのでただAPI叩いただけになってしまいました。

Qiitaと自分のサイトに投稿したい需要があるのか分からないですが、誰かの参考になったら嬉しいです。