欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何用 Python 制作 GitHub 消息助手

 更新時(shí)間:2021年02月20日 11:14:52   作者:邵可佳  
這篇文章主要介紹了如何用 Python 制作 GitHub 消息助手,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下

在互聯(lián)網(wǎng)2.0時(shí)代,工程師解決業(yè)務(wù)問題主要依賴的是自己掌握的各種工具和軟件伴隨著席卷全球的開源浪潮,開源工具和軟件也迅猛增長。工程師需要關(guān)注的技術(shù)和軟件也隨之越來越多,學(xué)習(xí)負(fù)擔(dān)越來越大,大腦也越來越不夠用。但工程師們也很無奈,因?yàn)檎l掌握的技術(shù)和軟件越多,誰就能更高效的解決問題。于是工程師們開始借助互聯(lián)網(wǎng)外腦工具:尤其是搜索引擎、書簽、github、scihub等 而工程師們解決問題的能力就體現(xiàn)在了對外腦工具的利用上。
但是,隨著工程師們要解決的問題增長以及自身知識(shí)的積累,外腦工具也逐漸變得臃腫:書簽越來越多,github的訂閱越來越多,多到最后就約等于沒有書簽、沒有訂閱了。為了解決這些問題,我們需要更智能靈活的外腦工具,能讓我們從信息的海洋中解放出來,讓我們能更加專注自身業(yè)務(wù)。

GitHub 消息的問題

有沒有發(fā)現(xiàn)你的 Github 消息 Inbox 過幾天不處理,就會(huì)堆積成山呢?相信有的同學(xué) Inbox 里的數(shù)字比這個(gè)還要夸張,甚至有的同學(xué)已經(jīng)絕望的放棄了 Inbox 這個(gè)功能。
為什么會(huì)這樣?
因?yàn)槊總€(gè)Coder內(nèi)心大多都會(huì)喜歡收藏喜愛的作品,而github的項(xiàng)目主頁右上角最醒目的位置總是擺著這三個(gè)按鈕:

相信工程師們看到喜愛的項(xiàng)目,就會(huì)毫不猶豫的一鍵三連:watch、start、fork。
悲劇也就從這里開始了。
1、工程師喜歡的項(xiàng)目越來越多;
2、項(xiàng)目會(huì)有自己的生命周期,有的變得活躍,有的逐漸消亡;
3、工程師越來越忙,無暇顧及Inbox。
然后,Inbox就變這樣了:

看著滿是堆積的消息,是不是有種崩潰的感覺。那github的功能到底出了什么問題?
我認(rèn)為是 watch、star、fork 需要工程師投入的關(guān)注程度搞錯(cuò)了。當(dāng)然現(xiàn)在github也在積極改進(jìn),相比以前,我們可以發(fā)現(xiàn)有了更多的 watch 選項(xiàng):

但是僅僅這些就夠了嗎?看著 Inbox 動(dòng)輒上萬條的消息,難道要將自己關(guān)注的項(xiàng)目一個(gè)個(gè)的修改為 Ignore?
工程師的內(nèi)心依然是崩潰的!
有沒有辦法拯救工程師的Inbox?
有!來吧,自己動(dòng)手拯救我的收件箱。

解決方案

用 python 做一個(gè) GitHub 消息助手,自動(dòng)幫工程師關(guān)閉和刪除不必要的消息。這不也就是真正意義上的Watch嗎?你看它的時(shí)候,會(huì)接收它的信息,你不看了它就消失了。那么仔細(xì)想想,到底哪些消息真正對工程師有用呢?
1、已經(jīng)很久沒更新的項(xiàng)目,是不是就可以不關(guān)注了?
2、已經(jīng)不是工作范圍和興趣點(diǎn)的項(xiàng)目,是不是也可以不關(guān)注了?
3、已經(jīng)很久都沒人反饋問題的項(xiàng)目,是不是也可以不關(guān)注了?
而python有一個(gè)優(yōu)勢就是可以很方便的實(shí)現(xiàn)用戶操作的自動(dòng)化 嗯,看起來這些僵尸項(xiàng)目都可以用python自動(dòng)化的方式清除掉 說干就干,讓我們開始吧!

代碼實(shí)現(xiàn)

我們知道Python有一款很棒的Web自動(dòng)化測試框架:Selenium,但 Selenium 主要還是用于測試,調(diào)用還是略顯復(fù)雜。所以筆者在github上搜刮了一番,終于找到一款合適的Python包:PyChrome 項(xiàng)目地址:
https://github.com/siversalih/pyChrome-Web-Automation
下面我們就用這款非主流的自動(dòng)化工具包,完成我們的小助手 看主頁,這個(gè)作者很懶,幾年前就沒有更新了,但幸好說明幫助還是挺全的:
https://pychrome.wordpress.com/usage/
所以我們就可以 happy 的按照說明書來組裝機(jī)器人了。

0.環(huán)境準(zhǔn)備

首先需要準(zhǔn)備Python 3.8環(huán)境,然后按照網(wǎng)上說明安裝 Selenium,接下來將PyChrome項(xiàng)目 clone到本地。ok,環(huán)境準(zhǔn)備完成。

1、模擬登錄github

使用PyChrome訪問github有個(gè)小麻煩,每次都會(huì)啟動(dòng)一個(gè)全新的Chrome瀏覽器實(shí)例。這就導(dǎo)致無法重復(fù)利用保存在本地的cookie信息,所以每次要模擬登陸下。github有一個(gè)特點(diǎn),如果ip變更,需要輸入驗(yàn)證碼,如果ip不變則不需要,所以第一次我們只能先手工輸入一次。

不過github的登錄頁面相對簡單,只需要找到Username和password對應(yīng)的表單組件就可以了。所以登錄的代碼可以非常簡潔,如下所示:

browser.open("https://github.com/login")
# name="login"
name_locator = "http://*[@name='login']"
el_name = browser.findElementByXPath(name_locator) 
browser.sendTextToElement(username, el_name) 
# name="password"
pass_locator = "http://*[@name='password']"
el_pass = browser.findElementByXPath(pass_locator) 
browser.sendTextToElement(password,el_pass) 
login_locator = "http://*[@name='commit']"
el_login = browser.findElementByXPath(login_locator) 
browser.clickElement(el_login)

2.模擬進(jìn)入Inbox

登錄完成后,我們需要進(jìn)入收件箱,查看到底有哪些未讀消息。收件箱有點(diǎn)小復(fù)雜,不過也還能很方便的區(qū)分。

找到了正確的xpath,相信定位也不是難事。這里我又取了個(gè)巧,我們被困擾的其實(shí)是有消息的項(xiàng)目,如果一個(gè)項(xiàng)目不發(fā)消息,我們其實(shí)也不會(huì)被騷擾到。所以直接選取左下角的 Repositories 區(qū)域似乎效率更高一些。
代碼如下:

browser.open("https://github.com/notifications")
# 獲取有消息的Repositories列表
locator = "js-notification-sidebar-repositories"
el_repos = browser.findElementByClass(locator) 
repos_list = browser.findElementsByTag("li", el_repos)

3.檢查僵尸項(xiàng)目

我選用第三條策略,已經(jīng)很久沒人反饋問題的項(xiàng)目作為判斷僵尸項(xiàng)目的標(biāo)準(zhǔn)(純粹只是因?yàn)榉奖銓?shí)現(xiàn)),首先訪問issue,然后判斷issue里的更新日期,恰好有一個(gè)詳細(xì)的日期字段。下面代碼目的很簡單,就是獲取最后一條issue更新了多久。

    browser.newTab("https://github.com/" + repos_name + "/pulls?q=")
    # 判斷最近的 pull request
    locator = "http://div[@aria-label='Issues']"
    el_pulls = browser.findElementByXPath(locator) 
    pull_list = browser.findElementsByTag("relative-time", el_pulls)
    timedelta = 0
    if type(pull_list)==list and len(pull_list)>0:
        # 2020-11-10T00:55:39Z
        # last_pull_time_str = pull_list[0].getAttribute("datetime")
        last_pull_time_str = pull_list[0].get_attribute("datetime")
        last_time = datetime.strptime(last_pull_time_str, "%Y-%m-%dT%H:%M:%SZ")
        timedelta = (datetime.now() - last_time).days 
    logger.debug(repos_name + " timedelta: " + str(timedelta) + " days")

4.取消關(guān)注僵尸項(xiàng)目

如果issue已經(jīng)超過了1年,自然就應(yīng)該取消關(guān)注了,畢竟目前信息更新的速度太快了。

# 取消不活躍項(xiàng)目的訂閱(1年以上沒有pull request)
if unsubscribe and timedelta > 366:
    el_notify_button =browser.findElementsByTag("notifications-list-subscription-form")
    browser.clickElement(el_notify_button) 
    time.sleep(1)
    # data-target="notifications-list-subscription-form.menu"
    locator = "http://*[@data-target='notifications-list-subscription-form.menu']"
    el_notify_menus = browser.findElementByXPath(locator) 
    # value="ignore"
    sub_locator = "http://*[@value='ignore']"
    el_ignore_button =browser.findElementByXPath(sub_locator, el_notify_menus) 
    browser.clickElement(el_ignore_button) 
    logger.debug(repos_name + " cancel subscribed")

5.刪除僵尸項(xiàng)目消息

最后,該是解除困擾的時(shí)候了,這種不再更新的項(xiàng)目,工程師自然也不要再被它的消息騷擾。

    el_repos_link = browser.findElementByTag("a", repos)
    browser.clickElement(el_repos_link) 
    # mr-1 js-notifications-mark-all-prompt
    time.sleep(1)
    el_sel_all =browser.findElementByClass("js-notifications-mark-all-prompt")
    browser.clickElement(el_sel_all) 
    time.sleep(1)
    # title="Done"
    done_locator = "http://*[@title='Done']"
    el_done = browser.findElementByXPath(done_locator) 
    browser.clickElement(el_done) 
    logger.debug(repos_name + " remove notifiy")

以上代碼就是模擬 Done 按鈕的操作:

到這里就完成了GitHub消息助手的全部邏輯,整個(gè)Inbox終于清靜了,是不是可以喝杯咖啡愜意一下了。

后記

Python自動(dòng)化工具的確是給工程師們帶來了便捷,使得工程師能應(yīng)對各種日常不同的挑戰(zhàn)。為方便各位工程師小伙伴們早日解脫、得償所愿,以上代碼已開源,完整的代碼地址:
https://gitee.com/knifecms/puppetry/blob/master/github-agent/resp_notify.py
另外,該項(xiàng)目下,還有幾個(gè)其他有意思的自動(dòng)化助手和工具喲,大家感興趣的話也可以研究研究。
希望得到你的更多好點(diǎn)子!

以上就是如何用 Python 制作 GitHub 消息助手的詳細(xì)內(nèi)容,更多關(guān)于Python 制作 GitHub 消息助手的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python怎樣引用其他文件夾下的py文件

    Python怎樣引用其他文件夾下的py文件

    這篇文章主要介紹了Python怎樣引用其他文件夾下的py文件問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 開源Web應(yīng)用框架Django圖文教程

    開源Web應(yīng)用框架Django圖文教程

    Python下有許多款不同的 Web 框架。Django是重量級選手中最有代表性的一位。許多成功的網(wǎng)站和APP都基于Django。Django是一個(gè)開放源代碼的Web應(yīng)用框架,由Python寫成。下面我們來一步步學(xué)習(xí)下吧
    2017-03-03
  • 如何用Pytorch搭建一個(gè)房價(jià)預(yù)測模型

    如何用Pytorch搭建一個(gè)房價(jià)預(yù)測模型

    這篇文章主要介紹了用Pytorch搭建一個(gè)房價(jià)預(yù)測模型,在這里我將主要討論P(yáng)yTorch建模的相關(guān)方面,作為一點(diǎn)額外的內(nèi)容,我還將演示PyTorch中開發(fā)的模型的神經(jīng)元重要性,需要的朋友可以參考下
    2023-03-03
  • 淺談Python Pygame圖像的基本使用

    淺談Python Pygame圖像的基本使用

    今天給大家?guī)淼氖顷P(guān)于Python Pygame的相關(guān)知識(shí),文章圍繞著Pygame圖像的基本使用展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 一文詳解Python加解壓文件gzip庫的操作

    一文詳解Python加解壓文件gzip庫的操作

    Gzip是若干種文件壓縮程序的簡稱,通常指GNU計(jì)劃的實(shí)現(xiàn)。本文為大家介紹了Python中加解壓文件gzip庫的基本操作,感興趣的小伙伴可以了解一下
    2022-11-11
  • python創(chuàng)建屬于自己的單詞詞庫 便于背單詞

    python創(chuàng)建屬于自己的單詞詞庫 便于背單詞

    這篇文章主要為大家詳細(xì)介紹了python創(chuàng)建屬于自己的單詞詞庫,便于背單詞,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Python中的類屬性與實(shí)例屬性的區(qū)別和用法

    Python中的類屬性與實(shí)例屬性的區(qū)別和用法

    在Python中,類屬性和實(shí)例屬性是面向?qū)ο缶幊痰暮诵母拍钪?它們允許存儲(chǔ)和管理對象的數(shù)據(jù),并影響對象的行為,本篇文章中,會(huì)學(xué)習(xí)到類屬性和實(shí)例屬性的概念、區(qū)別以及如何在Python中使用它們,同時(shí)提供大量的示例代碼來更好地理解它們的作用和用法,需要的朋友可以參考下
    2023-11-11
  • Python優(yōu)化代碼的技巧分享

    Python優(yōu)化代碼的技巧分享

    Python?是?一種用著很爽的語言,Python也有著很多特性和技巧,可以幫助我們編寫更高效、更優(yōu)雅、更易維護(hù)的代碼,下面小編為大家整理了一些常用的Python代碼優(yōu)化的簡單小技巧,希望對大家有所幫助
    2023-09-09
  • Django分頁器的用法你都了解嗎

    Django分頁器的用法你都了解嗎

    在我們做Django項(xiàng)目,數(shù)據(jù)量比較大的時(shí)候,我們需要分頁器來做分頁顯示,接下來重點(diǎn)給大家介紹利用Django開發(fā)MVT模型項(xiàng)目時(shí)分頁器的使用,感興趣的朋友一起看看吧
    2021-05-05
  • python使用tkinter實(shí)現(xiàn)屏幕中間倒計(jì)時(shí)

    python使用tkinter實(shí)現(xiàn)屏幕中間倒計(jì)時(shí)

    這篇文章主要為大家詳細(xì)介紹了python使用tkinter實(shí)現(xiàn)屏幕中間倒計(jì)時(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03

最新評論