开源利器分享:BitBar 坐看今天你的项目涨了多少 star
今天开头我想叨叨几句,我个人最近的感受。在这个信息爆炸,互联网的时代里。我的周遭总是充斥者着各种让人能产生焦虑的信息,
我不知道有没有小伙伴和我一样,看到各种神通广大、游戏人生的大侠,低头看看自己当前的处境和生活,默默的叹了口气。
我很长一段时间都处于被信息轰炸的焦虑中,感觉自己没有什么值得称赞的成就,自己再努力也追赶不上。就像那种要做的事情太多,无从下手,索性就随他去了,
但是什么都不做导致要做的事情越来越多,从而会更加焦虑。这样的状态持续 2 个月,偶然的机会下我发现然了一个缓解这种压力的办法——读书。
你的问题主要在于读书不多而想得太多。——杨绛
技术的书籍有些啃不下去了,我就去看了《飞鸟集》好像真的平静了一些。减少了获取各种信息的途径,从书里看看智者眼睛里的世界。
When we rejoice in our fullness, then we can part with our fruits with joy.
当我们从追求充实中找到快乐时,便能愉快地和以结果为目的分手了。——《飞鸟集》
专注的做自己眼下、手上的事情,投入宝贵的时间,让时间把平凡的事情变得不平凡。我觉得快乐总来的很慢,但它永远不会缺席。
作者:HelloGitHub-卤蛋
一、介绍
好了,以上就是我的心路历程和一些笨拙的经验。下面开始我们的正题吧:
项目地址:
今天推荐一个 GitHub 上开源的 Mac OSX Menu Bar 工具:BitBar,它可以载入各种类型的脚本输出信息。比如在 Menu Bar 上监控 GitHub 上的 Star 数量,展示的信息完全取决于你写的脚本。
它有多香,容我慢慢道来。先看一张效果图:
二、上手
解压
下载 plugins:https://getbitbar.com/plugins/BitBar
上面的插件是展示 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/ 。
- 获取项目信息的接口: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 运行
首先创建一个目录,然后把写好的脚本放进去,脚本的命名规则:
名称.运行间隔.文件后缀
,比如:GitHub.30m.py 每半个小时执行一次。然后然后给脚本增加执行权限,命令:
chmod +x 文件名
。(重要)最后点击 BitBar 的
Choose Plugin Folder
,选择脚本所在的目录。
Refresh all
手动刷新一下,最终效果如下:
四、结尾
由于时间仓促,我只写了一个展示 GitHub 项目 star 的简单示例。有兴趣的小伙伴可以自己动手编写、定制自己关心信息的数据脚本。
好了,今天的项目你还满意吗?还想看那些项目欢迎留言告诉我~
HelloGitHub 交流群现已全面开放,添加微信号:HelloGitHub 为好友入群,可同前端、Java、Go 等各界大佬谈笑风生、切磋技术~
开源利器分享:BitBar 坐看今天你的项目涨了多少 star的更多相关文章
- 吉特仓储管系统(开源WMS)--分享两月如何做到10W+的项目
在此文开篇之处先特别申明,此文在有些人的眼中会有广告的嫌疑,但是本人不想将其作为一个广告宣传的文章,在此提到软件内容部分请大家予以谅解和包含,作为时间不算短的程序员给大家分享一些自己开发吉特仓储管理软 ...
- 不同格式图片相互转换的开源库分享(使用CxImage,并有VC6的配置过程)
不同格式图片相互转换的开源库分享 一.背景 笔者在项目的开发中,需要调用windows下的COM接口SetIconLocation来实现桌面快捷方式.而我们项目中给定的图片格式为png格式,SetIc ...
- 研究僧丨Window实用利器分享
本人CS在读小硕,平时工作环境主要是win10加ubuntu,下面推荐一些我用过且觉得不错的应用. PS:我列举的应用基本被下面的网站收录,大家不妨去里面淘淘看. Windows 绝妙项目 Aweso ...
- 感知开源的力量-APICloud Studio开源技术分享会
2014.9.15 中国领先的“云端一体”移动应用云服务提供商APICloud正式发布2015.9.15,APICloud上线一周年,迎来第一个生日这一天,APICloud 举办APICloud St ...
- 条形码/二维码之开源利器ZXing图文介绍(转)
继前面介绍的一个日本开源软件(该软件只能实现QRCode)原文: Java实现二维码QRCode的编码和解码(http://sjsky.iteye.com/blog/1136934 ),今发现又一优秀 ...
- Java编程学习知识点分享 入门必看
Java编程学习知识点分享 入门必看 阿尔法颜色组成(alpha color component):颜色组成用来描述颜色的透明度或不透明度.阿尔法组成越高,颜色越不透明. API:应用编程接口.针对软 ...
- android 集成友盟分享之后,想自定义分享面板的看过来
第一种情况 首先上传一张默认的友盟分享的效果图 看起来还不错,但是总是有这样那样的原因,需要我们对默认效果做出一些改变. 第二种情况 如果你想做出下面的效果: 或者这样的效果 : 总之上面的效果总是在 ...
- 分享一个大型进销存供应链项目(多层架构、分布式WCF多服务器部署、微软企业库架构)
项目源码下载: WWW.DI81.COM 分享一个大型进销存供应链项目(多层架构.分布式WCF多服务器部署.微软企业库架构) 这是一个比较大型的项目,准备开源了.支持N家门店同时操作.远程WCF+企 ...
- 使用ShareSDK实现第三方授权登录、分享以及获取用户资料效果,项目中包含:源码+效果图+项目结构图
[Android应用开发详解]第01期:第三方授权认证(一)实现第三方授权登录.分享以及获取用户资料 由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折, ...
随机推荐
- Asp.Net Mvc 控制器详解
理解控制器 控制器的角色 (1)中转作用:控制器通过前面的学习大家应该知道它是一个承上启下的作用,根据用户输入,执行响应行为(动 作方法),同时在行为中调用模型的业务逻辑,返回给用户结果(视图). ( ...
- VScode快捷键集锦(持续更新)
本文的快捷键是根据VScode for mac来的,Windows和Linux用户可能需要些许改动. 注释:cmd + / 注释当前选中的行,或者注释掉选中的行,再按一次反注释.还可以在按cmd + ...
- vc6.0的项目如何在整个项目中查询内容呢?试试vs2015
vc6.0的项目如何在整个项目中查询内容呢?试试vs2015 https://blog.csdn.net/txwtech/article/details/101308795
- Linux远程连接mongodb
当没有客户端工具,eg:robo3T时,如何修改mongodb里的数据呢? 1.连接mongodb服务器mongo 1.1.1.1:1688 2.查看数据库列表show dbs 3.选择使用log库u ...
- spring Gateway 和注册中心整合环境搭建1
本博客主要是搭建一个gateway的demo,记录了自己踩过的各种坑项目目录 : 注册中心如下 网关后端访问的应用 网关 我们首先来看注册中心的代码 pom.xml <?xml version= ...
- JavaWeb网上图书商城完整项目--验证码
1.首先需要集成下面的jar 2.在web.xml配置验证码的servlet <?xml version="1.0" encoding="UTF-8"?& ...
- SQL注入入门
这几天做了不少SQL注入题,对SQL注入有点体会,所以写写自己的学习历程与体会. 什么是SQL注入 SQL注入就是指web程序对用户输入的数据的合法性没有进行判断,由前端传入的参数带着攻击者控制的非法 ...
- 弹性盒模型中flex-grow 和flex的区别
在flex弹性盒模型体系中,flex-grow和flex都有对子元素进行放大的作用,但是这两个属性在放大时的计算方法不同,在使用时候要注意,使用正确的放大属性,从而达到自己想要的效果. 先来看下两个属 ...
- CodeForces 3 D.Least Cost Bracket Sequence【贪心+优先队列】
Description 给出一个括号序列,中间有一些问号,将第i个问号换成左括号代价是a[i],换成右括号代价是b[i],问如果用最少的代价将这个括号序列变成一个合法的括号序列 Input 第一行一个 ...
- 断路器Hystrix(Ribbon)
微服务架构中,根据业务划分成若干个服务,各单元应用间通过服务注册与订阅的方式互相依赖,依赖通过远程调用的方式执行,该方式难以避免因网络或自身原因而出现故障或者延迟,从而并不能保证服务的100%可用,此 ...