見出し画像

Pythonを使って、noteエクスポートファイル(xml)から、必要な情報を取り出す

noteのエクスポートファイル(XML)を、自前サイトの形式に変換して保管しようとしている。その1歩目として、pythonを使って、エクスポートファイルからタイトルと投稿日を抜き出してみた。

コード

import sys
import xml.etree.ElementTree as ET

xmlns_excerpt="http://wordpress.org/export/1.2/excerpt/" 
xmlns_content="http://purl.org/rss/1.0/modules/content/" 
xmlns_wfw="http://wellformedweb.org/CommentAPI/" 
xmlns_dc="http://purl.org/dc/elements/1.1/" 
xmlns_wp="http://wordpress.org/export/1.2/"

print ("***** noteエクスポートファイルから、必要なデータを取り出す *****")
print ("** start")
args = sys.argv

input_file = args[1]

print ("** parse start")
tree = ET.parse(input_file)
root = tree.getroot()
for item in root.findall('channel/item'):
	title = item.find('title').text
	print ("** title :",title)
	post_date = item.find("wp:post_date", {'wp': xmlns_wp}).text
	print ("** post date :",post_date)

print ("** parse end")
print ("** end")

処理結果

***** noteエクスポートファイルから、必要なデータを取り出す *****
** start
** parse start
** title : ルーター(アクセスポイント)交換
** post date : 2024-12-18 20:11:08
** title : 音声転送で振り出しに戻る
** post date : 2024-12-22 18:38:55
** title : 座りすぎ解消
** post date : 2024-12-22 18:48:21
** title : 自転車の分解備忘録
** post date : 2024-12-26 15:19:55
** title : Inkscape 1.4
** post date : 2024-12-27 11:57:07
** parse end
** end

自分の投稿文書のエクスポートファイルを入力した結果。

未投稿(下書き保存)のデータもエクスポートできているのを確認。

追記(2025/1/7)

namespace部分を以下のようにすると、もっと記述が楽になる。

xmlns_wp     ={"wp"     :"http://wordpress.org/export/1.2/"}

  :

post_date = item.find("wp:post_date", xmlns_wp).text

追記(2025/1/10)

ちゃんとPythonのドキュメントを読むと、namespaceの記述の事例が記述されていた。「Pythonの辞書を使っているのだから、ひとつにまとめてしまえる」ことに自分で気づかないのは、動けばいいや的な思考停止か。

xmlns = {"excerpt":"http://wordpress.org/export/1.2/excerpt/",
         "content":"http://purl.org/rss/1.0/modules/content/",
         "wfw"    :"http://wellformedweb.org/CommentAPI/",
         "dc"     :"http://purl.org/dc/elements/1.1/",
         "wp"     :"http://wordpress.org/export/1.2/"}

  :

post_date = item.find("wp:post_date", xmlns).text

  :

content = item.find("content:encoded", xmlns).text

いいなと思ったら応援しよう!