情報共有
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(“生成された記事に、あなたの体験談や具体的な情報を加えると、さらに魅力的な記事になります。")
ディスカッション
コメント一覧
まだ、コメントがありません