2013-08-09 40 views
5

MediaWiki'yi çalıştıran bir wiki'ye yüklemek istediğim birçok metin dosyası var. Bunun gerçekten mümkün olup olmadığını bile bilmiyorum, ama bir şans vermek istiyorum.MediaWiki'ye çok sayıda metin dosyasını toplu yükleme

Her bir metin dosyasının adı, wiki sayfasının başlığı olacaktır.

Tek dosya için bir wiki sayfası.

ben Belki de çok fazla istiyor bu kodu isteyen

. Program olduğu gibi aynı klasördeki tüm metin dosyalarını yüklemek istiyorsanız, bu yüzden en azından hangi dili Ben bakmak gerekir bana söyler misiniz Bir atış vermek için?

cevap

6

MediaWiki API ile ilgili makaleleri oluşturmak için muhtemelen istediğiniz bir bot. Muhtemelen bilinen en iyi bot çerçevesi Python için pywikipedia'dur, fakat diğer birçok dil için de API libraries and bot frameworks vardır. Aslında, pywikipedia, ne istediğinize oldukça yakın bir şey yapan pagefromfile.py adlı bir betik ile gelir. Varsayılan olarak, tek bir dosyadan birden çok sayfa oluşturur, ancak bazı Python'ları biliyorsanız, bunu değiştirmek çok zor olmamalıdır.


Aslında dosyalar wiki üzerinde çalışan aynı sunucuda ise (ya da orada yükleyebilirsiniz), o zaman hatta hiç bir bot gerekmez: importTextFile.php o olabilir adında bir MediaWiki maintenance script var Kendin için yap. Sen mesela, basit bir kabuk komut dosyası ile verilen bir dizindeki tüm dosyalar için bunu çalışabilir:

for file in directory/*.txt; do 
    php /path/to/your/mediawiki/maintenance/importTextFile.php "$file"; 
done 

(Açıkçası, MediaWiki tesisatın gerçek yolu ile metin dosyaları ve /path/to/your/mediawiki içeren dizine ile directory değiştirin.

Varsayılan olarak, importTextFile.php, oluşturulan sayfanın adını, dosya adı üzerine, herhangi bir dizin önekini ve uzantılarını sıyıracak şekilde temel alır. Ayrıca, standart MediaWiki sayfa adlandırma kurallarına göre altçizgi boşluklarla değiştirilecek ve ilk harf büyük harfle yazılacaktır (LocalSettings.php'de turned that off değilseniz); bu nedenle, örneğin, directory/foo_bar.txt dosyası "Foo çubuğu" sayfası olarak içe aktarılır. Sayfa adının daha iyi denetlenmesini istiyorsanız, importTextFile.php ayrıca bir --title parametresini de destekler. Ya da her zaman komut dosyasını kopyalayabilir ve sayfa adlandırma kurallarını değiştirmek için kendiniz değiştirebilirsiniz.


Ps. Ayrıca, standart girdiden sayfa metnini okur ve importTextFile.php'nin uygun varsayılan sayfa adlandırma kurallarına sahip olmaması dışında, importadlı bir MediaWiki bakım komut dosyası da vardır. Yine de, Unix boru hatlarını kullanan otomatik düzenlemeler için oldukça kullanışlı olabilir.


Zeyilname: importTextFile.php komut dosyası adları ve içeriği UTF-8 kodlamasında olmasını bekler. Dosyalarınız başka bir kodlamadaysa, önce bunları düzeltmeniz veya dönüştürmeyi yapmak için komut dosyasını değiştirmeniz gerekir. mb_convert_encoding() kullanıyor.

  1. altına yakın, titleFromFilename() fonksiyonunu düzenlemek, dosyayı isimleri UTF-8'e dönüştürmek için: Özellikle

    , komut dosyasına aşağıdaki modifikasyonlar yapmak gerektiğini script ve bunun son satırı değiştirin:

    return $parts[0]; 
    

    ile:

    dosya adları için kullanılan character encoding olmalıdır 210
    return mb_convert_encoding($parts[0], "UTF-8", "your-encoding"); 
    

    (veya auto otomatik algılama girişimi).

    $text = file_get_contents($filename); 
    

    ile:

    $text = file_get_contents($filename); 
    $text = mb_convert_encoding($text, "UTF-8", "your-encoding"); 
    

  • da çizgi yerine senaryonun ana kod içinde daha yukarı yapmak, benzer bir değişiklik dosyalarının içeriğini dönüştürmek için

  • +0

    @llmari Karonen Çok teşekkür ederim sooooooooooo. Sadece hangi yöntemin en hızlı olduğunu bulmak istiyorum. Hangisi en hızlı gönderimi garanti eder. Ve orada MultiUpload, UploadLocal, UploadWizard gibi birçok uzantı gördüm. Bunlar, bahsettiğin yöntemlerden daha hızlı olabilir mi? – user1849133

    +0

    @llmari Karonen Ve gerçekten en hızlı yöntem varsa, ne kadar hızlı? Her biri 10 KB boyutunda 10000 txt dosyam varsa ne kadar hızlı olur? Benim ftp yüklemelerim, sunucuya ortalama olarak 1 saniye başına 10KB txt dosyası 1.2 test ettim. Ancak bu yüklenen dosyaları medyawiki'ye göndermek ne kadar hızlı olacak? – user1849133

    +2

    Bu bir _really_ yavaş yükleme hızı. 90'lardan eski bir modem kullanıyor musunuz? Dosyaları MediaWiki'ye içe aktarırken, dosyaları sunucuya yüklemek (daha hızlı yapmak için belki de bir .zip/.tar.gz arşivinde) daha hızlı olmalı ve importTextFile.php (veya edit.php) kullanılmalıdır. bir bot kullanmaktan daha eşit olmak. Komut dosyalarını bir çağrıda tüm dosyaları içe aktarmak için değiştirmeyi daha da hızlandıracağımı farz etmeliyim, ancak muhtemelen değişiklik yapmak ve test etmek için harcayacağı süreyi telafi etmek için yeterli değildir. –

    0

    MediaWiki 1.27'de, bunu gerçekleştirebilecek importTextFiles.php adlı yeni bir bakım betiği var. Bilgi için bkz. https://www.mediawiki.org/wiki/Manual:ImportTextFiles.php. Eski (şimdi kaldırılmış) importTextFile.php betiğinde, dosya joker karakterlerini işleyebildiği için geliştirir, böylece birçok metin dosyasının aynı anda içe aktarılmasına izin verir.

    İlgili konular