2016-01-14 8 views
1

Как я могу загрузить много аудио (.ogg) файлов из Викисклада? Можно ли использовать API-интерфейс Mediawiki?Как скачать файлы с Википедии с помощью API?

+0

Что общего между аудиофайлами? Важно ли, чтобы вы загружали аудиофайлы (в противоположность, например, изображениям)? –

ответ

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 для боты).

Итак, если вам нужно загрузить больше файлов, вам придется разделить список по частям и создать другие запросы.

 Смежные вопросы

  • Нет связанных вопросов^_^