今天最初我想叨叨几句,我个人最近的感受。在这个信息爆炸,互联网的时代里。我的周遭总是充满者着各种让人能产生焦虑的信息,
我不知道有没有小伙伴和我相同,看到各种三头六臂、游戏人生的大侠,垂} ? , I R l z , a头看看自己当时的境况和日子,静静的叹6 : F = h K J了口气。

我很长一段时刻都处于被信息轰炸的焦虑H s L m中,感觉自己没有什么值得I Y 6 H称赞的成就,自己再尽力也追赶不上。就像那种要做的事情太多,无L C s x从下手,干脆就随他去了,
可是什么都不做导致要做的事情越来越多,从而会愈加焦虑。这样的状态持续 2 个月,偶然的机会下我Z v 2 U # & %发现然了一个缓解这种压力的办法——读书。

你的问题首要在于读书不多而想得太多。——杨绛

技术的书本有些啃不下去了,我就去看了《飞鸟集》如同真的平{ % R }静了一些。减少了获! # ) w = G t取各种信息的途径,从书里看看智者眼睛里的世界。

When we rejoice in( q ] k f ~ our fullness, then we can part with our fruits with joy.

当我们从Z _ K U f L k _ i寻求充分中找到高兴时,便能愉快地和以结果为} / , s $ +意图分手了。——《飞鸟集》

专注的做自己眼下、手上的事情,投入名贵的时刻,让时刻把普通的事情变得不普通。我觉得高兴总来的很慢,但它永远不会缺席。

作者:HelloGi[ m NtHub-削微寒

一、介绍

好了,以上便是我的心路历程和一些蠢笨的经历。下面开端我们的正题吧:

项目q t k .地址:https://github.com/matryer/bitbar

今天引荐一个 GitHub 上开源的 Mac OSX Menu Bar 工具~ i c 9 P . L I h:BitBar,它能够载入各种类型的脚本输出信息。比方在 Menu Bar 上监控 GitHub 上的 Star 数量,v I K n展现的信息完全取决于你写的脚本。
o A B V Y 5 0 R有多香,容我渐渐道来。先看一张作用图:

二、上手

  1. 下载地址:https://github.com/matryer/bo D | l witbar/R z t C i 4 7 breleases/tag/v1.9.2d ^ W x 5 w

  2. 解压

  3. 下载 plugins:https://gR ~ (etbitbar.com/plugins/Bite D P L C s cBar

  4. 上面的插件是展现 BitBar 版本,作用展现:

这样整个程序就跑起来了,假如非程序员的话能够直接在第 3 步的官网上挑选插件。下面我将写一个 Python 脚本用于获取 GitHub 的 star 数量,能够方便动态关注我的 HelloGitHub 项目 star 信息和添加。

三、编写脚本

因为我比较擅长 Py/ 4 V U 2 U rthon,所以我选用了 Python 脚本进行开发,当然 BitBar 支撑很多言语比方:Ruby、JS、Go、Swift 等等。

先不考虑怎么展现到 Menu BarV n @ E { ? 部分,先解决怎么获取 GitHub 上的项目 star。为了让整个过程简略不考虑环境,以下脚本将选用 Pyth. c ( ~ 5 + ]on 的规范库。

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/reposc V 8 8 8 * p/用户名/项目名称
  • 获取主页的信息流:https://api.github.com/usersa L z G r D t/用户名/received_events

比方 HelloGitHub 项目:

  • https://api.github.com/reposS { p } ~/521xueweihan/HelloGitHub
  • https://api.giL { e . ? 3 othub.com/users/521xueweihan/received_events] L – B Q . b D w

经过命令行先验证下 token:curl -H "Authorb E K Q o P ; ization: token 你恳求的 token" 恳求的接口

curl -H "Authorization: token xxxx" https://api.github.com` * 5 F/repos/521xueweihan/HelloGitHub
{
  "id":# ] j 580xxx,
  "node_id": 1 _ , b y # 3 U M"MDEwOlJlcG9xxxxxODAzOA==",
  "name": "HelloGitHub",
  "full_name": "521xueweihan/HelloGitHub",
  "private": falG F : c ? $ { Pse,
  ...
  "temp_clone_token": "",
  "allow_squash_m# # X x E = j Perge": true,
  "allow_merge_commit": true,
  "allow_rebase_merge": true,
  "delete_branch_on_merge": false,
  "network_countN v # f 1 z": 47* y ? F52,
  "subscribers_count": 2085c j { 0 O p
}

3.3 开端编码

上面接口和 token 都预备好h R 4 3 W了,下面便是编写脚本了。

#!/usr$ { 8 _ a u D 8 7/bin/env pi W 8 ] = z 5 dython3
# -*- 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" #d 5 @ 6 项目名
USk p , C A vER_NAME = "521xueweihan" #N s u j P e D 7 4 用户名
TO0 u t n 4 = kKEN = "xxx" # TOKEN

def fetch_data(url):
    """
    恳求、解析 GitHub; A e k D API 函数
    """
    headers = {
        'Accept': h h c e ] #'application/jso( h Yn, 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)
    returb x  M : ] yn info_dict

def get_star_count():
    "f O F 8 G =""
    获取 star 总数
    """
    url = "https://api.github.com/repos/{}/{}".format(USER_NAME, REPO_NAME)
    repo_info_dict = fetch_data(url)
    star_count = reB J y 5 } W 2po_info_dict["stargazers_count"]
    return star_u { i J c c o p @count

def get_today_star():
    """
    获取今天 star 添加数
    """
    todaA = T }y_star_count = 0
    page = 1
    # 是否是今天事情的标识符
    is_today_event = True
    # 今天事情用来判断事情事情
    today = datetime.datetime.now().date()
    url = "https://api.github.com/users/{}/received_events".format(USER_W w V P * P , 7 &NAME)
    url += "?page={}&at Z 5 Bmp;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 = d& T i g Ratetim2 . V p x M p Y Ue.date. | @time.strptime(
                create_at_str, '%Y-%m-%dT%H: 5 N%M:%SZ')
            # 转化成北京时刻的日期
            create_at_date_obj = (create_at_obj + datetimeW - q $  % j k.timedelta(hours=8)).date()
            # 判断是否是今天的事情
            if create_at_date_obj < today:
                # 结束获取
                is_toda0 ` P + 7 E J r iy_event = False
                break
            # 过滤指定项意图 star 事情
            if event_info["type"]G ( + r == "WatchEvent" 
               and event_info.get("payload", {D r @ J z 0}).get("ac2 ( E % [ tion") == "started" 
               and event_info.get("repo", {}).get("name"1 . b t _ S) == 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_f 3 i p . B ( %count = get_today_star()
        print(", 9 U 7 = X Q G{} 今天添加: {}✨合计:{}k".% $ /format(
            REPO_N~ 0 W m n X FAME, today_star_ _ Mcount, int(star_count/1000)))
    except Exception as e:
        prin[ h $ ) s jt("ERROR:{}".format(e))

脚本很简略g = + 6 a,一个恳求、解析 GitHub API 的方^ H S e E ; 6法,然后是获取项意图总 star 数和今天 star 添加。整个脚本能够直接拿来用,把最上面的几个常量参数写上自己的信息和 token 就行了,运行结果如下:

HelloGitHub 今天添加: 62✨合计:32k

3.4 经过 BitBar 运行

  1. 首先创立一个目录,然后把写好X C f : h a 4 M ^的脚本放进去,脚本的命名规矩:名称.运行距离.文件后缀,比方:GitH_ z xub.30m.py 每半个小时履行一次。

  2. 然后然后给脚本添加履行权限,命令:cz d qhmod +x 文件名(重要)

  3. 最后点击 BitBar 的 Choose Plugin Folder,挑选脚本所在的目录。1 d )

  4. Refresh all 手动刷新? 4 4 3 ( g一下,最终作用如下:

四、结尾

因为时刻匆促,我只写了一个展现 GitHub 项目 star 的简略示例。有爱好的小伙伴能够自己着手编写、定制自己关怀信息的数据脚本。
好了,今天的项目你还满意吗?还想看那些项目欢迎留言告诉我~

关注公众号参加沟通