Как я могу загрузить много аудио (.ogg) файлов из Викисклада? Можно ли использовать API-интерфейс Mediawiki?Как скачать файлы с Википедии с помощью API?
1
A
ответ
4
Вы можете использовать MediaWiki API, чтобы получить URL ссылки для скачивания не только для .ogg, но и в любой другой файл изображения или медиа закачанный на Wikimedia Commons. Из ответа вы можете легко загрузить каждый файл. Ниже приведен пример, в C#:
private static void GetFiles(List<string> fileNames)
{
//Get HTML request with all file names
var url = "https://commons.wikimedia.org/w/api.php?action=query&format=xml" +
"&prop=imageinfo&iiprop=url&titles=File:" + string.Join("|File:", fileNames);
using (var webResponse = (HttpWebResponse)WebRequest.Create(url).GetResponse())
{
using (var reader = new StreamReader(webResponse.GetResponseStream()))
{
var response = reader.ReadToEnd();
//Get all file url links by parsing the XML response
var links = XElement.Parse(response).Descendants("ii")
.Select(x => x.Attribute("url").Value);
foreach (var link in links)
{
//Save the current file on the disk
using (var client = new WebClient())
{
var fileName = link.Substring(link.LastIndexOf("/") + 1);
client.DownloadFile(link, fileName);
}
}
}
}
}
Использование:
//list of files to download
var fileNames = new List<string>() {
"Flag of France.svg", "Black scorpion.jpg", "Stop.png", //image
"Jingle Bells.ogg", "Bach Astier 15.flac", //audio
"Cable Car.webm", "Lion.ogv", //video
"Animalibrí.gif", //animation
};
GetFiles(fileNames);
Примечание: API-интерфейс имеет limit для файлов:
Максимальное количество значений 50 (500 для боты).
Итак, если вам нужно загрузить больше файлов, вам придется разделить список по частям и создать другие запросы.
Что общего между аудиофайлами? Важно ли, чтобы вы загружали аудиофайлы (в противоположность, например, изображениям)? –