Usuario:Murphy era un optimista/Wiki

Mediawiki editar

Este documento describe cómo instalar y configurar el software de mediawiki sobre windows. La versión es mediawiki-1.4beta3, ahora hay otras nuevas en las que algunas cosas que aquí comento han cambiado. Para hacerlo me he basado en http://meta.wikimedia.org/wiki/Help:Running_MediaWiki_on_Windows y en mi propia experiencia, si quieres comenta en la discusión los cambios para las nuevas versiones:

Servidores editar

Conseguimos un servidor web, uno puede ser easyphp: http://www.easyphp.org/. Este incluye PHPMyAdmin, MySQL, PHP y Apache.

Ahora el software de mediawiki (http://sourceforge.net/projects/wikipedia). Vamos a copiar los ficheros en el directorio www de la instalación del servidor. Yo lo tengo en C:\Archivos de programa\EasyPHP1-7\www, pero se puede cambiar en los ficheros de configuración de Apache.

Abrimos el navegador web y ponemos la dirección http://127.0.0.1.

Instalación editar

Pinchamos en el enlace y entramos en la página de configuración. Entre los parámetros más importantes son: Nombre del sitio, Language, Sysop account name y su password y Database name.

Con esto se habrá creado automáticamente la estructura de la base de datos. Ahora tenemos que ir al directorio donde está la wiki y entramos en el directorio config, copiamos el fichero LocalSettings.php y lo pegamos en el directorio raíz de la wiki: C:\Archivos de programa\EasyPHP1-7\www.

Personalización editar

Permisos de Developer editar

Tenemos que abrir el intérprete de comandos de MySQL con:

cd \
cd “C:\Archivos de programa\EasyPHP1-7\mysql\bin”
mysql -u root –p

Ahora pide una contraseña, si la tenemos la escribimos y si no le damos a ENTER. Cuando entremos estaremos en una ventana parecida a la de MS-DOS pero el promt es mysql>. Es el intérprete de comandos de MySQL, en él escribimos:

Use wikidb
Select * from user;

Debe decir al final: “1 row in set”. Buscamos un poco más arriba y habrá una línea con nuestro nombre de usuario. El número de al lado es nuestro número de usuario. En este caso es el 1. Ahora escribimos esto:

update user_rights set ur_rights='sysop,bureaucrat,developer' where ur_user='1'

En el fichero LocalSettings.php:

$wgAllowSysopQueries = true;
$wgDBsqluser        = "wikiuser";
$wgDBsqlpassword    = "pepe";

Los campos “wikiuser” y “pepe” deben ser sustituidos por los puestos en la página de configuración.

En el fichero user.php:

'asksql'      => 'developer',

NOTA: Los desarrolladores del software de mediawiki aconsejan no habilitar esta opción.

Interwiki editar

Esta opción tiene su sentido sobre instalaciones en los servidores de wikipedia, pero si aún así queremos ponerlos, tenemos que ejecutar un script de SQL. Vamos al intérprete de MySQL (ya sabemos cómo) y escribimos:

Use wikidb
Source C:\Archivos de programa\EasyPHP1-7\www\maintenance\wikipedia-interwiki.sql

Contenidos editar

Para instalar los artículos de una wikipedia (solo texto) bajamos los datos. Éstos están disponibles en http://download.wikipedia.org/ en un formato dump. Los bajamos y lo descomprimimos, por ejemplo en c:\xx.sql. En el intérprete de MySQL escribimos:

Use wikidb
source c:\xx.sql

Esto tardará un buen rato...

Imágenes editar

Bajamos Imagemagick. Lo instalamos en c:\image\magick. Ahora en el fichero de configuración LocalSettings.php hay que cambiar unas líneas:

## To enable image uploads, make sure the 'images' directory
## is writable, then uncomment this:
$wgDisableUploads		= false;
$wgUseImageResize		= true;
$wgUseImageMagick              = true;
$wgImageMagickConvertCommand   = "C:\\Image\\Magick\\convert ";

Luego, en el directorio Images de la instalación ponemos los permisos adecuados para que se pueda escribir en él. Abrimos Incluyes/Image.php y vamos a la página 461, lo dejamos así:

$cmd  =  $wgImageMagickConvertCommand .
" -quality 85 -background white -geometry {$width} ".
"\"".($this->imagePath)."\"" . " " .
"\"".($thumbPath)."\"";	

Sólo hemos quitado escapeshellarg y hemos puesto varios “\”. Esto lo hacemos porque al escribir las rutas de los ficheros se hace una llamada como:

'C:\Archivos de programa\EasyPHP1-7\www/images/f/f6/MiImagen.jpg'

Y lo que queremos es que en vez de comillas simples salgan dobles:

"C:\Archivos de programa\EasyPHP1-7\www/images/f/f6/Foto.jpg"

Ecuaciones editar

El ImageMagick ya lo tenemos de la sección anterior. También necesitamos Miktex package for windows de http://www.miktex.org/

Vamos al directorio Math y abrimos el fichero render.ml. Las tres primeras líneas las dejamos así:

let cmd_dvips tmpprefix = "dvips -R -E -q \"" ^ tmpprefix ^ ".dvi\" -f >\"" ^tmpprefix^".ps\" "
let cmd_latex tmpprefix = "latex  -quiet \"" ^ tmpprefix ^ ".tex\" >\""^tmpprefix^".tmp\" "
let cmd_convert finalpath tmpprefix = "convert -quality 100 -density 120 \"ps:"^tmpprefix^".ps\" \"" ^ finalpath ^ "\" "

Tenemos que instalar dos programas más:

Con estos dos podremos crear otro programa que sirva de puente entre la wiki y LaTeX. Reiniciamos el ordenador. Luego escribimos en MS-DOS algo como:

C:\> cd \ruta de mi wiki\Math
C:\miwiki> c:\MinGW\bin\mingw32-make texvc.bc

En el directorio Math de la instalación cambiamos el nombre del fichero texvc.bc por texvc.exe y lo copiamos en la carpeta base del sitio. Pero aún hay más. Abrimos el fichero Incluyes\Math.php:

  • El if de la línea 60, 61 y 62 tiene que estar comentado, es decir, escribir un # al principio de cada línea:
#			if( !is_executable( $wgTexvc ) ) {
#				return $this->_error( 'math_notexvc' );
#			}
  • Vamos a la línea 68 y que estará:
wfDebug( "TeX: $cmd" );
Y lo sustituimos por:
$cmd=str_replace("'","\"",$cmd);
wfDebug( "TeX: $cmd" );
  • En LocalSettings.php escribimos esto:
$wgTexvc = "texvc"; # Location of the texvc binary
Y también quitamos el comantario de:
# $wgUseTeX			= true;

Ya no necesitamos más los programas MinGW y OCaml compiler, pero si el Miktex y el ImageMagick

Otros editar

Para personalizar los nombres de los enlaces hay que ir a Special Page (Páginas especiales)>All system messages (Todos los mensajes). Allí pinchando sobre uno de los mensajes se le puede cambiar el texto.

Para que aparezcan más cosas en las páginas especiales hay que ir a Incluyes/SpecialPages.php y cambiar, dentro del bloque entre $wgSpecialPages = array(…); los UnlistedSpecialPage por SpecialPage en los que queremos mostrar o lo contrario para no mostrarlos.

Para conocer las variables o palabras clave que se pueden usar, es decir, cosas como {{CURRENTDAYNAME}}, {{NUMBEROFARTICLES}}, #redirect, thumbnail o __NOTOC__ podemos ir a languajes\languaje.php

También podemos hacer que sólo los usuarios registrados puedan editar páginas . Para esto vamos a includes\defaultSettings.php y la línea 435 la dejamos así:

$wgWhitelistEdit = true;   # true = user must login to edit.

La línea inferior es para restringir a los usuarios anónimos ciertas páginas. La línea 522 ($wgAllowExternalImages) sirve para impedir que se muestren imágenes de otras páginas. En la línea 546 ($wgDisableCounters) se puede deshabilitar el uso de contadores de visitas en cada página. En la 569 ($wgFileBlacklist) se prohíbe subir ciertos ficheros al servidor. En la 699 ($wgUserHtml) puedes impedir que se use HTML. Para permitir y configurar el envío de emails a usuarios ir a la línea 150 y siguientes. En la línea 405 podemos habilitar la navegación por categorías al estilo DMOZ ($wgUseCategoryBrowser).

Bot editar

Este documento describe cómo configurar y comenzar a hacer trabajar el bot pywikipedia en windows y en una instalación de wikimedia propia. Este bot contiene muchas funciones, para ver cada una sólo hay que abrir con un editor de textos el fichero correspondiente.

Es posible que algunas cosas hayan cambiado con las nuevas versiones, si es así puedes ponerlo en la descripción.

Instalamos Python editar

Vamos a http://python.org y bajamos la última versión.

Tenemos que instalar una versión igual o posterior a la 2.3, en mi caso es la 2.4. Al hacerlo se crea la carpeta C:\Python24. Para acceder al intérprete de comandos vamos a MS-DOS:

cd \Python24
python

Al hacer esto estaremos en el intérprete (igual que en aquel de MySQL) y podremos escribir y ejecutar cosas. En principio esto no lo vamos a usar, ya le diremos al intérprete lo que queremos ejecutar “desde fuera”, de la forma: python fichero.

Descomprimimos el bot (pywikipedia). El fichero se llama pywikipedia.zip (no se que versión, la fecha es de mayo del 2005), se puede bajar de sourceforge http://sourceforge.net/projects/pywikipediabot. Lo descomprimimos en la misma carpeta que el intérprete de Python, en mi caso es en C:\Python24.

Instalando el bot editar

SUGERENCIA: leer el fichero CONTENTS.

Creamos un fichero llamado user-config.py que estará en el directorio raíz del programa. Este fichero contiene:

username='My name'
mylang='xx'

Yo lo he dejado así:

username='Rafa'
mylang='es'
family = 'rafa'

Ahora hay que engañar al bot para que use nuestra propia wiki y no la wikipedia de verdad. Para ello creamos la familia “rafa”, que es la que antes le hemos dicho que use, esto se hace con el fichero rafa_family.py en el directorio families. El contenido del fichero es:

# -*- coding: utf-8  -*-

import family

# The meta family

class Family(family.Family):
   def __init__(self):
       family.Family.__init__(self)
       self.name = 'rafa'
       self.langs = {
           'rafa': '127.0.0.1',
           'es': '127.0.0.1'
       }
       self.latin1old =  ['de', 'et', 'es', 'ia', 'la', 'af', 'cs', 'fr', 'pt', 'sl', 'bs', 'fy',
                   'vi', 'lt', 'fi', 'it', 'no', 'simple', 'gl', 'eu',
                   'nds', 'co', 'mi', 'mr', 'id', 'lv', 'sw', 'tt', 'uk', 'vo',
                   'ga', 'na', 'es', 'test']
                   
       # Languages that are coded in iso-8859-1
       self.latin1 = ['en', 'es', 'sv', 'nl', 'da', 'dk']       


  
   def code2encoding(self, code):
       """Return the encoding for a specific language wikipedia"""
       if code in self.latin1:
           return 'iso-8859-1'
       return 'utf-8'                    

   def code2encodings(self, code):
       """Return a list of historical encodings for a specific language
          wikipedia"""
       # Historic compatibility
       if code = = 'pl':
           return 'utf-8', 'iso-8859-2'
       if code = = 'ru':
           return 'utf-8', 'iso-8859-5'
       if code in self.latin1old:
           return 'utf-8', 'iso-8859-1'
       return self.code2encoding(code),
                   

Ejemplos de familias son: meta, commons, wikiquote, wikipedia, etc

Probamos el bot editar

Test editar

Antes de probarlo un pequeño detalle: el bot espera que los artículos de la wiki estén dentro de una carpeta llamada “w” que cuelga del directorio principal, es decir, una ruta como: http://127.0.0.1/w/index.php/Portada

Así que, si no lo tenemos así, hacemos la carpeta y metemos los ficheros en ella, además en LocalSettings.php ponemos en la línea 7 la ruta, por ejemplo:

$IP = "c:\\inetpub\\wwwroot\\w";

Vamos a MS-DOS y escribimos:

cd \
cd python24
python test.py

Esto ejecuta el script que prueba si el bot puede conectarse con la wiki. Este script es el primero que tenemos que probar. También podemos abrirlo para ver su código… Si todo va bien aparecerá Logged in.

Login editar

Ahora probemos el login. Yo usaré el mismo usuario que tengo en mi wiki, pero si se usa en una wiki que no sea tuya puede que debas hacerle una cuenta al bot y registrarla como tal. Escribimos en MS-DOS python login.py y debe aparecer Should be logged in now.

Ahora comprobaremos que en el directorio login-data hay un fichero del estilo: rafa-es-login.data. En este fichero se guardan los datos de la conexión (la contraseña está encriptada, por lo que no se puede entender).

Redirecciones dobles editar

Vamos a eliminar redirecciones dobles. Para ello yo he tenido que corregir una pequeña cosa en el código, en redirect.py he cambiado la línea 159 y he añadido unas comillas dobles: Rredir = re.compile('\<li\>\<a href=".+?" title="(.*?)">'). También he cambiado el fichero wikipedia.py, en la línea 1265 he puesto un cometario: #raise NotLoggedIn. Puede que en tu instalación no necesites hacer estos cambios.

Ahora en la wiki creamos estas páginas con el contenido (ver Especial:DoubleRedirects):

  • Pagina1 -> #redirect [[pagina2]]
  • Pagina2 -> #redirect [[pagina3]]
  • Pagina3 -> un texto cualquiera

Ya están hechas las dobles redirecciones, ahora el bot debe corregir en la Pagina1 y hacer que apunte directamente a la 3.

Ejecutamos el script con el parámetro double.

python redirect.py double

Bueno, pues para empezar ya es más que suficiente...

Enlaces editar