Add better formatting
This commit is contained in:
+42
-3
@@ -56,6 +56,44 @@ def fetch_app_description(app_id):
|
|||||||
print(f"Error fetching description for {app_id}: {e}")
|
print(f"Error fetching description for {app_id}: {e}")
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
def format_description(text):
|
||||||
|
"""Convert plain text description to formatted HTML with proper line breaks and lists."""
|
||||||
|
if not text:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
# Normalize line breaks (handle both \r\n and \n)
|
||||||
|
text = text.replace('\r\n', '\n')
|
||||||
|
|
||||||
|
lines = text.split('\n')
|
||||||
|
formatted_lines = []
|
||||||
|
in_list = False
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
stripped = line.strip()
|
||||||
|
|
||||||
|
# Check if this is a bullet point
|
||||||
|
if stripped and stripped[0] == '-':
|
||||||
|
if not in_list:
|
||||||
|
formatted_lines.append('<ul>')
|
||||||
|
in_list = True
|
||||||
|
# Remove the leading dash and clean up
|
||||||
|
item_text = stripped[1:].strip()
|
||||||
|
formatted_lines.append(f'<li>{item_text}</li>')
|
||||||
|
else:
|
||||||
|
# Close list if we were in one
|
||||||
|
if in_list:
|
||||||
|
formatted_lines.append('</ul>')
|
||||||
|
in_list = False
|
||||||
|
# Add non-empty paragraphs
|
||||||
|
if stripped:
|
||||||
|
formatted_lines.append(f'<p>{stripped}</p>')
|
||||||
|
|
||||||
|
# Close any open list
|
||||||
|
if in_list:
|
||||||
|
formatted_lines.append('</ul>')
|
||||||
|
|
||||||
|
return '\n'.join(formatted_lines)
|
||||||
|
|
||||||
def create_rss_feed(apps_data, feed_name, feed_description, output_file):
|
def create_rss_feed(apps_data, feed_name, feed_description, output_file):
|
||||||
"""Create an RSS feed from apps data using feedgen."""
|
"""Create an RSS feed from apps data using feedgen."""
|
||||||
|
|
||||||
@@ -91,7 +129,9 @@ def create_rss_feed(apps_data, feed_name, feed_description, output_file):
|
|||||||
|
|
||||||
# Fetch description from detail endpoint
|
# Fetch description from detail endpoint
|
||||||
description = fetch_app_description(app_id)
|
description = fetch_app_description(app_id)
|
||||||
# Ensure description is never None or empty string defaults to empty
|
# Format the description with HTML
|
||||||
|
description = format_description(description)
|
||||||
|
# Ensure description is never None
|
||||||
if description is None:
|
if description is None:
|
||||||
description = ""
|
description = ""
|
||||||
|
|
||||||
@@ -107,7 +147,7 @@ def create_rss_feed(apps_data, feed_name, feed_description, output_file):
|
|||||||
fe.title(str(app['title'])) # Ensure title is a string
|
fe.title(str(app['title'])) # Ensure title is a string
|
||||||
fe.link(href=f'https://repebblesearch.com/apps/{app_id}', rel='alternate')
|
fe.link(href=f'https://repebblesearch.com/apps/{app_id}', rel='alternate')
|
||||||
|
|
||||||
# Set description (now includes image)
|
# Set description (now includes formatted text and image)
|
||||||
if description:
|
if description:
|
||||||
fe.description(description)
|
fe.description(description)
|
||||||
else:
|
else:
|
||||||
@@ -175,4 +215,3 @@ def main():
|
|||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user