{"id":32953447,"url":"https://github.com/songron/weblog","last_synced_at":"2025-12-26T19:42:55.546Z","repository":{"id":6164162,"uuid":"7393847","full_name":"songron/weblog","owner":"songron","description":"A simple blog system written in Flask.","archived":false,"fork":false,"pushed_at":"2023-02-02T01:38:25.000Z","size":1497,"stargazers_count":186,"open_issues_count":8,"forks_count":108,"subscribers_count":19,"default_branch":"master","last_synced_at":"2024-04-05T11:12:24.090Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/songron.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-01-01T07:20:19.000Z","updated_at":"2023-12-12T06:55:20.000Z","dependencies_parsed_at":"2023-02-17T13:15:30.674Z","dependency_job_id":null,"html_url":"https://github.com/songron/weblog","commit_stats":null,"previous_names":["ghostrong/weblog"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/songron/weblog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/songron%2Fweblog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/songron%2Fweblog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/songron%2Fweblog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/songron%2Fweblog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/songron","download_url":"https://codeload.github.com/songron/weblog/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/songron%2Fweblog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284911789,"owners_count":27083425,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-17T02:00:06.431Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-11-12T22:00:34.223Z","updated_at":"2025-11-17T16:01:10.875Z","avatar_url":"https://github.com/songron.png","language":"CSS","readme":"WeBlog\n======\n\nA simple blog system based on [Flask](http://flask.pocoo.org/)\n\n其他网站推荐 Recommendations\n=====\n\n[木兰词](https://www.mulanci.org/)：中文歌词网站\n\n[初心阅读](https://www.bemind.site/)： 中文短篇阅读推荐\n\n[Vinyl World](https://www.vinylworld.org/)： 关于黑胶唱片、唱片店的爱好者网站\n\n\nQuick Start\n-----------\n\n````\n$ git clone https://github.com/ghostrong/weblog.git\n$ cd weblog\n$ pip install -r requirements.txt\n$ python run.py\n````\n\nNow, visit `http://127.0.0.1:8888` in a browser.\n\nRequirements\n------------\n\n#### For the server-side\n\n* Flask\n* Flask-SQLAlchemy\n* itsdangerous\n* Jinja2\n* Markdown\n* MarkupSafe\n* SQLAlchemy\n* Werkzeug\n\n#### For the cline-side (for publishing articles automatically)\n\n* requests\n* lxml\n* PyYAML\n* Markdown\n\n\nWriting blogs\n-------------\n\nYou should write articles in [markdown](http://daringfireball.net/projects/markdown/), and provide the meta information such as title, tags in [YAML](http://yaml.org/). You should put the meta data in the header lines of the markdown file. Here is an [example](https://raw.githubusercontent.com/ghostrong/weblog/master/example.md).\n\n#### Meta Data\n\n* **title**\n\n  You must give the title the the blog. e.g.,\n\n  ````\n  title: The Zen of Python\n  ````\n\n* **summary** (optional)\n\n  It's the abstract of the article. If you ignore it, the publish helper will generate the\n  summary snippet from the body automatically. e.g.,\n\n  ````\n  summary:\n    Long time Pythoneer Tim Peters succinctly channels the BDFL's\n    guiding principles for Python's design into 20 aphorisms, only 19\n    of which have been written down.\n  ````\n\n* **pub_time** (optional)\n\n  You can define the publish datetime manually. Or, the system will assign the current\n  datetime. The default format is \"%Y-%m-%d %H:%M:%S\" (such as \"2015-06-06 12:40:10\").\n  You could define the time string format by the value of *TIME_FORMAT* in\n  [config.py](config.py),\n  and you should conform to the\n  [format codes](https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior). e.g.,\n\n  ````\n  pub_time: 2015-06-06 12:40:10\n  ````\n\n* **tags** (optional)\n\n  It's useful to assign tags to an article. The value type should be list in YAML. e.g.,\n\n  ````\n  tags:\n    - python\n    - programming\n  ````\n\n#### The boundry of meta\n\nThe meta data should be located between '---' and '...'.\nThe following is an example of meta infomration:\n\n````\n---\ntitle: The Zen of Python\nsummary:\n  Long time Pythoneer Tim Peters succinctly channels the BDFL's\n  guiding principles for Python's design into 20 aphorisms, only 19\n  of which have been written down.\ntags:\n  - python\n  - programming\n...\n\nYou should write the body content from here...\n````\n\n\nPublishing blogs\n----------------\n\nWe provide a simple script to make the publishing work easy. Run `publish.py` to check the help message.\n\n````\n$ python publish\n\nusage: publish.py [-h] [-p PATH] [-a API] [-t TOKEN]\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -p PATH, --path PATH  markdown file path/url\n  -a API, --api API     api address\n  -t TOKEN, --token TOKEN\n                        access token\n````\n\nYou should provide the markdown file(either file-path or raw-url), the target api, and the access token. In this blog system, the publish url is `/publish`. The access token is the value of *TOKEN* in [config.py](config.py). \n**Anyone who know the token could publish articles to your blog system, so keep it secret!!**\n\nAfter starting the web server locally, you can publish an article like this:\n\n````\n$ python publish.py -a http://127.0.0.1:8888/publish -p example.md\n````\n\n\nFeatures\n--------\n* Writing blogs in Markdown and YAML\n* Browsing blogs by PAGE or TAG\n* Neat templates :-)\n* Search (TBD)\n\n\nTODO\n----\n* Keyword-based Search\n","funding_links":[],"categories":["Uncategorized"],"sub_categories":["Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsongron%2Fweblog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsongron%2Fweblog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsongron%2Fweblog/lists"}