GitHub没有实时通知怎么办?当然是自己上手写一个啊!
![]()
此外,我已经收到了12253封电子邮件通知。。。。。。。。。。这件事好像不是那么酷了。
![]()
看,我不是在开玩笑!
作为一个专业的开发人员,这尼玛的就忍不了啊,必须自己上手解决好吗!我决定建立一个Chrome扩展程序,只要有人与我的GitHub存储库进行交互,即可实时发送通知。这是Google Chrome商店中的GitHub通知程序。你也可以在这里找到更多的信息。
![]()
实时Chrome通知
当有人执行以下任何操作时,你会看到上述通知之一:
- 在问题上创建问题或意见
- 创建拉请求
- 为你的repository点forks
- 为你的repository 点stars
- 将代码推送到你的存储库
如何实现
最初,我以为建立起来真的很简单。在我的印象中这简直就是小儿科嘛,毕竟姐可是有建立Chrome apps的经验哟。
但是一如往常,魔鬼在细节上。这里是工具,框架,以及我用来获取和运行的其他东西:
- GitHub应用程式
- Express和NodeJS
- Firebase
- Google Cloud Messaging
- Chrome扩展程序
GitHub Apps
要实时向用户发送通知,只要有任何用户交互,我们就需要使用webhook来ping通。有效载荷将包含信息,例如与你的存储库进行交互的人员,采取的操作(是star还是fork)以及存储库的名称。
为此,请注册一个GitHub应用程序。它将允许你选择你的GitHub应用程序将检测哪些webhook事件。
![]()
GitHub应用程式的权限
填写你的webhook URL,稍后我将介绍。
进一步阅读:GitHub应用程序
Express和NodeJS
在定义webhook触发器的事件之后,你需要一个服务器来接收和处理有效负载。由于独立的Chrome扩展程序无法启动服务器,因此我们需要为此创建一个单独的项目。
在Express和NodeJS项目中创建一个POST端点,它将处理webhook。
app.post('/ watch',function(req,res,next){
.....
});
对于webhook,我喜欢使用ngrok - 一个免费的工具(拥有30个用户的上限),它创建一个可公开访问的URL来配置webhook服务。
一旦你已经安装了ngrok,你可以用它为应用程序选择运行的通道,比如,端口3000。这将和打字一样简单
ngrok http 3000
ngrok然后产生两种一个URL http和https 。您可以使用它们临时填写GitHub应用程序中的webhook URL,直到您托管它们。
进一步阅读:ngrok
Chrome扩展程序
接下来,为不的Chrome扩展程序创建一个单独的项目。Chrome扩展本身很容易构建。首先,创建一个manifest.json包含扩展名,描述,版本号等属性的文件。
我们还需要一个popup.html文件,当有人下载并点击你的Chrome扩展程序时,该文件显示弹出式窗口。弹出窗口提示用户填写他们的GitHub用户名,如下所示:
![]()
popup.html
保存你的GitHub用户名后,将你的GitHub用户名连接到将收到通知的计算机。
我们同时使用Google Cloud Messaging和Firebase。
进一步阅读:入门:构建Chrome扩展
Google Cloud Messaging和Firebase
Google Cloud Messaging(GCM)是一项移动通知服务,可让开发人员在服务器和客户端应用之间发送消息。
Firebase是由Google开发的实时云端托管数据库。我选择了Firebase,因为它很容易设置。
在Chrome扩展程序中,创建一个popup.js文件。这将使用GCM和Firebase。将你的用户名保存在弹出窗口后,使用GCM生成一个注册ID来标识你的浏览器。将registrationID作为ID来区分你的计算机与其他用户。
注册ID和GitHub用户名将被保存为Firebase中的条目。
进一步阅读:Firebase和Google Cloud Messaging
这一切如何工作?
![]()
Github通知程序如何构建的总结图
总结上图,每当有人与GitHub存储库进行交互时,都会发生以下情况:
- 有效载荷将从GitHub Apps发送到Express和NodeJS服务器。
- 服务器接收有效载荷,并从有效载荷中提取GitHub用户名。
- 从GitHub用户名查询关联的registrationID的Firebase。
- Google Cloud Messaging用于根据注册ID将服务器的消息发送到Chrome扩展。
- Chrome扩展程序收到Google Cloud Messaging的邮件后,会创建一个Chrome通知并将其推送给用户。
然后当当当!这就可以收到GitHub的实时Chrome通知辣!
GitHub没有实时通知怎么办?当然是自己上手写一个啊!的更多相关文章
- 微信小程序客服消息实时通知之最佳实践
我们做微信小程序开发的都知道,只要在小程序页面中添加如下代码即可进入小程序的客服会话界面: <button open-type="contact" >联系我们</ ...
- 写一个程序,统计自己C语言共写了多少行代码,Github基本操作
前言 在上一篇博客中,本人提到了自己的文件操作可以说是几乎没用过.现在想想,这也算是只在OJ上做题的一个弊端吧.虽然通过OJ做题是一个学习代码好手段,但其他方面也要多多涉猎才好,而不是说OJ用不到文件 ...
- inotify-java linux系统监听文件发生变化,实时通知java程序
1 Overview 最近公司的一个任务需要实时监控文件系统中某个文件的内容变化.由于程序本身由Java编写,因此使用了inotify- java(http://code.google.com ...
- Sqlserver数据库 通过表触发器 实时通知应用程序
/* Sqlserver数据库开始相关服务 以下示例显示了如何查看 OLE Automation Procedures 的当前设置.0未启用 */ EXEC sp_configure 'show ad ...
- RxJava2-后台执行耗时操作,实时通知 UI 更新(一)
一.前言 接触RxJava2已经很久了,也看了网上的很多文章,发现基本都是在对RxJava的基本思想介绍之后,再去对各个操作符进行分析,但是看了之后感觉过了不久就忘了. 偶然的机会看到了开源项目 Rx ...
- github 关掉邮件通知
- 用python 10min手写一个简易的实时内存监控系统
简易的内存监控系统 本文需要有一定的python和前端基础,如果没基础的,请关注我后续的基础教程系列博客 文章github源地址,还可以看到具体的代码,喜欢请在原链接右上角加个star 腾讯视频链接 ...
- 自己写一个网页版的Markdown实时编辑器
这几天忙着使用Python+Django+sqlite 搭建自己的博客系统,但是单纯的使用H5的TextArea,简直太挫了有木有.所以,就想模仿一下人家内嵌到网页上的Markdown编辑器,从而让自 ...
- [转]用python 10min手写一个简易的实时内存监控系统
简易的内存监控系统 本文需要有一定的python和前端基础,如果没基础的,请关注我后续的基础教程系列博客 文章github源地址,还可以看到具体的代码,喜欢请在原链接右上角加个star 腾讯视频链接 ...
随机推荐
- Linux kernel AIO
http://blog.csdn.net/abcd1f2/article/details/47440087
- 【Android】开源项目汇总-备用
from://http://www.eoeandroid.com/home.php?mod=space&uid=765778&do=blog&id=47674 Android开 ...
- ibatis.net:第一天,什么是 mybatis.net ?
ibatis.net 是一个“数据映射框架”,它使得面向对应的应用程序非常的方面使用关系数据.ibatis.net 通过使用 xml 或 attribute 来解耦对象和SQL或存储过程.简单是 ib ...
- java swing MenuItem乱码处理
用java开发一个带有托盘图标的程序, 其它模块的中文显示都是正常的,就只有托盘中点击小图标时弹出的菜单中的中文是方框(中文方块) 解决: 1: 在你的具有main函数的类也即你应用运行的主类上点击右 ...
- ViewPager的简单用法+适配器+监听器的介绍
之前的actionbar+fragment文章中写过viewpager的简单用法,但因为是融合的文章,所以今天把viewpager提取出来写了.方便查询浏览~ 思路: 1.在布局文件中设置viewpa ...
- Asp.Net 拦截请求自定义处理
需求: 在Aps.Net 应用中,对于浏览器请求的部分url的地址自定义处理,不交给路由系统或页面. 解决方案: 在全局文件Global.asax中 ,提供Application_BeginReque ...
- HTML5 浏览器返回按钮/手机返回按钮事件监听
1.HTML5 History对象 支持使用pushState()方法修改地址栏地址,而不刷新页面. popstate事件 当history实体被改变时,popstate事件将会发生.调用pushS ...
- MD5加密算法中的加盐值 ,和彩虹表攻击 防止彩虹表撞库
一.什么是彩虹表? 彩虹表(Rainbow Tables)就是一个庞大的.针对各种可能的字母组合预先计算好的哈希值的集合,不一定是针对MD5算法的,各种算法的都有,有了它可以快速的破解各类密码.越是复 ...
- 不知道哪里alert undefined 用下面的语句是js报错.F12能提示报错的地方window.alert=function(aa){ if (typeof (aa)"undefined"){ throw "就是这";}};
不知道哪里alert undefined 用下面的语句是js报错.F12能提示报错的地方 var oldalert=window.alert; window.alert=function(aa){ i ...
- andengine的convertLocalCoordinatesToSceneCoordinates方法
使用Tile地图,看过andengine中的例子,都会发现例子中有这么一段话,以前版本的是convertLocalToSceneCoordinates方法. scene.registerUpdateH ...