【aRsenal-3】KEGG API

由于工作需要,今天花了一上午的時(shí)間研究了一下KEGG的API,雖然走了不少?gòu)澛?,但最終還是圓滿完成任務(wù)。下面我將復(fù)盤(pán)整個(gè)過(guò)程,和大家分享在使用KEGG API中的經(jīng)歷和體會(huì)。

事情的起因是這樣的,我手上有一個(gè)KEGG的ID列表,我的任務(wù)是找到這些ID所對(duì)應(yīng)的gene以及它們所在的pathway。


KO_list.png

我已經(jīng)很多年沒(méi)有用過(guò)KEGG了,剛拿到這些ID的時(shí)候也是一頭霧水。經(jīng)過(guò)一番搜索(也要感謝小伙伴們的指點(diǎn)),我在KEGG的網(wǎng)站上找到了這些ID以及我想要的gene和pathway信息。


keg_web.png

我一開(kāi)始想抓這個(gè)網(wǎng)頁(yè),解析HTML文件,但是發(fā)現(xiàn)這些信息是javascript程序動(dòng)態(tài)產(chǎn)生的,此路不通。在這個(gè)網(wǎng)頁(yè)的右上方有一個(gè)【Download htext】的鏈接,下載后得到的是一個(gè)后綴名為 .keg 的文本文件,看上去和網(wǎng)頁(yè)上的內(nèi)容一樣。


keg.png

如果這是個(gè)xml或者是json格式的文件,故事就到此為止了,因?yàn)橛泻芏喱F(xiàn)成的工具可以拿來(lái)解析它。但是這個(gè)文件的格式比較特殊,得自己動(dòng)手寫(xiě)程序來(lái)提取,比較麻煩。有沒(méi)有更簡(jiǎn)單一點(diǎn)的方法呢?

身為一名Rapper,不找找Bioconductor的包怎么行呢?果然有一個(gè)叫KEGGREST的包可以方便的調(diào)用KEGG的API,這樣問(wèn)題就變得簡(jiǎn)單多了。
https://www.bioconductor.org/packages/release/bioc/vignettes/KEGGREST/inst/doc/KEGGREST-vignette.html

KEGGREST.png

但是,我高興的太早了!在使用KEGGREST的過(guò)程中,不斷有 Timeout was reached 的錯(cuò)誤產(chǎn)生,真的讓人抓狂!


code1.png

于是我再回過(guò)頭來(lái)研究KEGGREST的原理。它實(shí)際上是先通過(guò)KEGG API下載一個(gè)文本文件,然后再去解析。而我現(xiàn)在就卡在了調(diào)用API這一步。

弄清楚原理之后,我調(diào)整了自己的策略:首先用外部工具來(lái)調(diào)用API,將文本文件保存下來(lái),然后用KEGGREST內(nèi)部的parser來(lái)解析這些文件。

具體做法如下:

  1. 在不借助KEGGREST提供的keggGet函數(shù)的情況下,我得先搞清楚KEGG API 的URL格式是怎樣的。
    http://www.kegg.jp/kegg/docs/keggapi.html

    KEGG_API.png

    我需要的operation是get,dbentries就是ID號(hào),所以API的URL就可以寫(xiě)成:http://rest.kegg.jp/get/K00001

  2. 然后用curl來(lái)調(diào)用API,由于我有3000多個(gè)ID,所以需要生成一個(gè)腳本來(lái)批量下載:


    bash.png

    bash腳本的內(nèi)容:


    curl_list.png

    運(yùn)行該腳本,下載過(guò)程很順利。我發(fā)現(xiàn)每次下載前總是要停大概15秒左右,也許這就是前面的方法總是Timeout的原因吧。具體原因就不深究了,只要能達(dá)到我的目的就行。
    curl.png
  3. 接下來(lái)要弄清楚KEGGREST包中的哪個(gè)函數(shù)負(fù)責(zé)文本解析。通過(guò)查看keggGet函數(shù)的代碼,我覺(jué)得應(yīng)該是.flatFileParser函數(shù)


    code2.png
  4. 目標(biāo)明確后,我們就來(lái)下載KEGGREST的源代碼(Package Source)
    https://www.bioconductor.org/packages/release/bioc/html/KEGGREST.html

    package_source.png

    將KEGGREST_1.14.0.tar.gz解壓后,我在它的R目錄下發(fā)現(xiàn)了一個(gè)parsers.R的文件,我們要找的函數(shù)就在里面。

  5. 最后,我們用下面的代碼來(lái)解析下載好的文本文件


    code3.png

    需要注意的是,這里不要再寫(xiě)library(KEGGREST),直接source它的2個(gè)文件就可以了。.flatFileParser返回的是一個(gè)長(zhǎng)度為1的list,list里面又嵌套了一個(gè)list。

  6. 最終的結(jié)果如下,任務(wù)圓滿完成!


    table.png

我的方法不一定是最好的,歡迎廣大Rapper提供更好的方法和大家分享。

qrcode.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評(píng)論 19 139
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程,因...
    小菜c閱讀 7,294評(píng)論 0 17
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評(píng)論 25 709
  • 《裕語(yǔ)言》速成開(kāi)發(fā)手冊(cè)3.0 官方用戶交流:iApp開(kāi)發(fā)交流(1) 239547050iApp開(kāi)發(fā)交流(2) 10...
    葉染柒丶閱讀 28,703評(píng)論 5 20
  • 昨晚接到通知,莫名其妙被安排多休息一天。第二日清晨吃完早飯,再次莫名其妙被老板安排去清潔她的廚房。 第一項(xiàng)任務(wù)是清...
    口十君閱讀 205評(píng)論 0 0

友情鏈接更多精彩內(nèi)容