情報共有

import google.generativeai as genai

import os

import sys

import json

import re

# — 1. 設定情報 —

# Gemini APIキーを環境変数から取得

GEMINI_API_KEY = os.getenv('GEMINI_API_KEY’)

if not GEMINI_API_KEY:

print(“エラー: 環境変数 'GEMINI_API_KEY’ が設定されていません。")

print(“export GEMINI_API_KEY=’YOUR_API_KEY_HERE’ を実行してください。")

sys.exit()

# Gemini APIへの接続

genai.configure(api_key=GEMINI_API_KEY)

# 高速応答に特化したモデルを使用

model = genai.GenerativeModel('gemini-1.5-flash’)

def markdown_to_html(text):

“""

Markdownの箇条書きをHTMLのリストに変換する関数

“""

lines = text.split('\n’)

html_lines = []

in_list = False

for line in lines:

if line.strip().startswith('- '):

if not in_list:

html_lines.append('<ul>’)

in_list = True

html_lines.append(f'<li>{line.strip()[2:].strip()}</li>’)

else:

if in_list:

html_lines.append('</ul>’)

in_list = False

if line.strip():

html_lines.append(f'<p>{line.strip()}</p>’)

if in_list:

html_lines.append('</ul>’)

return '\n’.join(html_lines)

def generate_full_blog_post(keyword):

“""

キーワードを元にブログ記事全体(構成案と本文)を生成する関数。

“""

prompt = f"""

あなたはプロのコンテンツライターです。

指定されたキーワードを使って、読者の興味を引きつけ、読みやすく、SEOに最適化されたブログ記事の全体を書いてください。

各セクションの本文は、以下の要素を含めて具体的に記述してください:

– 専門的な視点

– 具体的な例や数字(もしあれば)

– 読者の課題を解決するためのアドバイス

スマートフォンの小さな画面でも読みやすいように、1つの段落は3〜4行以内とし、箇条書きはMarkdown形式(- アイテム)で記述してください。

以下のJSON形式で出力してください:

{{

“title": “記事のタイトル",

“introduction": “記事の導入部分",

“sections": [

{{

“heading": “h2レベルの見出し",

“body": “この見出しの内容を具体的に説明する文章",

“subsections": [

{{

“heading": “h3レベルの見出し",

“body": “この見出しの内容を具体的に説明する文章"

}},

{{

“heading": “h3レベルの見出し",

“body": “この見出しの内容を具体的に説明する文章"

}}

]

}},

{{

“heading": “h2レベルの見出し",

“body": “この見出しの内容を具体的に説明する文章"

}}

],

“conclusion": “記事のまとめ"

}}

キーワード: {keyword}

“""

try:

response = model.generate_content(prompt, generation_config={“response_mime_type": “application/json"})

return json.loads(response.text)

except Exception as e:

print(f"Gemini APIからの応答取得中にエラーが発生しました: {e}")

return None

def generate_html_output(post):

“""

生成された記事全体をHTML形式に変換する関数。

“""

html_content = “"

# 導入部分

html_content += markdown_to_html(post[“introduction"]) + '\n’

# 記事の構成

for section in post['sections’]:

# h2見出し

html_content += f'<h2>{section[“heading"]}</h2>\n’

html_content += markdown_to_html(section[“body"]) + '\n’

# h3見出し(もしあれば)

if “subsections" in section:

for subsection in section['subsections’]:

html_content += f'<h3>{subsection[“heading"]}</h3>\n’

html_content += markdown_to_html(subsection[“body"]) + '\n’

# 結論部分

html_content += f'<h2>まとめ</h2>\n’

html_content += markdown_to_html(post[“conclusion"]) + '\n’

return html_content

if __name__ == '__main__’:

if len(sys.argv) < 2:

print(“使い方: python blog_generator.py 'キーワード'")

sys.exit()

keyword = sys.argv[1]

print(f"キーワード「{keyword}」を元に記事全体を生成します…")

full_post = generate_full_blog_post(keyword)

if full_post:

print(“\n" + “—" * 15)

print(“✅ 記事のHTML全文が生成されました!")

print(“以下をWordPressのテキストエディタにコピペしてください。")

print(“—" * 15)

# 記事タイトル

print(f"記事タイトル: {full_post['title’]}")

# HTMLコンテンツ

html_output = generate_html_output(full_post)

print(“\n" + html_output)

print(“—" * 15)

print(“生成された記事に、あなたの体験談や具体的な情報を加えると、さらに魅力的な記事になります。")