MENU

StreamlitとWordPressを使ってブログ投稿を簡単に!初心者向けガイド

目次

はじめに

この記事では、Pythonの初心者でも扱いやすいStreamlitを使用して、WordPressでのブログ管理と投稿を効率的に行う方法を紹介します。WordPressのAPIを活用し、ブログ記事の投稿や管理を簡単にする方法を学びましょう。

記事の目的

本ガイドの目的は、PythonとStreamlitの基本的な知識を持つ人でも、WordPressブログを簡単に管理できるようになることです。この方法を使えば、ブログの投稿や更新をより迅速かつ効率的に行うことができます。

対象読者

この記事は、Python初心者、非技術者のブロガー、またはブログの管理において時間を節約したい方々を対象としています。

コード全体

import streamlit as st
import requests
import json
import markdown
from base64 import b64encode

# サイドバーでWordPressの設定を入力
st.sidebar.title("WordPress Settings")
wordpress_url = st.sidebar.text_input("WordPress URL", value=st.session_state.get("wordpress_url", "https://blog.code-ripples.net"))
username = st.sidebar.text_input("Username", value=st.session_state.get("username", "Masatoshi"))
password = st.sidebar.text_input("Password", type="password", value=st.session_state.get("password", "bHtl bHiQ owz7 ZLFz UYmr oIu4"))

# セッション状態に保存
st.session_state["wordpress_url"] = wordpress_url
st.session_state["username"] = username
st.session_state["password"] = password

# セッション状態の初期化
if 'category_options' not in st.session_state:
    st.session_state['category_options'] = []
if 'tag_options' not in st.session_state:
    st.session_state['tag_options'] = []

st.sidebar.write("Fetch Data")
# カテゴリとタグの取得ボタン(サイドバーに移動)
api_endpoint = f"{wordpress_url}/wp-json/wp/v2"
if st.sidebar.button("Fetch Categories"):
    response = requests.get(f"{api_endpoint}/categories")
    if response.status_code == 200:
        categories_data = response.json()
        st.session_state['category_options'] = [(str(cat['id']), cat['name']) for cat in categories_data]
    else:
        st.sidebar.error("Failed to fetch categories.")

if st.sidebar.button("Fetch Tags"):
    response = requests.get(f"{api_endpoint}/tags")
    if response.status_code == 200:
        tags_data = response.json()
        st.session_state['tag_options'] = [(str(tag['id']), tag['name']) for tag in tags_data]
    else:
        st.sidebar.error("Failed to fetch tags.")

# Prompt/Base.txt ファイルを読み込む
try:
    with open("Prompt/base.md", "r") as f:
        base_txt_content = f.read()
except FileNotFoundError:
    base_txt_content = "ファイルが見つかりません。"

st.sidebar.write("Download Template")
# サイドバーにテキストファイルをダウンロードするボタンを追加
st.sidebar.download_button(
    label="Download Base.md",
    data=base_txt_content,
    file_name="Base.txt",
    mime="text/plain"
)

# ファイルアップロード
st.title("Upload a Markdown or HTML file")
uploaded_file = st.file_uploader("Choose a file", type=["md", "html"])

# カテゴリとタグの入力(ファイル選択の下に移動)
st.subheader("Post Settings")
selected_categories = st.multiselect(
    "Select Categories", 
    options=[name for _, name in st.session_state['category_options']], 
    # format_func=lambda x: dict(st.session_state['category_options']).get(x, "")
)
selected_tags = st.multiselect(
    "Select Tags", 
    options=[name for _, name in st.session_state['tag_options']], 
    # format_func=lambda x: dict(st.session_state['tag_options']).get(x, "")
)

if uploaded_file:
    file_name = uploaded_file.name.split('.')[0]
    file_content = uploaded_file.read().decode()
    if uploaded_file.type == "application/octet-stream":
        file_content = markdown.markdown(file_content)

    # 投稿データ
    post_data = {
        "title": file_name,
        "content": file_content,
        "status": "publish",
        "categories": [int(cat_id) for cat_id, _ in st.session_state['category_options'] if dict(st.session_state['category_options'])[str(cat_id)] in selected_categories],
        "tags": [int(tag_id) for tag_id, _ in st.session_state['tag_options'] if dict(st.session_state['tag_options'])[str(tag_id)] in selected_tags]
    }
    
    if st.button("Post to WordPress"):
        credentials = b64encode(f"{username}:{password}".encode('utf-8')).decode('utf-8')
        headers = {
            "Authorization": f"Basic {credentials}",
            "Content-Type": "application/json"
        }
        response = requests.post(f"{api_endpoint}/posts", headers=headers, json=post_data)

        if response.status_code == 201:
            st.success("投稿が成功しました。")
        else:
            st.error(f"投稿が失敗しました。エラー内容: {response.content}")

Streamlitとは何か?

Streamlitは、Pythonでインタラクティブなウェブアプリケーションを構築するためのオープンソースライブラリです。その特徴は、コードの変更がリアルタイムで反映され、データサイエンスや機械学習のプロジェクトに特に適しています。また、初心者にも扱いやすいシンプルな構文を持っています。

WordPressとの連携のメリット

WordPressは世界中で広く使用されているコンテンツ管理システムですが、その管理は時に複雑で手間がかかることがあります。Streamlitを使うことで、ブログの投稿や更新が簡単になり、より直感的で時間を節約する方法を提供します。

コードの解説

解説するコードは、Streamlitを使ってWordPressにブログ記事を投稿するためのものです。このコードは、WordPressのAPIと連携し、ユーザーがマークダウンまたはHTML形式で書かれたブログ記事をアップロードし、選択したカテゴリやタグを付けてWordPressに直接投稿することを可能にします。

コードの詳細な解説

  1. WordPressの設定を入力するためのサイドバー。
  2. カテゴリとタグを取得するための機能。
  3. マークダウンまたはHTMLファイルをアップロードして、WordPressに投稿する機能。

こんな人におススメ

このガイドは、以下のような方々に特におススメです:
– Python初心者でブログの管理に興味がある方。
– WordPressでブログを運営しているが、投稿プロセスを効率化したい方。
– プログラミングを学びながら実用的なアプリケーションを作成したい方。

まとめ

この記事では、Streamlitを使ってWordPressブログの投稿と管理を簡単にする方法を紹介しました。この方法を採用することで、ブログの投稿プロセスを効率化し、より多くの時間をコンテンツの作成に費やすことができます。StreamlitとWordPressの組み合わせは、ブログ管理の新たな可能性を提供します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次