<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Gemini Log</title>
<style>
body {
font-family: "Helvetica Neue", Arial, sans-serif;
max-width: 900px;
margin: 0 auto;
padding: 20px;
color: #333;
line-height: 1.6;
background-color: #fff;
}
.message-block {
margin-bottom: 30px;
border-bottom: 1px solid #eee;
padding-bottom: 20px;
}
.user-message {
background-color: #e8eaed;
padding: 15px;
border-radius: 12px;
color: #202124;
font-weight: bold;
}
.model-message {
margin-top: 10px;
padding: 0 10px;
}
p { margin: 0 0 1em 0; }
.code-wrapper {
position: relative;
margin: 1em 0;
background: #f4f6f8;
border-radius: 8px;
border: 1px solid #dadce0;
}
.copy-btn {
position: absolute;
top: 5px;
right: 5px;
background-color: #e0e0e0;
border: none;
border-radius: 4px;
padding: 4px 10px;
font-size: 12px;
cursor: pointer;
color: #555;
z-index: 10;
}
.copy-btn:hover {
opacity: 1;
background-color: #d0d0d0;
}
.fake-code-block {
display: block;
margin: 0;
padding: 30px 15px 15px 15px;
overflow-x: auto;
font-family: Consolas, monospace;
white-space: pre-wrap;
color: #202124;
background: transparent;
border: none;
line-height: 1.5;
}
.fake-inline-code {
background: #f1f3f4;
color: #333;
padding: 2px 5px;
border-radius: 4px;
font-family: Consolas, monospace;
font-size: 0.9em;
font-weight: bold;
}
a { color: #1a73e8; text-decoration: none; }
a:hover { text-decoration: underline; }
</style>
<script>
function copyCode(btn) {
var pre = btn.nextElementSibling;
var codeText = pre.innerText;
var tempTextArea = document.createElement("textarea");
tempTextArea.value = codeText;
document.body.appendChild(tempTextArea);
tempTextArea.select();
document.execCommand("copy");
document.body.removeChild(tempTextArea);
var originalText = btn.innerText;
btn.innerText = "Copied!";
setTimeout(function() { btn.innerText = originalText; }, 2000);
}
</script>
</head>
<body>
<div class="message-block user-message">googleのbblogger について、いろいろ知りたい。登録方法、ノウハウ、広告、自動で記事を上げる方法(atom とか)api についてなど細かく頼みます。</div>
<div class="message-block model-message">
<div _ngcontent-ng-c676535998="" inline-copy-host="" class="markdown markdown-main-panel stronger enable-updated-hr-color" id="model-response-message-contentr_fd7b41da10af6fd9" aria-live="polite" aria-busy="false" dir="ltr" style="--animation-duration: 400ms; --fade-animation-function: linear;"><p data-path-to-node="0">Googleの無料ブログサービス「Blogger」について、基礎から高度な自動化技術まで網羅的に解説します。</p>
<p data-path-to-node="1">BloggerはGoogleが運営しているため、**「無料で広告が表示されない(強制広告がない)」「Google AdSenseとの親和性が高い」「APIが充実している」**という大きなメリットがあります。</p>
<hr data-path-to-node="2"/><h3 data-path-to-node="3">1. 登録・開設方法(スタートアップ)</h3>
<p data-path-to-node="4">非常にシンプルで、Googleアカウントがあれば即座に開設できます。</p>
<ol start="1" data-path-to-node="5"><li><p data-path-to-node="5,0,0"><b data-path-to-node="5,0,0" data-index-in-node="0">アクセス:</b><response-element class="" ng-version="0.0.0-PLACEHOLDER"><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><link-block _nghost-ng-c1979651697="" class="ng-star-inserted"><!----><!----><a _ngcontent-ng-c1979651697="" target="_blank" rel="noopener" externallink="" _nghost-ng-c2535132428="" jslog="197247;track:generic_click,impression,attention;BardVeMetadataKey:[["r_fd7b41da10af6fd9","c_f712e8df3d406959",null,"rc_3add15016af11c5d",null,null,"ja",null,1,null,null,1,0]]" href="https://www.blogger.com/" class="ng-star-inserted" data-hveid="0" decode-data-ved="1" data-ved="0CAAQ_4QMahcKEwjCspGp98WSAxUAAAAAHQAAAAAQIg">Blogger公式サイト</a><!----></link-block><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----></response-element>へアクセス。</p>
</li>
<li><p data-path-to-node="5,1,0"><b data-path-to-node="5,1,0" data-index-in-node="0">ブログ作成:</b> 「ブログを作成」ボタンをクリックし、Googleアカウントでログイン。</p>
</li>
<li><p data-path-to-node="5,2,0"><b data-path-to-node="5,2,0" data-index-in-node="0">名前の決定:</b> ブログの「タイトル」を入力。</p>
</li>
<li><p data-path-to-node="5,3,0"><b data-path-to-node="5,3,0" data-index-in-node="0">URLの決定:</b> ドメイン(<span class="fake-inline-code">xxxx.blogspot.com</span>)の<span class="fake-inline-code">xxxx</span>部分を決めます。世界中で重複不可なので、数字を入れるなど工夫が必要です。</p>
</li>
<li><p data-path-to-node="5,4,0"><b data-path-to-node="5,4,0" data-index-in-node="0">完了:</b> これだけでダッシュボードに入れます。</p>
</li>
</ol>
<h3 data-path-to-node="6">2. 運営ノウハウ・設定のポイント</h3>
<p data-path-to-node="7">Bloggerを使いこなすための重要な設定項目です。</p>
<ul data-path-to-node="8"><li><p data-path-to-node="8,0,0"><b data-path-to-node="8,0,0" data-index-in-node="0">カスタムドメイン:</b></p>
<ul data-path-to-node="8,0,1"><li><p data-path-to-node="8,0,1,0,0">設定画面から独自ドメイン(例: <span class="fake-inline-code">example.com</span>)を無料で紐付けられます。SEO的にも有利です。</p>
</li>
</ul>
</li>
<li><p data-path-to-node="8,1,0"><b data-path-to-node="8,1,0" data-index-in-node="0">テーマ(テンプレート):</b></p>
<ul data-path-to-node="8,1,1"><li><p data-path-to-node="8,1,1,0,0">デフォルトのテーマはシンプルすぎることが多いです。</p>
</li>
<li><p data-path-to-node="8,1,1,1,0"><b data-path-to-node="8,1,1,1,0" data-index-in-node="0">ノウハウ:</b> 海外製のテンプレートが多いですが、日本語対応のレスポンシブデザイン(スマホ対応)テーマ(例: 「Vaster2」などの有志作成テーマや、ThemeForestなどの有料テーマ)を探して適用すると、見栄えが一気にプロっぽくなります。</p>
</li>
</ul>
</li>
<li><p data-path-to-node="8,2,0"><b data-path-to-node="8,2,0" data-index-in-node="0">SEO設定:</b></p>
<ul data-path-to-node="8,2,1"><li><p data-path-to-node="8,2,1,0,0">「設定」→「メタタグ」で「検索向け説明(meta description)」を必ず有効にし、ブログの概要を入力してください。</p>
</li>
<li><p data-path-to-node="8,2,1,1,0">「設定」→「クローラとインデックス」でGoogle Search Consoleとの連携を確認します。</p>
</li>
</ul>
</li>
<li><p data-path-to-node="8,3,0"><b data-path-to-node="8,3,0" data-index-in-node="0">パーマリンク:</b></p>
<ul data-path-to-node="8,3,1"><li><p data-path-to-node="8,3,1,0,0">記事投稿画面の右側「パーマリンク」設定で「カスタムパーマリンク」を選び、英数字で意味のあるURL(例: <span class="fake-inline-code">/2024/02/python-api-guide.html</span>)にすることをおすすめします(日本語URLはエンコードされて長くなるため)。</p>
</li>
</ul>
</li>
</ul>
<hr data-path-to-node="9"/><h3 data-path-to-node="10">3. 広告・収益化</h3>
<p data-path-to-node="11">Bloggerの最大の強みはここです。</p>
<ul data-path-to-node="12"><li><p data-path-to-node="12,0,0"><b data-path-to-node="12,0,0" data-index-in-node="0">Google AdSense(アドセンス):</b></p>
<ul data-path-to-node="12,0,1"><li><p data-path-to-node="12,0,1,0,0">Bloggerの管理画面に「収益」というタブがあります。ここから直接AdSenseのアカウントを紐付けたり、審査を申請できます。</p>
</li>
<li><p data-path-to-node="12,0,1,1,0"><b data-path-to-node="12,0,1,1,0" data-index-in-node="0">メリット:</b> 審査に合格すれば、ウィジェットで「AdSenseガジェット」を配置するだけで、最適な場所に自動で広告が出ます。</p>
</li>
<li><p data-path-to-node="12,0,1,2,0"><b data-path-to-node="12,0,1,2,0" data-index-in-node="0">注意:</b> 無料ブログですが審査は厳格です。最低でも10〜20記事程度の良質なコンテンツが必要です。</p>
</li>
</ul>
</li>
<li><p data-path-to-node="12,1,0"><b data-path-to-node="12,1,0" data-index-in-node="0">アフィリエイト:</b></p>
<ul data-path-to-node="12,1,1"><li><p data-path-to-node="12,1,1,0,0">AmazonアソシエイトやA8.netなどのアフィリエイトリンクも自由に貼れます。規約違反(アダルトや違法コンテンツ)でない限り、制限は緩やかです。</p>
</li>
</ul>
</li>
</ul>
<hr data-path-to-node="13"/><h3 data-path-to-node="14">4. 自動で記事を上げる方法(APIとAtom)</h3>
<p data-path-to-node="15">ここが技術的な核心部分です。かつては「AtomPub」というプロトコルが使われていましたが、現在は**「Blogger API v3」**を使用するのが標準的かつ確実です。</p>
<h4 data-path-to-node="16">A. Atom / RSS についての誤解と現状</h4><p data-path-to-node="17">ユーザーが言及された「Atom」は、通常は記事の更新情報を配信するフィード(RSS/Atom)を指しますが、投稿プロトコルとしての「AtomPub」は現在Googleのエコシステムではレガシー(古い)扱いです。
自動投稿を行うなら、RESTfulな<b data-path-to-node="17" data-index-in-node="124">Google Blogger API v3</b>を利用します。</p>
<h4 data-path-to-node="18">B. Blogger API v3 を使った自動投稿の仕組み</h4><p data-path-to-node="19">Pythonなどのプログラムから、Googleのサーバーに直接記事データを送信します。</p>
<p data-path-to-node="20"><b data-path-to-node="20" data-index-in-node="0">必要な準備:</b></p>
<ol start="1" data-path-to-node="21"><li><p data-path-to-node="21,0,0"><b data-path-to-node="21,0,0" data-index-in-node="0">Google Cloud Console:</b> プロジェクトを作成し、「Blogger API v3」を有効化する。</p>
</li>
<li><p data-path-to-node="21,1,0"><b data-path-to-node="21,1,0" data-index-in-node="0">認証情報:</b> OAuth 2.0 クライアントIDを作成し、<span class="fake-inline-code">client_secret.json</span> をダウンロードする。</p>
</li>
<li><p data-path-to-node="21,2,0"><b data-path-to-node="21,2,0" data-index-in-node="0">Blog ID:</b> Blogger管理画面のURLにある数字(例: <span class="fake-inline-code">blogger.com/blog/post/edit/123456789...</span> の数字部分)を控える。</p>
</li>
</ol>
<h4 data-path-to-node="22">C. Pythonによる自動投稿コード例</h4><p data-path-to-node="23">以下は、Pythonを使って記事を投稿する最小限のスクリプト例です。
※事前に <span class="fake-inline-code">pip install google-api-python-client google-auth-oauthlib</span> が必要です。</p>
<response-element class="" ng-version="0.0.0-PLACEHOLDER"><!----><!----><!----><!----><!----><!----><code-block _nghost-ng-c770306952="" class="ng-tns-c770306952-20 ng-star-inserted" style=""><!----><!----><div _ngcontent-ng-c770306952="" class="code-block ng-tns-c770306952-20 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_fd7b41da10af6fd9","c_f712e8df3d406959",null,"rc_3add15016af11c5d",null,null,"ja",null,1,null,null,1,0]]" data-hveid="0" decode-data-ved="1" data-ved="0CAAQhtANahcKEwjCspGp98WSAxUAAAAAHQAAAAAQIw" style="display: block;"><div _ngcontent-ng-c770306952="" class="code-block-decoration header-formatted gds-title-s ng-tns-c770306952-20 ng-star-inserted" style=""><span _ngcontent-ng-c770306952="" class="ng-tns-c770306952-20">Python</span><div _ngcontent-ng-c770306952="" class="buttons ng-tns-c770306952-20 ng-star-inserted"><!----><!----></div>
<!----></div>
<!----><div _ngcontent-ng-c770306952="" class="formatted-code-block-internal-container ng-tns-c770306952-20"><div _ngcontent-ng-c770306952="" class="animated-opacity ng-tns-c770306952-20"><div class="code-wrapper"><button class="copy-btn" onclick="copyCode(this)">Copy</button><pre class="fake-code-block"><span style="color:#a626a4;font-weight:bold">import</span> os
<span style="color:#a626a4;font-weight:bold">import</span> pickle
from google_auth_oauthlib.flow <span style="color:#a626a4;font-weight:bold">import</span> InstalledAppFlow
from google.auth.transport.requests <span style="color:#a626a4;font-weight:bold">import</span> Request
from googleapiclient.discovery <span style="color:#a626a4;font-weight:bold">import</span> build
# 設定
SCOPES = [<span style="color:#50a14f">'https:<span style="color:#a0a1a7;font-style:italic">//www.googleapis.com/auth/blogger'</span>]</span>
BLOG_ID = <span style="color:#50a14f">'あなたのブログIDをここに'</span>
CLIENT_SECRET_FILE = <span style="color:#50a14f">'client_secret.json'</span> # Cloud ConsoleからDLしたファイル
<span style="color:#a626a4;font-weight:bold">def</span> get_service():
creds = None
# トークンの保存(初回認証後はこれを使う)
<span style="color:#a626a4;font-weight:bold">if</span> os.path.exists(<span style="color:#50a14f">'token.pickle'</span>):
with open(<span style="color:#50a14f">'token.pickle'</span>, <span style="color:#50a14f">'rb'</span>) as token:
creds = pickle.load(token)
# 認証が必要な場合
<span style="color:#a626a4;font-weight:bold">if</span> not creds or not creds.valid:
<span style="color:#a626a4;font-weight:bold">if</span> creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
<span style="color:#a626a4;font-weight:bold">else</span>:
flow = InstalledAppFlow.from_client_secrets_file(
CLIENT_SECRET_FILE, SCOPES)
creds = flow.run_local_server(port=0)
# トークンを保存
with open(<span style="color:#50a14f">'token.pickle'</span>, <span style="color:#50a14f">'wb'</span>) as token:
pickle.dump(creds, token)
<span style="color:#a626a4;font-weight:bold">return</span> build(<span style="color:#50a14f">'blogger'</span>, <span style="color:#50a14f">'v3'</span>, credentials=creds)
<span style="color:#a626a4;font-weight:bold">def</span> create_post(service, title, content, labels=None):
body = {
<span style="color:#50a14f">'kind'</span>: <span style="color:#50a14f">'blogger#post'</span>,
<span style="color:#50a14f">'blog'</span>: {<span style="color:#50a14f">'id'</span>: BLOG_ID},
<span style="color:#50a14f">'title'</span>: title,
<span style="color:#50a14f">'content'</span>: content, # HTML形式でOK
}
<span style="color:#a626a4;font-weight:bold">if</span> labels:
body[<span style="color:#50a14f">'labels'</span>] = labels # リスト形式 [<span style="color:#50a14f">'Tag1'</span>, <span style="color:#50a14f">'Tag2'</span>]
try:
posts = service.posts()
result = posts.insert(blogId=BLOG_ID, body=body).execute()
<span style="color:#a626a4;font-weight:bold">print</span>(f<span style="color:#50a14f">"投稿完了: {result['url']}"</span>)
except Exception as e:
<span style="color:#a626a4;font-weight:bold">print</span>(f<span style="color:#50a14f">"エラー発生: {e}"</span>)
<span style="color:#a626a4;font-weight:bold">if</span> __name__ == <span style="color:#50a14f">'__main__'</span>:
service = get_service()
# 記事の内容
my_title = <span style="color:#50a14f">"APIからのテスト投稿"</span>
my_content = <span style="color:#50a14f">"<h1>こんにちは</h1><p>これはPythonから自動投稿された記事です。</p>"</span>
my_labels = [<span style="color:#50a14f">"Python"</span>, <span style="color:#50a14f">"自動化"</span>]
create_post(service, my_title, my_content, my_labels)
</pre></div>
<!----></div>
</div>
</div>
<!----><!----></code-block><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----></response-element><h4 data-path-to-node="25">D. その他の自動化手段(APIを使わない簡易版)</h4><ul data-path-to-node="26"><li><p data-path-to-node="26,0,0"><b data-path-to-node="26,0,0" data-index-in-node="0">Mail-to-Blogger (メール投稿):</b></p>
<ul data-path-to-node="26,0,1"><li><p data-path-to-node="26,0,1,0,0">管理画面の「設定」→「メール」で、投稿専用のメールアドレス(<span class="fake-inline-code">username.secretword@blogger.com</span>)を設定できます。</p>
</li>
<li><p data-path-to-node="26,0,1,1,0">このアドレスにメールを送ると、件名がタイトル、本文が記事として投稿されます。</p>
</li>
<li><p data-path-to-node="26,0,1,2,0"><b data-path-to-node="26,0,1,2,0" data-index-in-node="0">制限:</b> 細かいHTMLタグの制御やラベル付けが難しいため、簡易的な更新に向いています。</p>
</li>
</ul>
</li>
</ul>
<hr data-path-to-node="27"/><h3 data-path-to-node="28">まとめ</h3>
<ul data-path-to-node="29"><li><p data-path-to-node="29,0,0"><b data-path-to-node="29,0,0" data-index-in-node="0">初心者:</b> メール投稿機能を使えば、スマホのメールアプリから手軽に自動化・更新が可能です。</p>
</li>
<li><p data-path-to-node="29,1,0"><b data-path-to-node="29,1,0" data-index-in-node="0">中級〜上級者:</b> Blogger API v3とPython等を組み合わせることで、「天気を取得して毎日投稿」「ニュースを要約して投稿」などの完全自動化ブログ(Bot)が作成可能です。</p>
</li>
</ul>
<p data-path-to-node="30">Bloggerは「APIの制限(1日あたりのクォータ)」がありますが、個人の自動投稿レベルであれば使い切ることはまずありません。</p>
<p data-path-to-node="31"><b data-path-to-node="31" data-index-in-node="0">次のステップとして、APIを利用するための「Google Cloud Consoleでの設定手順」を詳しく掘り下げましょうか?それともAdSense審査を通すための具体的な記事構成について知りたいですか?</b></p>
</div>
</div>
</body>
</html>
使用変数
| blogId | |
| BLOG_ID | |
| body | |
| busy | |
| c1979651697 | |
| c2535132428 | |
| c676535998 | |
| c770306952 | |
| charset | |
| class | |
| CLIENT_SECRET_FILE | |
| codeText | |
| copyCode -------( Function ) | |
| credentials | |
| creds | |
| dir | |
| externallink | |
| flow | |
| host | |
| href | |
| hveid | |
| id | |
| innerText | |
| jslog | |
| labels | |
| lang | |
| live | |
| my_content | |
| my_labels | |
| my_title | |
| node | |
| onclick | |
| originalText | |
| port | |
| posts | |
| pre | |
| rel | |
| result | |
| SCOPES | |
| service | |
| start | |
| style | |
| target | |
| tempTextArea | |
| value | |
| ved | |
| version | |
| __name__ |