開源利器分享:BitBar 坐看今天你的項目漲了多少 star


今天開頭我想叨叨幾句,我個人最近的感受。在這個信息爆炸,互聯網的時代里。我的周遭總是充斥者着各種讓人能產生焦慮的信息,
我不知道有沒有小伙伴和我一樣,看到各種神通廣大、游戲人生的大俠,低頭看看自己當前的處境和生活,默默的嘆了口氣。

我很長一段時間都處於被信息轟炸的焦慮中,感覺自己沒有什么值得稱贊的成就,自己再努力也追趕不上。就像那種要做的事情太多,無從下手,索性就隨他去了,
但是什么都不做導致要做的事情越來越多,從而會更加焦慮。這樣的狀態持續 2 個月,偶然的機會下我發現然了一個緩解這種壓力的辦法——讀書。

你的問題主要在於讀書不多而想得太多。——楊絳

技術的書籍有些啃不下去了,我就去看了《飛鳥集》好像真的平靜了一些。減少了獲取各種信息的途徑,從書里看看智者眼睛里的世界。

When we rejoice in our fullness, then we can part with our fruits with joy.

當我們從追求充實中找到快樂時,便能愉快地和以結果為目的分手了。——《飛鳥集》

專注的做自己眼下、手上的事情,投入寶貴的時間,讓時間把平凡的事情變得不平凡。我覺得快樂總來的很慢,但它永遠不會缺席。

作者:HelloGitHub-削微寒

一、介紹

好了,以上就是我的心路歷程和一些笨拙的經驗。下面開始我們的正題吧:

項目地址:

https://github.com/matryer/bitbar

今天推薦一個 GitHub 上開源的 Mac OSX Menu Bar 工具:BitBar,它可以載入各種類型的腳本輸出信息。比如在 Menu Bar 上監控 GitHub 上的 Star 數量,展示的信息完全取決於你寫的腳本。
它有多香,容我慢慢道來。先看一張效果圖:

二、上手

  1. 下載地址:https://github.com/matryer/bitbar/releases/tag/v1.9.2

  2. 解壓

  3. 下載 plugins:https://getbitbar.com/plugins/BitBar

  4. 上面的插件是展示 BitBar 版本,效果展示:

這樣整個程序就跑起來了,如果非程序員的話可以直接在第 3 步的官網上選擇插件。下面我將寫一個 Python 腳本用於獲取 GitHub 的 star 數量,可以方便動態關注我的 HelloGitHub 項目 star 信息和增長。

三、編寫腳本

因為我比較擅長 Python,所以我采用了 Python 腳本進行開發,當然 BitBar 支持很多語言比如:Ruby、JS、Go、Swift 等等。

先不考慮如何展示到 Menu Bar 部分,先解決如何獲取 GitHub 上的項目 star。為了讓整個過程簡單不考慮環境,以下腳本將采用 Python 的標准庫。

3.1 申請 GitHub token

想要通過 GitHub 接口獲取數據必須要有一個 token,所以需要先在自己的 GitHub 上申請一個 token( https://github.com/settings/tokens/new ),什么額外的權限都不用勾選,然后點擊最下面的 Generate token

然后把生成的 token 復制出來,保存好后面要用到的!

3.2 GitHub API

獲取數據的方式采用 GitHub API,文檔地址:https://developer.github.com/v3/

比如 HelloGitHub 項目:

通過命令行先驗證下 token:curl -H "Authorization: token 你申請的 token" 請求的接口

curl -H "Authorization: token xxxx" https://api.github.com/repos/521xueweihan/HelloGitHub
{
  "id": 580xxx,
  "node_id": "MDEwOlJlcG9xxxxxODAzOA==",
  "name": "HelloGitHub",
  "full_name": "521xueweihan/HelloGitHub",
  "private": false,
  ...
  "temp_clone_token": "",
  "allow_squash_merge": true,
  "allow_merge_commit": true,
  "allow_rebase_merge": true,
  "delete_branch_on_merge": false,
  "network_count": 4752,
  "subscribers_count": 2085
}

3.3 開始編碼

上面接口和 token 都准備好了,下面就是編寫腳本了。

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#
#   Author  :   XueWeiHan
#   E-mail  :   595666367@qq.com
#   Date    :   2020-07-10 15:18
#   Desc    :   BitBar GitHub Python plugin
import json
import datetime
from urllib import request

REPO_NAME = "HelloGitHub" # 項目名
USER_NAME = "521xueweihan" # 用戶名
TOKEN = "xxx" # TOKEN

def fetch_data(url):
    """
    請求、解析 GitHub API 函數
    """
    headers = {
        'Accept': 'application/json, text/plain, */*',
        'Authorization': 'token ' + TOKEN,
    }
    req = request.Request(url, headers=headers)  # GET方法
    response = request.urlopen(req).read()
    data = response.decode('utf-8')
    # 解析數據
    info_dict = json.loads(data)
    return info_dict

def get_star_count():
    """
    獲取 star 總數
    """
    url = "https://api.github.com/repos/{}/{}".format(USER_NAME, REPO_NAME)
    repo_info_dict = fetch_data(url)
    star_count = repo_info_dict["stargazers_count"]
    return star_count

def get_today_star():
    """
    獲取今日 star 增長數
    """
    today_star_count = 0
    page = 1
    # 是否是今天事件的標識符
    is_today_event = True
    # 今日事件用來判斷事件事件
    today = datetime.datetime.now().date()
    url = "https://api.github.com/users/{}/received_events".format(USER_NAME)
    url += "?page={}&per_page=200"
    while is_today_event:
        event_info_list = fetch_data(url.format(page))
        for event_info in event_info_list:
            create_at_str = event_info["created_at"]
            create_at_obj = datetime.datetime.strptime(
                create_at_str, '%Y-%m-%dT%H:%M:%SZ')
            # 轉化成北京時間的日期
            create_at_date_obj = (create_at_obj + datetime.timedelta(hours=8)).date()
            # 判斷是否是今天的事件
            if create_at_date_obj < today:
                # 結束獲取
                is_today_event = False
                break
            # 過濾指定項目的 star 事件
            if event_info["type"] == "WatchEvent" \
               and event_info.get("payload", {}).get("action") == "started" \
               and event_info.get("repo", {}).get("name") == USER_NAME + "/" + REPO_NAME:
                today_star_count += 1
        page += 1
    return today_star_count

if __name__ == '__main__':
    try:
        star_count = get_star_count()
        today_star_count = get_today_star()
        print("{} 今日增長: {}✨共計:{}k🌟".format(
            REPO_NAME, today_star_count, int(star_count/1000)))
    except Exception as e:
        print("ERROR:{}".format(e))

腳本很簡單,一個請求、解析 GitHub API 的方法,然后是獲取項目的總 star 數和今日 star 增長。整個腳本可以直接拿來用,把最上面的幾個常量參數寫上自己的信息和 token 就行了,運行結果如下:

HelloGitHub 今日增長: 62✨共計:32k🌟

3.4 通過 BitBar 運行

  1. 首先創建一個目錄,然后把寫好的腳本放進去,腳本的命名規則:名稱.運行間隔.文件后綴,比如:GitHub.30m.py 每半個小時執行一次。

  2. 然后然后給腳本增加執行權限,命令:chmod +x 文件名(重要)

  3. 最后點擊 BitBar 的 Choose Plugin Folder,選擇腳本所在的目錄。

  4. Refresh all 手動刷新一下,最終效果如下:

四、結尾

由於時間倉促,我只寫了一個展示 GitHub 項目 star 的簡單示例。有興趣的小伙伴可以自己動手編寫、定制自己關心信息的數據腳本。
好了,今天的項目你還滿意嗎?還想看那些項目歡迎留言告訴我~

HelloGitHub 交流群現已全面開放,添加微信號:HelloGitHub 為好友入群,可同前端、Java、Go 等各界大佬談笑風生、切磋技術~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM