ブログの記事情報がまとまったページを作りたい
記事数が増えてくると、過去にどんな記事を書いたか見たくなるのですが、WordPress の管理画面では、何度がクリックしないと、過去記事にたどりつけません。
そこで、APIを使って、過去記事を1ページにまとめてみたいと思います。
カテゴリの取得
カテゴリ取得 API の公式ドキュメントは、 こちら です。
早速コードを書いてみます。取得対象のブログは、このブログ です。
Python
import requests
from urllib.parse import urljoin
def get_categories():
url_base = 'https://kamiki.blog/'
url = urljoin(url_base, 'wp-json/wp/v2/categories/')
payload = {
'page': 1,
'per_page': 100,
'order': 'asc',
}
res = requests.get(url, params=payload)
data = res.json()
# 必要な情報だけを残す。
info = {}
for i, d in enumerate(data):
inner_data = {}
inner_data.update({'id': d['id']})
inner_data.update({'count': d['count']})
inner_data.update({'link': d['link']})
inner_data.update({'name': d['name']})
inner_data.update({'slug': d['slug']})
info.update({i: inner_data})
print(json.dumps(info, indent=4, ensure_ascii=False))
return info
こんな結果が返ってきます。一部抜粋です。
"0": {
"id": 8,
"count": 17,
"link": "https://kamiki.blog/category/python/",
"name": "Python",
"slug": "python"
},
"id": 8,
"count": 17,
"link": "https://kamiki.blog/category/python/",
"name": "Python",
"slug": "python"
},
タグの取得
タグ取得 API の公式ドキュメントは、 こちら です。
コードはカテゴリとほぼ同じです。
Python
def get_tags():
url_base = 'https://kamiki.blog/'
url = urljoin(url_base, 'wp-json/wp/v2/tags/')
payload = {
'page': 1,
'per_page': 100,
'order': 'asc',
}
res = requests.get(url, params=payload)
data = res.json()
# 必要な情報だけを残す。
info = {}
for i, d in enumerate(data):
inner_data = {}
inner_data.update({'id': d['id']})
inner_data.update({'count': d['count']})
inner_data.update({'link': d['link']})
inner_data.update({'name': d['name']})
inner_data.update({'slug': d['slug']})
info.update({i: inner_data})
print(json.dumps(info, indent=4, ensure_ascii=False))
return info
結果の一部です。
"0": {
"id": 23,
"count": 4,
"link": "https://kamiki.blog/tag/csv/",
"name": "csv",
"slug": "csv"
},
"id": 23,
"count": 4,
"link": "https://kamiki.blog/tag/csv/",
"name": "csv",
"slug": "csv"
},
投稿記事の取得
投稿記事取得 API の公式ドキュメントは、 こちら です。
コードはちょっとだけ違います。
Python
def get_posts():
url_base = config_param.WP_URL_BASE
url = urljoin(url_base, 'wp-json/wp/v2/posts/')
payload = {
'page': 1,
'per_page': 100,
'status': 'publish',
'order': 'desc',
}
res = requests.get(url, params=payload)
data = res.json()
# 必要な情報だけを残す。
info = {}
for i, d in enumerate(data):
inner_data = {}
inner_data.update({'id': d['id']})
inner_data.update({'date': d['date']})
inner_data.update({'modified': d['modified']})
inner_data.update({'status': d['status']})
inner_data.update({'type': d['type']})
inner_data.update({'link': d['link']})
inner_data.update({'title': d['title']['rendered']})
inner_data.update({'categories': d['categories']})
inner_data.update({'tags': d['tags']})
info.update({i: inner_data})
print(json.dumps(info, indent=4, ensure_ascii=False))
return info
結果の一部で、最初に投稿した記事です。
"32": {
"id": 394,
"date": "2021-05-16T22:02:44",
"modified": "2021-05-23T10:05:10",
"status": "publish",
"type": "post",
"link": "https://kamiki.blog/wordpress-auto-post-in-python/",
"title": "WordPressへ、Pythonではじめての自動投稿",
"categories": [
5
],
"tags": [
16
] }
"id": 394,
"date": "2021-05-16T22:02:44",
"modified": "2021-05-23T10:05:10",
"status": "publish",
"type": "post",
"link": "https://kamiki.blog/wordpress-auto-post-in-python/",
"title": "WordPressへ、Pythonではじめての自動投稿",
"categories": [
5
],
"tags": [
16
] }
まとめページの作成
これまでのコードで、カテゴリ・タグ・投稿記事 の情報が揃いました。
後は、まとめページを作るだけです。
Python
def write_html(category_info, tag_info, post_info):
filename = 'test.html'
file_path = os.path.join(os.getcwd(), filename)
f = open(file_path, 'w')
f.write('<h2>記事一覧</h2>\n')
f.write('<ul>\n')
for key in post_info:
f.write('<li><a title="{}" href="{}">{}</a></li>\n'
.format(
post_info[key]['title'],
post_info[key]['link'],
post_info[key]['title'],
))
f.write('</ul>\n')
f.close()
return
test.html を見てください。まとめページができていると思います。
例では、category_info と tag_info は使っていませんが、活用してもいいと思います。
本ブログのまとめページは ここ です。