feat: implement doctor data migration and update booking link UI in doctor-detail template
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
import xml.etree.ElementTree as ET
|
||||
import csv
|
||||
import sys
|
||||
import re
|
||||
|
||||
def clean_html(raw_html):
|
||||
if not raw_html:
|
||||
return ""
|
||||
cleanr = re.compile('<.*?>')
|
||||
cleantext = re.sub(cleanr, '', raw_html)
|
||||
return cleantext.strip().replace('\n', ' ')
|
||||
|
||||
try:
|
||||
tree = ET.parse('/home/x79/sisvietnamvn_01/sisvietnamvn_Trang chính thức hiện tại/bnhvinakhoaquctsiscnth.WordPress.2026-07-28 (5).xml')
|
||||
root = tree.getroot()
|
||||
except Exception as e:
|
||||
print(f"Error parsing XML: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
ns = {
|
||||
'wp': 'http://wordpress.org/export/1.2/',
|
||||
'content': 'http://purl.org/rss/1.0/modules/content/'
|
||||
}
|
||||
|
||||
# First pass to build a dictionary of attachment URLs
|
||||
attachments = {}
|
||||
for channel in root.findall('channel'):
|
||||
for item in channel.findall('item'):
|
||||
post_type_el = item.find('wp:post_type', ns)
|
||||
if post_type_el is not None and post_type_el.text == 'attachment':
|
||||
post_id_el = item.find('wp:post_id', ns)
|
||||
attachment_url_el = item.find('wp:attachment_url', ns)
|
||||
if post_id_el is not None and attachment_url_el is not None:
|
||||
attachments[post_id_el.text] = attachment_url_el.text
|
||||
|
||||
csv_path = '/home/x79/sisvietnamvn_01/sisvietnamvn_main/doctors_from_xml.csv'
|
||||
with open(csv_path, 'w', newline='', encoding='utf-8') as csvfile:
|
||||
fieldnames = ['Name', 'Position', 'Gender', 'Birthday', 'Phone', 'Email', 'Address', 'Order', 'ImageID', 'ImageURL', 'Content']
|
||||
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
|
||||
writer.writeheader()
|
||||
|
||||
for channel in root.findall('channel'):
|
||||
for item in channel.findall('item'):
|
||||
post_type_el = item.find('wp:post_type', ns)
|
||||
if post_type_el is not None and post_type_el.text == 'employee':
|
||||
title = item.find('title')
|
||||
name = title.text if title is not None else ""
|
||||
|
||||
content_el = item.find('content:encoded', ns)
|
||||
content = clean_html(content_el.text) if content_el is not None else ""
|
||||
|
||||
doctor_data = {
|
||||
'Name': name,
|
||||
'Position': '',
|
||||
'Gender': '',
|
||||
'Birthday': '',
|
||||
'Phone': '',
|
||||
'Email': '',
|
||||
'Address': '',
|
||||
'Order': '',
|
||||
'ImageID': '',
|
||||
'ImageURL': '',
|
||||
'Content': content[:200] # truncate for CSV view
|
||||
}
|
||||
|
||||
for meta in item.findall('wp:postmeta', ns):
|
||||
key_el = meta.find('wp:meta_key', ns)
|
||||
val_el = meta.find('wp:meta_value', ns)
|
||||
|
||||
if key_el is not None and key_el.text and val_el is not None:
|
||||
k = key_el.text
|
||||
v = val_el.text or ""
|
||||
if k == 'position': doctor_data['Position'] = v
|
||||
elif k == 'gender': doctor_data['Gender'] = v
|
||||
elif k == 'birthday': doctor_data['Birthday'] = v
|
||||
elif k == 'phone_number': doctor_data['Phone'] = v
|
||||
elif k == 'email': doctor_data['Email'] = v
|
||||
elif k == 'address': doctor_data['Address'] = v
|
||||
elif k == 'order': doctor_data['Order'] = v
|
||||
elif k == 'image':
|
||||
doctor_data['ImageID'] = v
|
||||
doctor_data['ImageURL'] = attachments.get(v, '')
|
||||
|
||||
writer.writerow(doctor_data)
|
||||
|
||||
print(f"Successfully wrote CSV to {csv_path}")
|
||||
Reference in New Issue
Block a user