更改下面的代码根据输入的基因名字从ENA官网上下载对应的Project号并输出为txt文件:#include iostream#include fstream#include string#include curlcurlh 回调函数用于处理下载的数据size_t WriteCallbackvoid contents size_t size size_t nmemb stdstring outpu
#include
// 回调函数,用于处理下载的数据 size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) { size_t totalSize = size * nmemb; output->append((char*)contents, totalSize); return totalSize; }
// 根据基因名从ENA官网获取Project号 std::string getProjectNumber(const std::string& geneName) { std::string url = "https://www.ebi.ac.uk/ena/data/search?query=" + geneName; std::string response;
CURL* curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
CURLcode res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
if (res != CURLE_OK) {
std::cerr << "Failed to download data from ENA." << std::endl;
return "";
}
} else {
std::cerr << "Failed to initialize CURL." << std::endl;
return "";
}
// 从下载的数据中提取Project号
size_t startPos = response.find("studyId\":\"");
if (startPos == std::string::npos) {
std::cerr << "Failed to find Project number in the response." << std::endl;
return "";
}
startPos += 10;
size_t endPos = response.find("\"", startPos);
if (endPos == std::string::npos) {
std::cerr << "Failed to find Project number in the response." << std::endl;
return "";
}
return response.substr(startPos, endPos - startPos);
}
int main() { std::string geneName; std::cout << "Enter gene name: "; std::cin >> geneName;
std::string projectNumber = getProjectNumber(geneName);
if (!projectNumber.empty()) {
std::ofstream outputFile("project_number.txt");
if (outputFile.is_open()) {
outputFile << projectNumber;
outputFile.close();
std::cout << "Project number saved to project_number.txt" << std::endl;
} else {
std::cerr << "Failed to open output file." << std::endl;
}
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/injb 著作权归作者所有。请勿转载和采集!