它與另一個帖子有關
而不是rvest,我正在嘗試使用該httr2包從以下鏈接請求資料:https ://gnomad.broadinstitute.org/api/ 。不幸的是,我不太習慣,有人可以幫忙嗎?
這是我到目前為止沒有運氣的嘗試。
library(tidyverse)
library(httr2)
request("https://gnomad.broadinstitute.org/api/") %>%
req_body_form(
'chrom' = '1',
'datasetId' = 'gnomad_r3',
'referenceGenome' = 'GRCh38',
'start' = 55516868,
'stop' = 55516908
) %>%
req_perform()
Error in `resp_abort()`:
! HTTP 400 Bad Request.
Run `rlang::last_error()` to see where the error occurred.
uj5u.com熱心網友回復:
API 需要的資訊比您提供的要多得多!看起來您已經從 Chrome 的檢查工具中提取了發送到 API 的引數,但只提供了“變數”部分。通過 Web 界面執行此操作時,頁面上的 JS 會根據這些變數為您進行大量格式化,而 API 看到的內容實際上要廣泛得多。您可以通過轉到此處的 URL 來查看這一點,該 URL實際上顯示了發送到 API 的完整請求(感謝 GraphiQL 制作了如此有用的 API 介面!)。
基本上,我們需要在 R 中創建整個字串并將整個內容發送到 API,而不僅僅是您提供的變數串列。這里有一段代碼正是這樣做的:我們定義了一個“querymaker”函式,它接收我們的變數并輸出完整的字串,然后將其傳遞給httr2函式。
querymaker <- function(start, stop, chrom, ref_genome, dataset_id){
paste0('{\n region(start: ', start, ', stop: ', stop, ', chrom: "', chrom, '", reference_genome: ', ref_genome, ') {\n clinvar_variants {\n clinical_significance\n clinvar_variation_id\n gnomad {\n exome {\n ac\n an\n filters\n }\n genome {\n ac\n an\n filters\n }\n }\n gold_stars\n hgvsc\n hgvsp\n in_gnomad\n major_consequence\n pos\n review_status\n transcript_id\n variant_id\n }\n variants(dataset: ', dataset_id, ') {\n consequence\n flags\n gene_id\n gene_symbol\n hgvs\n hgvsc\n hgvsp\n lof\n lof_filter\n lof_flags\n pos\n rsids\n transcript_id\n transcript_version\n variant_id\n exome {\n ac\n ac_hemi\n ac_hom\n an\n af\n filters\n populations {\n id\n ac\n an\n ac_hemi\n ac_hom\n }\n }\n genome {\n ac\n ac_hemi\n ac_hom\n an\n af\n filters\n populations {\n id\n ac\n an\n ac_hemi\n ac_hom\n }\n }\n lof_curation {\n verdict\n flags\n }\n }\n }\n}')
}
given_query <- querymaker(start = "55516868", stop = "55516908", chrom = "1",
ref_genome = "GRCh38", dataset_id = "gnomad_r3")
請注意帶有很多換行符的超長字串——這基本上是我paste將變數放入的請求正文。現在我們可以將整個內容傳遞給 API 并獲得 JSON 格式的回應:
library(httr2)
jsondata <- request("https://gnomad.broadinstitute.org/api/?") %>%
req_body_json(list(query=given_query, variables="null")) %>%
req_perform() %>%
resp_body_json()
我們最終可以使用快速sapply函式從中提取變體 id:
sapply(jsondata$data$region$variants, function(x)x$variant_id)
"1-55516880-T-C" "1-55516902-T-G" "1-55516903-G-GC" "1-55516905-C-CT"
(假設這仍然是您希望提取的內容)。
編輯:
請注意,如果您只對變體 ID 感興趣,則可以使用以下函式顯著縮短查詢(并減少服務器上的負載!):
querymaker <- function(start, stop, chrom, ref_genome, dataset_id){
paste0('{\n region(start: ', start, ', stop: ', stop, ', chrom: "', chrom, '", reference_genome: ', ref_genome, '){variants(dataset: ', dataset_id, ') {\n variant_id\n }\n }\n}')
}
其他一切都將正常運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/490644.html
