一个 GitHub Trending 小工具

标签: dev | 发表时间:2017-03-05 00:00 | 作者:
出处:http://itindex.net/admin/pagedetail

缘起

Github Trending基本上是我每天都会浏览的网页,上面会及时发布一些GIthub上比较有潜力的项目,或者说每日Star数增量排行榜。

不过由于Github Trending经常会实时更新,即使你访问得再勤,难免还是会错过一些你感兴趣的项目,为此不少人都想出了自己的解决办法,例如
josephyzhou,他的 github-trending项目得到了众多人的青睐,我仔细阅读了他的源码 (Go),发现实现也较为简单, 就用Python 重写了一下,发现代码少了好多,详见 我的 github-trending

步骤

主要是建立一个Job,然后分三步:

  • 创建一个以 日期.md的文件
  • 访问Github-Trending 页面 然后抓取关注语言的Trending List 写入 md文件
  • Git Add + Commit + Push

Job

   def job():

    strdate = datetime.datetime.now().strftime('%Y-%m-%d')
    filename = '{date}.md'.format(date=strdate)

    # create markdown file
    createMarkdown(strdate, filename)

    # write markdown
    scrape('python', filename)
    scrape('swift', filename)
    scrape('javascript', filename)
    scrape('go', filename)

    # git add commit push
    git_add_commit_push(strdate, filename)

create markdown

   def createMarkdown(date, filename):
    with open(filename, 'w') as f:
        f.write("###" + date + "\n")

write markdown

   def scrape(language, filename):

    HEADERS = {
        'User-Agent'        : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:11.0) Gecko/20100101 Firefox/11.0',
        'Accept'            : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Encoding'    : 'gzip,deflate,sdch',
        'Accept-Language'    : 'zh-CN,zh;q=0.8'
    }

    url = 'https://github.com/trending/{language}'.format(language=language)
    r = requests.get(url, headers=HEADERS)
    assert r.status_code == 200

    d = pq(r.content)
    items = d('ol.repo-list li')

    # codecs to solve the problem utf-8 codec like chinese
    with codecs.open(filename, "a", "utf-8") as f:
        f.write('\n####{language}\n'.format(language=language))

        for item in items:
            i = pq(item)
            title = i("h3 a").text()
            owner = i("span.prefix").text()
            description = i("p.col-9").text()
            url = i("h3 a").attr("href")
            url = "https://github.com" + url
            f.write(u"* [{title}]({url}):{description}\n".format(title=title, url=url, description=description))

git operations

   def git_add_commit_push(date, filename):
    cmd_git_add = 'git add {filename}'.format(filename=filename)
    cmd_git_commit = 'git commit -m "{date}"'.format(date=date)
    cmd_git_push = 'git push -u origin master'

    os.system(cmd_git_add)
    os.system(cmd_git_commit)
    os.system(cmd_git_push)

部署

代码写完了,然后就可以部署了,当然你可以放在自己的电脑上跑。但是这是个每天的定时任务,所以不能关机比较尴尬。比较好的办法是部署到VPS,具体主机商就不推荐了,反正就这几家,大家随意。部署之前记得先将VPS 的 SSH key 添加到Github 的信任列表,这样这个代码就可以顺利跑起来啦!

   $ git clone https://github.com/bonfy/github-trending.git
  $ cd github-trending
  $ pip install -r requirements.txt
  $ python scraper.py

一般人我不告诉

还有个好处,偷偷告诉你们,这代码是每天定时跑的,所以每天都会Commit 到Github上,想象一下吧,一年之后你的Github下面的Commit 一栏将是多么的美观啊!所以赶快去Star 我的项目,行动起来吧,少年!

项目地址: https://github.com/bonfy/github-trending
欢迎大家Star

相关 [github trending 小工具] 推荐:

一个 GitHub Trending 小工具

- - IT瘾-dev
Github Trending基本上是我每天都会浏览的网页,上面会及时发布一些GIthub上比较有潜力的项目,或者说每日Star数增量排行榜. 不过由于Github Trending经常会实时更新,即使你访问得再勤,难免还是会错过一些你感兴趣的项目,为此不少人都想出了自己的解决办法,例如. josephyzhou,他的 github-trending项目得到了众多人的青睐,我仔细阅读了他的源码 (Go),发现实现也较为简单, 就用Python 重写了一下,发现代码少了好多,详见 我的 github-trending.

Home · JohnLangford/vowpal_wabbit Wiki · GitHub

- -
There are two ways to have a fast learning algorithm: (a) start with a slow algorithm and speed it up, or (b) build an intrinsically fast learning algorithm.

git和github简介(上)

- linyehui - 没做完,没准备好
在此贴上本人在Web标准化交流会6月25日北京站的主题分享. 在线PPT:http://jinjiang.github.com/slides/learning-git/. PPT源码:https://github.com/Jinjiang/slides/tree/gh-pages/learning-git.

Github使用指南(转)

- - CSDN博客推荐文章
来自:https://github.com/neuola/neuola-legacy/wiki/github%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97. 如果你只是想了解 github 的使用,请跳到 Github 简介一节. 作为程序员大军之一,想必大家有这样的经历吧.

github 上的好东西

- - 收集分享互联网资源
基于HTML5的专业级图像处理开源引擎.

Windows 下 使用TortoiseGit GitHub

- - CSDN博客研发管理推荐文章
TortoiseGit依赖msysgit,首先下载: http://code.google.com/p/msysgit/downloads/detail?name=msysGit-fullinstall-1.8.1.2-preview20130201.exe&can=2&q=. 再下载TortoiseGit: http://code.google.com/p/tortoisegit/wiki/Download?tm=2.

Github 用户数突破一百万

- pipitu - Solidot
51开源社区 写道 "Gibhub用户数已突破一百万,Github官方博客发布了庆祝图片. 目前已有1,004,771用户,在Github托管了超过2,836,210 个git库. Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理. 推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中.

Linux源代码托管在Github上

- wang - Solidot
在kernel.org服务器遭入侵之后,Linux作者Linus Torvalds于9月3日在Github上创建了帐号,将内核源代码托管到了Github. 他在邮件列表上解释说,由于master.kernel.org下线,他建立了一个临时的源代码托管仓库.

GitHub开源Campfire机器人Hubot

- 阿韩 - 36氪
今天,著名的代码存储与分享库GitHub宣布重写Campfire机器人Hubot代码并将其开源. 许多希望自动化日常工作的开发者可以考虑使用并重新开发这款机器人. 另外你还可以免费将自己的机器人Hubot托管在Heroku上. Hubot代码可以用CoffeeScript或者Javascript编写.

把 GitHub 上的 private repository 搬到 BitBucket 上…

- 幻幽 or A書 - Gea-Suan Lin's BLOG
既然 latency 都差不多 (兩個 site 從台灣過去都要 200ms),git push 速度感覺起來也差不多,找不到理由要付錢給 GitHub,加上 private repository 裡面也沒什麼特別的東西,剛剛就都改丟到 BitBucket 上面,然後把 GitHub 的付費機制 cancel 掉….