0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonその3Advent Calendar 2020

Day 14

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

Last updated at Posted at 2020-12-08

##はじめに

(19日に投稿予定でしたが、14日が空いたので早めに投稿してみました。)

普段は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と自分のサイトに投稿したい需要があるのか分からないですが、誰かの参考になったら嬉しいです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?