使用代码将github仓库里某个issue同步到CSDN博客上

我是一个懒惰的程序员。我在github仓库里用issue的方式写了很多分享文章,想同步到CSDN上。但是我又不想一篇篇手动复制粘贴,因此想用代码来实现自动化。 例子:https://github.com/i042416/Kn... 这是我的一个issue: 我使用下面这些nodejs代码实现从github 仓库issue到CSDN博客的拷贝: var config = require("./mcConfig");var request = require('request');var querystring = require('querystring');function createPost(oPost) { var url = "https://mp.csdn.net/mdeditor/saveArticle"; var oBody = { title: oPost.title, markdowncontent: oPost.body, tags:"Fiori", categories:"Fiori", channel:"14", type:"original", articleedittype:"1", content: oPost.body };var formData = querystring.stringify(oBody);var contentLength = formData.length;var createPostOptions = { url: url, method: "POST", headers: { "content-type": "application/x-www-form-urlencoded", "Content-Length": contentLength, "origin" :"https://mp.csdn.net", "referer" :"https://mp.csdn.net/mdeditor", "User-Agent" :"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36", "cookie": config.cookie }, body: formData}; return new Promise(function(resolve,reject){ var requestC = request.defaults({jar: true}); console.log("Step1: create post via url: " url ); requestC(createPostOptions,function(error,response,body){ if(error){ reject(error); } console.log("response: " body); resolve(body); }); });}module.exports = createPost;var request = require('request');function getIssue(issueNumber) { var url = "https://api.github.com/repos/i042416/KnowlegeRepository/issues/" issueNumber; var getIssueOptions = { url: url, method: "GET", json:true, headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36" } }; return new Promise(function(resolve,reject){ var requestC = request.defaults({jar: true}); console.log("Step1: get issue detail via url: " url ); requestC(getIssueOptions,function(error,response,body){ if(error){ console.log("error occurred: " error); reject(error); } console.log("title:" body.title); console.log("body: " body.body); for( var i = 0; i < body.labels.length; i ){ console.log("label: " body.labels[i].name); } resolve(body); }); });}module.exports = getIssue;var readIssue = require("./readIssueMod");var createPost = require("./createPostMod");readIssue(2215).then(createPost).catch((error)=>{console.log("error: " error)});执行结果: ...

May 25, 2019 · 1 min · jiezi

一个简单的例子学会github-repository的webhook

github的webhook是个有用的功能,允许开发人员指定一个服务器的url。当开发者对github仓库施加操作,比如提交代码,创建issue时,github网站会自动向该url指定的服务器推送事件。借助webhook,我们可以实现很多自动化流程。比如部署一个应用在AWS上,本地提交代码后,github网站自动触发webhook,调用AWS上应用的逻辑,在AWS上将本地提交的最新代码用git pull抓取到AWS上并重新部署。 下面我们通过一个具体的例子来学习github webhook的用法。 新建一个github仓库,点击Settings链接: 在Payload url里指定一个应用的url,该url对应的应用监听github网站推送的事件。 Content Type指定成application/json便于我们在nodejs应用里解析payload。 创建后点Add webhook保存,github会发送一个json paload到这个url指定的应用上。 在Recent Deliveries里查看负载明细: 负载明细如下: 我们现在来做个实验,把webhook指定的url对应的应用设置一个断点,然后在github仓库里新建一个issue: 断点立即触发了。 从调试器里能观察到这个create issue事件的所有负载。 我部署在AWS上监听github webhook框架推送github repository发生变化的事件的应用源代码,可以从我的github上获取:https://github.com/i042416/we... 代码很短,我的同事Haytham写的: var http = require('http')var createHandler = require('github-webhook-handler')var handler = createHandler({ path: '/push', secret: 'dis-koi' }) function run_cmd(cmd, args, callback) { var spawn = require('child_process').spawn; var child = spawn(cmd, args); var resp = ""; child.stdout.on('data', function(buffer) { resp += buffer.toString(); }); child.stdout.on('end', function() { callback (resp) });}http.createServer(function (req, res) { handler(req, res, function (err) { res.statusCode = 404 res.end('no such location') })}).listen(8083) handler.on('error', function (err) { console.error('Error:', err.message);}) handler.on('push', function (event) { switch(event.payload.repository.name) { case 'githubHook': //this push event is from my persional github account, as SAP github.tool's github hook do not work, so I use this one to test push event console.log("reveive a push event from githubHook"); run_cmd('sh', ['./webshop.sh'], function(text){ console.log(text) }); break; case 'frontend-web': //push event from frontend-web console.log("reveive a push event from frontend-web"); run_cmd('sh', ['./webshop.sh'], function(text){ console.log(text) }); break; case 'backend-ms': //push event from backenf-ms console.log("reveive a push event from backend-ms"); run_cmd('sh', ['./backend_ms.sh'], function(text){ console.log(text) }); break; }}) handler.on('issues', function (event) { console.log('Received an issue event for %s action=%s: #%d %s', event.payload.repository.name, event.payload.action, event.payload.issue.number, event.payload.issue.title);})要获取更多Jerry的原创文章,请关注公众号"汪子熙": ...

May 9, 2019 · 1 min · jiezi

gitbook 入门教程之发布电子书

输出目标文件语法格式: gitbook build [book] [output]默认情况下,gitbook 输出方式是静态网站,其实 gitbook 的输出方式有三种: website, json,和 ebook.只不过另外两种不是很常用,更多情况下我们是使用静态网页搭建个人官网,或托管到第三方平台,或部署到私有云服务器,但不管怎么样,还是离不开生成这一步.示例:# 默认输出格式: website$ gitbook build –format=website# 更改输出格式: json$ gitbook build –format=json# 更改输出格式: ebook$ gitbook build –format=ebook默认情况下输出目录: _book/,整个项目的入口文件是: index.html集成 github 网站本教程的电子书源码和输出文件均托管到 github 网站,所以这里介绍下如何利用 Github Pages 静态网页服务与 gitbook 进行集成.什么是 GitHub Pages ?Github Pages 是 github 网站推出的一种免费的静态网页托管服务,适合搭建静态的项目主页或个人官网.其中,网站项目的源码直接托管在 github 仓库中,当仓库文件更新后,该仓库所关联的网站自动更新,从而实现了源码与官网的联动更新.如果想了解更多详情,请参考官网: https://pages.github.com/怎么做 GitHub Pages ?每个账号有且只有一个主页站点,但允许无限制多的项目站点.啥是主页站点,项目站点又是啥?别急,让我先举个例子看一下最终效果.假如用户名: zhangsan 名下有四个公开仓库,一个仓库名叫做: zhangsan.github.io,另外三种分别是: project01,project02,project03 .如果想要对外暴露上述四个仓库作为我们的静态网站,那么最终效果就是下面这样的.主页站点: https://zhangsan.github.io项目01站点: https://zhangsan.github.io/project01项目02站点: https://zhangsan.github.io/project02项目03站点: https://zhangsan.github.io/project03注意将 zhangsan 替换成自己的 github 用户名,否则八成是打不开网站,除非真的有 zhangsan 这个用户.其实上述规则很好理解,github 网站作为一个托管中心,有成千上万的用户在使用 github 并且每个用户的用户名都是唯一并且不同的,因此 *.github.io 通配符域名刚好充当命名空间.可以预料的是,不仅仅有 <username>.github.io 这种二级域名,说不定还有 api.github.io,docs.github.io 等等,毕竟只需要购买 .github.io 通配符域名证书就可以支持任意多的二级域名了,感谢 github 赠送我们免费的 https 网站.说到这里,不得不吐槽下 gitbook 的命名空间策略了,gitbook 也有自己的电子书托管服务,但访问地址是 <username>.gitbook.io/<namespace> .很显然,gitbook 没有区分主页站点和项目站点,相当于全部都是项目站点,缺少主次之分.闲言少叙,既然知道了输入内容和输出效果,那么接下来的任务就是了解中间过程了,让我们一起探讨下怎么发布网站吧!主页站点创建 <username>.github.io 公开仓库前往 https://github.com/ 网站创建名为 <username>.github.io 的公开仓库.比如我的用户名是: snowdreams1006 ,那么我的主页站点仓库就是: snowdreams1006.github.io创建首页 index.html 文件不管是在线直接创建 index.html 还是克隆到本地创建 index.html ,最终的 <username>.github.io 仓库一定要有 index.html 首页文件.示例:# 克隆到本地$ git clone https://github.com/username/username.github.io# 切换到项目$ cd username.github.io# 创建 index.html 文件$ echo “Hello World” > index.html# 推送到远程仓库$ git add –all$ git commit -m “Initial commit”$ git push -u origin master访问主页站点 https://username.github.io打开浏览器,输入网址: https://username.github.io 访问主页站点,显示的内容正是我们刚刚提交的 index.html 文件内容.如果没有正常显示,清除浏览器缓存强制刷新试试看!项目站点相比主页站点来说,项目站点命名比较随意了,作为静态网站不可或缺的文件仍然是 index.html.创建首页 index.html 文件创建首页文件并添加测试内容,方便待会在线访问项目站点测试是否部署成功.设置 GitHub Pages 选项点击仓库首页右上方设置(Settings)选项卡,往下翻到 GitHub Pages 选项,选择源码目录,根据实际情况选择源码来源于 master 分支还是其他分支或者docs/ 目录.方便起见,选择第一个 master 分支即可,注意下面的主题和这一步的来源只能两者选其一,否则主题优先级更高!访问主页站点 https://username.github.io/<repository>打开浏览器,输入网址: https://username.github.io/repository 访问项目站点,显示的内容正是我们刚刚提交的 index.html 文件内容.如果没有正常显示,清除浏览器缓存强制刷新试试看!如何集成 gitbook ?我们已经知道 Github Pages 是提供静态网站的免费托管,而 gitbook 默认生成的内容就是静态网站,两者如何结合自然不用我多说了吧?gitbook 默认输出目录 _book/ 包括了静态网站所需的全部资源,其中就包括 index.html 首页文件.因此我们只需要每次生成后将 _book/ 整个目录复制到项目根目录,那么推送到远程仓库时自然就是输出后静态网站了啊!示例:# 生成静态网站$ gitbook build# 复制到项目根目录$ cp -r _book/ .# 添加到本地版本库$ git add .$ git commit -m “publish”# 推送到远程仓库$ git push origin master现在登录 github 网站看一下静态网站是否成功上传以及访问主页站点或项目站点看一下最新内容是否成功渲染吧!小结本节我们学习 gitbook 有三种输出方式,其中默认的网页输出最为常用.除此之外,还讲解了如何与 github pages 进行结合,从而实现源码和网站的自动更新维护.如果源码没有托管到 github 这种第三方服务商,你也可以搭建自己的服务器,比如将 _book/ 目录全部扔到 nginx 服务器做静态资源服务器等.毕竟,源码和输出内容都在你手中,想怎么玩还不是自己说了算? ...

April 9, 2019 · 1 min · jiezi

什么是Github的元数据metadata以及如何备份github上的数据

github被微软收购后,提供的工具种类是越来越多了,大大提高了我们程序员日常工作的效率。今天我偶然发现,我们可以一键把自己整个github上的数据,不仅仅是代码,还包含每个仓库里创建的issue都轻松下载到本地进行备份。点这个setting按钮:点Account超链接:新建一个export作业 - 导出作业。过了一会,我们github注册的邮箱地址会收到一封邮件,点击Download export就可以下载一个压缩包到本地:我这个账号的所有github数据不export不知道,一export才吓一跳,竟然有1.7个G那么大。下载下来的文件是一个巨大的压缩包,解开之后是这样子的:随便看几个文件的内容。比如这个commit_comment的json文件:实际就是指的这个commit:这是我github上一个仓库的issue的明细:通过上图的url打开这个issue,发现内容和我通过工具下载的内容一致:我所有上传到github issue里的图片也会通过附件的方式被下载到本地,存储在这些文件夹里:希望这个工具对大家备份自己在github网站上的数据有所帮助。要获取更多Jerry的原创文章,请关注公众号"汪子熙":

February 3, 2019 · 1 min · jiezi

Github Page搜索工具更新 - 收藏,手气不错

收藏功能用户可以保存自己喜欢的Github Page。该功能主要帮助用户在发现自己喜欢的Github Page的时候可以将这些Github Page记录下来,翻遍以后查找。手气不错功能每次使用手气不错功能,都会随机产生10个Github Page。用户可以使用这个功能探索未知的Github Page。更多信息Github Page搜索Jack Online

December 31, 2018 · 1 min · jiezi

游戏 & Github Page

snakewizard.github.io贪吃蛇小游戏2. mattbasile.github.io龙珠 DragonballZ-Battle3. nathandhyou.github.io2048 online4. triciasykes.github.ioBlackJack game5. cmh5.github.ioPet Funny Game6. diegorodriguezgzz.github.ioDestreza Duo7. markokerkez.github.io石头 布 剪刀 游戏Rock Paper Scissors Game8. NamedRandom.github.ioKittens GameKittens Game是一个村庄模拟文本游戏。你管理一个小猫村,因为他们获得资源和解锁新技术。 这是一个古老的学校游戏,是多年的爱和辛勤劳动的产物。你可以在Option里面选择中文,需要自己添加翻译。9. andregregorio.github.ioMemory游戏规则:查找相同8张相同卡的最小数量;每场比赛有两次尝试;在玩家发现两张相似且连续的牌时,他将获得一分;当玩家进行8次点击(点数)时,游戏将显示玩家表现的总结;玩家仍然可以获得星星,其中包括:5星最多12次移动,4星级最多16次移动,3星级最多20次移动,2星级最多24次移动,1星级最多28次移动,29次移动零星级。10. pavuloff.github.io不错的游戏,像素风格。总结探索更多Github Page上的小游戏,点击下面的Github Page Explore - Game链接。更多信息Github Page Explore - GameGithub Page 搜索Share Code - 我的个人网站

December 26, 2018 · 1 min · jiezi

Github Page搜索工具更新 - 探索功能

探索功能提供了一种快速访问有意思的Github Page的途径,每周探索功能会更新有趣的搜索词条,你可以点击感兴趣的词条来获取该词条对应的Github Page。首批Github Page探索词条包括:GameOJ (Online Judge)VueCSS (Cascading Style Sheets)Resume

December 26, 2018 · 1 min · jiezi

十个有意思的Github Page

Cooolis.github.ioCooolis是一个操作系统命令技巧备忘录2. rfrd-tw.github.io2018 台灣公投視覺化3. confpad.github.ioConfPad:社区策划的技术会议讲座,视频,幻灯片等列表4. mazentouati.github.io个人网站This is the website’s repository for snacks console.点开之后才会发现这个网站有意思的地方。5. 1Crazy.github.io这个网站动态背景做的不错。6. wufengs.github.io网页头部滚动页面动态效果不错。7. rlcurriculum.github.io加强学习的自动化课程学习(Automated Curriculum Learning for Reinforcement Learning)8.wwcod.github.ioFaceGround - 搞笑的面部聊天!9. displayli.github.io创意设计10. achievement-hunter.github.io有意思的小游戏网站。Achievement Hunter GOTYGithub Page搜索工具Share Code - 我的个人网站

December 25, 2018 · 1 min · jiezi

Stars数量非常高的Github Page

今天给大家分享几个优秀的Github Page。更多Github Page可以使用这个工具搜索 - Github Page搜索工具 https://man-ing.com/github。1. cs231n.github.iostars: 5521这个网站包含斯坦福大学CS课程的笔记和作业。2. bootflat.github.iostars: 4289BOOTFLAT是一个基于Bootstrap 3.3.0 CSS框架的开源Flat UI KIT。 它为Web开发人员提供了一种更快,更简单,重复性更低的方式来创建优雅的Web应用程序。3. huxpro.github.iostars: 3668黄玄的博客My Blog / Jekyll Themes / PWA4. tmallfe.github.iostars: 3649天猫前端5. dirtycow.github.iostars: 2275Dirty COW6. handong1587.github.iostars: 2072有趣的论文,项目,网站,博客和阅读/学习笔记。7. docker.github.iostars: 2041Docker文档的源代码库8. varharrie.github.iostars: 1752个人博客9. nndl.github.iostars: 1543《神经网络与深度学习》 Neural Network and Deep Learning10. microsoft.github.iostars: 1518Microsoft on GitHub更多信息Share CodeGithub Search Tools

December 23, 2018 · 1 min · jiezi

Github Page 搜索工具更新 -- 索引数量扩容

Github Page索引数量目前Github Page可以索引到的数量是两万多条(26863),随着访问者使用这个工具的次数,可索引到的Github Page数量也随之增加。Github Page官网可以检索到所有的搜索结果,但是每次可以查看到的搜索结果限制在1000个(具体测试过程可以参考这篇文章),因此本工具提供了一次可以获取到更多结果的方式。更多信息Github Page搜索工具链接 https://man-ing.com/githubShare Code 我的个人网站

December 21, 2018 · 1 min · jiezi