- 1. 概要
- 2. sitemap.xml 作成
1. 概要
実は、前ページでコンテンツを収集して、「.json」ファイルを作成しておけば、「sitemap.xml」を作成するのは、比較的、楽なのです。
前ページの本体を作成したのと同じディレクトリに、今回の本体を作成します。
入力諸元や、他の使用モジュールは、前ページと同じものを使用します。
2. sitemap.xml 作成
こんなソースを書きました。
import datetime
import json
import os
from Sitemap import Initial
from Sitemap import Common
# @file makeXML.py
# @version 0.1
# @author show.kit
# @date 2022年6月16日 新規作成
# @brief dump した .json ファイルを元に sitemap.xml を作成する
initial = Initial.Initial()
common = Common.Common()
common.setstart()
print('開始 '+common.datetime())
## .json ファイルを読み込んで top を取得しておく
with open(initial.contents, mode='r', encoding='utf-8') as file:
load = json.load(file)
topkey = next(iter(load))
# 再帰呼び出ししちゃう
# 後でソートするためにいったん URI → 更新日時の辞書型を作成
def sitemap(dic, mydic):
mydic[dic['uri']] = dic['modified']
# 辞書内に辞書がある場合は 再帰呼び出しする
for value in dic.values():
if (type(value) is dict):
sitemap(value, mydic)
# 上記のメソッドで辞書を作成
mydic = {}
sitemap(load[topkey], mydic)
# 辞書を元に url loc lastmod の行を作成
# 行を作成してからのソートすると 下記の前後が入れ替わっちゃうのだ
#
# <url><loc>https://freebsd.sing.ne.jp/</loc><lastmod>
# <url><loc>https://freebsd.sing.ne.jp/00/</loc>
#
lines = []
for key, value in sorted(mydic.items()):
line = '<url>'
line += '<loc>' + key + '</loc>'
lastmod = datetime.datetime.strptime(value, '%Y%m%d%H%M%S').strftime('%Y-%m-%dT%H:%M:%S+09:00')
line += '<lastmod>' + lastmod + '</lastmod>'
line += '</url>' + "\n"
lines.append(line)
# import pdb; pdb.set_trace()
with open(initial.output, mode='w', encoding='utf-8', newline=os.linesep) as file:
file.write('<?xml version="1.0" encoding="utf-8"?>' + "\n")
file.write('<!DOCTYPE urlset>' + "\n")
file.write('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' + "\n")
file.writelines(lines)
file.write('</urlset>' + "\n")
print('終了 '+common.datetime(), '数', len(lines))
print('処理時間 ', common.getpast())
最初に使用するモジュールの読込を行うのは、前ページと同様です。
手始めに、作成された「.json」ファイルを読み込みます。
読み込んだ「.json」ファイルには、今回使用するには、余分な情報があるのと、階層構造になっちゃっています。
「sitemap」というメソッドで、階層構造をばらしつつ、単に、「URI=更新日時」という形式の辞書を作成します。
作成した辞書を、「URI」でソートします。
ソートしたものを、下記の形式で、「sitemap.xml」として出力していきます。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlset>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>URI</loc><lastmod>YYYY-MM-DDTHH:MI:SS+09:00</lastmod></url>
...
</urlset>
固定の文字列の箇所、ハードコーディングしちゃってますが、インクルードするか、イニシャルファイルに書くか、ヒアドキュメントにしたほうがいいでしょうね。
|
|