File size: 6,445 Bytes
dd495a5 8e118cf dd495a5 8e118cf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
import streamlit as st
from pathlib import Path
import re
import urllib.parse
def load_template(template_path):
"""加载 README 模板文件"""
with open(template_path, 'r', encoding='utf-8') as f:
return f.read()
def get_template_variables(template_content):
"""从模板中提取所有变量"""
pattern = r'\{\{(\w+)\}\}'
return sorted(list(set(re.findall(pattern, template_content))))
def encode_url_safe(text):
"""将文本中的空格转换为 URL 安全的格式"""
return urllib.parse.quote(text).replace('+', '%20')
def replace_template_variables(template_content, variables_dict):
"""替换模板中的所有变量,对特定字段进行 URL 编码"""
url_encode_fields = ['full_name', 'bio'] # 需要 URL 编码的字段
for key, value in variables_dict.items():
if key in url_encode_fields and value:
# 对特定字段进行 URL 编码
encoded_value = encode_url_safe(value)
template_content = template_content.replace(f'{{{{{key}}}}}', encoded_value)
else:
# 其他字段正常替��
template_content = template_content.replace(f'{{{{{key}}}}}', value)
return template_content
def create_badge(text, color="blue"):
"""创建技能徽章
将空格替换为下划线,以确保徽章正确显示
"""
# 处理空格
text = text.strip()
badge_text = text.replace(" ", "_")
badge_logo = text.lower().replace(" ", "-") # logo 使用连字符
return f""
def process_skills(skills_text):
"""处理技能列表文本
分割文本并生成徽章
"""
if not skills_text:
return ""
# 分割技能并移除空白项
skills = [skill.strip() for skill in skills_text.split(",") if skill.strip()]
# 生成徽章
return " ".join([create_badge(skill) for skill in skills])
def main():
st.set_page_config(
page_title="GitHub README Profile Generator",
page_icon="📝",
layout="wide"
)
st.title("GitHub README Profile Generator")
st.markdown("### 生成你的个性化 GitHub Profile README")
# 加载默认模板
template_path = Path("README模板.md")
template_content = load_template(template_path)
# 创建两列布局
col1, col2 = st.columns([1, 1])
with col1:
st.subheader("基本信息")
# 基本信息表单
full_name = st.text_input("姓名", value="Chan Meng")
bio = st.text_input("个人简介", value="A minimalist")
github_username = st.text_input("GitHub 用户名", value="ChanMeng666")
# 社交链接
st.subheader("社交链接")
portfolio_link = st.text_input("作品集链接", value="https://chanmeng.live/")
linkedin_link = st.text_input("LinkedIn 链接", value="https://www.linkedin.com/in/chanmeng666/")
# 日常行为
st.subheader("日常行为")
daily_routine_1 = st.text_input("日常行为 1", value="code")
daily_routine_2 = st.text_input("日常行为 2", value="eat")
daily_routine_3 = st.text_input("日常行为 3", value="sleep")
daily_routine_4 = st.text_input("日常行为 4", value="repeat")
# 项目信息
st.subheader("项目 1")
project_1_name = st.text_input("项目 1 名称", value="My Awesome Project")
project_1_link = st.text_input("项目 1 链接", value="#")
project_1_image = st.text_input("项目 1 图片", value="/path/to/project1.png")
project_1_github = st.text_input("项目 1 GitHub", value="#")
project_1_live = st.text_input("项目 1 演示链接", value="#")
project_1_point_1 = st.text_input("项目 1 要点 1", value="Feature 1")
project_1_point_2 = st.text_input("项目 1 要点 2", value="Feature 2")
project_1_point_3 = st.text_input("项目 1 要点 3", value="Feature 3")
# 技能徽章
st.subheader("技能栈")
core_skills = st.text_area("核心技能 (用逗号分隔)",
value="React,Python,TypeScript,Machine Learning")
frontend_skills = st.text_area("前端技能 (用逗号分隔)",
value="HTML5,CSS3,JavaScript,React Native")
backend_skills = st.text_area("后端技能 (用逗号分隔)",
value="Node.js,MySQL,MongoDB")
# 生成徽章
core_skills_badges = process_skills(core_skills)
frontend_skills_badges = process_skills(frontend_skills)
backend_skills_badges = process_skills(backend_skills)
# 其他信息
st.subheader("其他信息")
footer_text = st.text_area("页脚文本", value="Thanks for visiting my GitHub profile! Feel free to connect or check out my projects.")
# 创建变量字典
variables = {
'full_name': full_name or '',
'bio': bio or '',
'github_username': github_username,
'portfolio_link': portfolio_link,
'linkedin_link': linkedin_link,
'daily_routine_1': daily_routine_1,
'daily_routine_2': daily_routine_2,
'daily_routine_3': daily_routine_3,
'daily_routine_4': daily_routine_4,
'project_1_name': project_1_name,
'project_1_link': project_1_link,
'project_1_image': project_1_image,
'project_1_github': project_1_github,
'project_1_live': project_1_live,
'project_1_point_1': project_1_point_1,
'project_1_point_2': project_1_point_2,
'project_1_point_3': project_1_point_3,
'core_skills_badges': core_skills_badges,
'frontend_skills_badges': frontend_skills_badges,
'backend_skills_badges': backend_skills_badges,
'footer_text': footer_text
}
# 生成预览内容
preview_content = replace_template_variables(template_content, variables)
with col2:
st.subheader("预览")
st.markdown(preview_content, unsafe_allow_html=True)
if st.button("复制全部内容"):
st.code(preview_content, language="markdown")
st.success("内容已复制到剪贴板!")
if __name__ == "__main__":
main()
|