Я совершенно новичок в python flask и столкнулся с проблемой при написании кода с использованием запросов и модулей flask.
Я работаю над проектом с использованием веб-API, предлагаемого платформой Panther.В проекте предоставлен пример с использованием Apache Java.
Исходный код приведен ниже ( Подробнее см. ).
public class TestProject {
public static void main(String args[]) throws Exception {
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
HttpPost httppost = new HttpPost("http://pantherdb.org/webservices/garuda/tools/enrichment/VER_2/enrichment.jsp?");
StringBody organism = new StringBody("Homo sapiens", ContentType.TEXT_PLAIN);
FileBody fileData = new FileBody(new File("c:\\data_files\\gene_expression_files\\7_data\\humanEnsembl"), ContentType.TEXT_PLAIN);
StringBody enrichmentType = new StringBody("process", ContentType.TEXT_PLAIN);
StringBody testType = new StringBody("FISHER", ContentType.TEXT_PLAIN);
//StringBody cor = new StringBody("FDR", ContentType.TEXT_PLAIN);
//StringBody cor = new StringBody("BONFERRONI", ContentType.TEXT_PLAIN);
//StringBody cor = new StringBody("NONE", ContentType.TEXT_PLAIN);
StringBody type = new StringBody("enrichment", ContentType.TEXT_PLAIN);
HttpEntity reqEntity = MultipartEntityBuilder.create()
.addPart("organism", organism)
.addPart("geneList", fileData)
.addPart("enrichmentType", enrichmentType)
.addPart("test_type", testType)
.addPart("type", type)
//.addPart("correction", cor)
.build();
httppost.setEntity(reqEntity);
CloseableHttpResponse response = httpclient.execute(httppost);
try {
//System.out.println("----------------------------------------");
//System.out.println(response.getStatusLine());
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
System.out.println(IOUtils.toString(resEntity.getContent(), StandardCharsets.UTF_8));
}
EntityUtils.consume(resEntity);
} finally {
response.close();
}
} finally {
httpclient.close();
}
}
}
Часть, в которой я больше всего заинтересованэто .addPart("organism", organism)
и весь другой код с аналогичными структурами.Они помогут передать параметры со стороннего веб-сайта в веб-API, предлагаемый Panther.
Я переделал код JAVA в python3
, используя requests
.Код выглядит следующим образом:
uploadTemp = {'file':open('./app/static/data_temp/temp.txt','rb')}
url="http://pantherdb.org/webservices/garuda/tools/enrichment/VER_2/enrichment.jsp?"
params = {"organism":organism,"geneList":pantherName,"enrichmentType":"fullGO_process","test_type":"BINOMIAL","type":"enrichment","correction":"BONFERRONI"}
# or params = {"organism":organism,"geneList":uploadTemp,"enrichmentType":"fullGO_process","test_type":"BINOMIAL","type":"enrichment","correction":"BONFERRONI"}
Pantherpost= requests.post(url, params = params)
print(Pantherpost.text)
Я ожидаю, что объект XML от веб-API, включая некоторую базовую биологическую информацию.Однако полученный результат был нулевым (или \n\n\rnull\n
при печати Pantherpost.content
)
Похоже, что параметры, полученные из моего собственного веб-сайта, были неправильно отправлены в веб-API.
В дополнение к этой задаче обнуления, как новичок, я также не совсем уверен, должна ли часть «geneList» получать объект в виде простого текста или файл.В руководстве говорится, что он ожидает файл, однако, эта команда могла быть переформатирована в обычный текст
FileBody fileData = new FileBody(new File("c:\\data_files\\gene_expression_files\\7_data\\humanEnsembl"), ContentType.TEXT_PLAIN);
В любом случае, я попробовал обе интерпретации: pantherName
- это список с правильно отформатированным именемв текстовом формате и uploadTemp
- это файл .txt, сгенерированный для проекта.В моем коде должны быть некоторые дополнительные ошибки, поскольку в обоих случаях он вернул null
.
Может кто-нибудь помочь?Большое спасибо.