Github近期上線一個新的功能,就是你在本身帳號下建立一個和本身用戶名同名的倉庫,並在倉庫下建立一個README.md文件,這個文件就會被展現在你的Github我的主頁。源於markdown的強大描述能力,你能夠在你的Github首頁展現各類各樣的信息,甚至有人直接將本身我的簡歷掛上面,極大豐富了Github的可玩性。
好比個人Github帳號是xindoo ,我直接建個xindoo代碼庫,而後寫個README.md文件介紹本身,最終展現效果如上圖,你們也能夠直接到我Github主頁查看。不過我我的設計的就比較簡陋了,但依賴於Markdown的能力,你能夠充分發揮本身主觀能動性,在README嵌入更多好玩的東西,好比給你看下Github前端小姐姐的主頁,對比之下我直男的身份算是藏不住了。
不過如何製做一個好看的我的主頁不是今天的主要內容,我主要是想教你們如何製做一個動態更新的主頁。好比我本身的主頁有一欄是我最新博文列表,我每寫一篇新博文都要手動更新一次README.md? 固然不,個人主頁是會自動按期更新上去的,怎麼作到的??? html
思路很簡單,首頁動態更新的本質其實就是更新README.md文件,先問一個問題 Readme.md必定要手寫嗎? 用程序生成很差嗎!!只要有個定時任務能自動抓取我博客首頁的內容,而後更新README.md並push到github上就行,本身手頭有服務器的人可能立馬想到寫一個crontab定時任務就能搞定,沒服務器也不急,你接着日後看。 前端
稍微有點編碼水平的人用程序生成一個README.md並不難,拿個人主頁來講吧,稍微有點難度的就是如何抓取我最新的博客。 其實本質上就是個簡易的爬蟲,CSDN目前並無反扒機制,因此實現難度並不大,代碼以下,我用了urllib3抓取html源碼,並用了etree的xpath解析出了博客標題和地址。python
# -*- coding: utf-8 -*- import urllib3 from lxml import etree import html import re blogUrl = 'https://xindoo.blog.csdn.net/' headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'} def addIntro(f): txt = ''' 9年技術博主,CSDN認證博客專家,新晉視頻up主 曾在阿里作過2年運維+1年開發,現爲某廠Java後端開發工程師,擁有豐富的 挖坑 踩坑 填坑 背鍋經驗 🐶 專一於Java,對操做系統、網絡、編譯原理也有涉獵,目前正在寫一門簡易的腳本語言 ''' f.write(txt) def addProjectInfo(f): txt =''' ### 開源項目 - [eng-practices-cn](https://github.com/xindoo/eng-practices-cn)谷歌工程實踐中文版 - [regex](https://github.com/xindoo/regex)Java實現的正則引擎表達式 - [redis](https://github.com/xindoo/redis) Redis中文註解版 - [slowjson](https://github.com/xindoo/slowjson) 用antlr實現的json解析器 - [leetcode](https://github.com/xindoo/leetcode) 個人Leetcode題解 [查看更多](https://github.com/xindoo/) ''' f.write(txt) def addBlogInfo(f): http = urllib3.PoolManager(num_pools=5, headers = headers) resp = http.request('GET', blogUrl) resp_tree = etree.HTML(resp.data.decode("utf-8")) html_data = resp_tree.xpath(".//div[@class='article-item-box csdn-tracking-statistics']/h4") f.write("\n### 個人博客\n") cnt = 0 for i in html_data: if cnt >= 5: break title = i.xpath('./a/text()')[1].strip() url = i.xpath('./a/@href')[0] item = '- [%s](%s)\n' % (title, url) f.write(item) cnt = cnt + 1 f.write('\n[查看更多](https://xindoo.blog.csdn.net/)\n') f = open('README.md', 'w+') addIntro(f) f.write('<table><tr>\n') f.write('<td valign="top" width="50%">\n') addProjectInfo(f) f.write('\n</td>\n') f.write('<td valign="top" width="50%">\n') addBlogInfo(f) f.write('\n</td>\n') f.write('</tr></table>\n') f.close
有了上面代碼,你只須要在你服務器設置個crontab,執行這段python代碼,而後git commit -a"update"
git push
就能夠擁有我和同款的Github首頁了。 git
你沒有本身的服務器也不要緊,Github給你免費的服務器讓你用,這就是Github以前推出的Actions功能,我理解它的本質就是Github給你提供了免費的容器,你能夠在容器裏執行某些workflow,固然也能夠運行一些自定義的代碼,更多Actions的內容能夠參考下阮一峯老師的GitHub Actions 入門教程,固然你也能夠直接看Actions的官方文檔。 github
爲了實現無服務器的自動更新,咱們只須要讓上面這段python運行在github Actions之上就能夠了,你只須要在你代碼倉庫 ->Actions -> 新建Workflow,github會自動幫你在你倉庫下面建立 .github/workflows/${FILENAME}.yml 文件,你只須要按格式要求修改書寫文件便可,具體書寫方式參考上述文檔,這裏再也不展開。
最後給你們看下個人workflow文件,你也能夠直接在我github倉庫查看該文件xindoo/.github/workflows/build.ymlredis
# This is a basic workflow to help you get started with Actions name: build readme # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the master branch on: # 觸發時機 push: branches: [ master ] # master有更新 schedule: - cron: '0 */6 * * *' # 每6小時運行一次 # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "build" build: # The type of runner that the job will run on runs-on: ubuntu-latest # 使用最新版ubuntu鏡像 # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 - name: Setup Python # 安裝python環境 uses: actions/setup-python@v2.1.1 - name: Install Python dependencies # 安裝python爬蟲依賴包 run: python -m pip install urllib3 lxml - name: Run python # 生成新的README.md文件 run: python generateReadme.py - name: Record time run: echo `date` > date.log - name: Commit and push if changed # 將README.md更新到倉庫 run: | git diff git config --global user.email "xindoo@zxs.io" git config --global user.name "zxs" git add -A git commit -m "Updated Readme" || exit git push