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

今天開頭我想叨叨幾句,我我的最近的感覺。在這個信息爆炸,互聯網的時代裏。個人周遭老是充斥者着各類讓人能產生焦慮的信息, 我不知道有沒有小夥伴和我同樣,看到各類神通廣大、遊戲人生的大俠,低頭看看本身當前的處境和生活,默默的嘆了口氣。node

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

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

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

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

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

專一的作本身眼下、手上的事情,投入寶貴的時間,讓時間把平凡的事情變得不平凡。我以爲快樂總來的很慢,但它永遠不會缺席。json

做者:HelloGitHub-削微寒api

1、介紹

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

項目地址:https://github.com/matryer/bitbarcurl

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

2、上手

  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 信息和增加。

3、編寫腳本

由於我比較擅長 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/ 。

  • 獲取項目信息的接口:https://api.github.com/repos/用戶名/項目名稱
  • 獲取首頁的信息流:https://api.github.com/users/用戶名/received_events

好比 HelloGitHub 項目:

  • https://api.github.com/repos/521xueweihan/HelloGitHub
  • https://api.github.com/users/521xueweihan/received_events

經過命令行先驗證下 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 手動刷新一下,最終效果以下:

4、結尾

因爲時間倉促,我只寫了一個展現 GitHub 項目 star 的簡單示例。有興趣的小夥伴能夠本身動手編寫、定製本身關心信息的數據腳本。 好了,今天的項目你還滿意嗎?還想看那些項目歡迎留言告訴我~

關注公衆號加入交流羣

相關文章
相關標籤/搜索