如何製做一個能夠自動更新的Github我的主頁

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
相關文章
相關標籤/搜索