stringtranslate.com

Usuario:Apolo234

Hola, soy Apolo234. Estudiante español de Ingeniería de Software.

Herramientas en las que estoy trabajando

Estoy trabajando ahora mismo en una herramienta que sirva como complemento a "What links here", funciona de forma similar a la aplicación MassViews toolforge pero utilizando el recuento de backlinks en lugar de las vistas del usuario.

Ya existen algunas herramientas para buscar cuántos enlaces hay en una página, pero quería agregar la capacidad de buscar el recuento de backlinks de muchos artículos al mismo tiempo, ordenarlos en orden inverso y resolver el problema de no contar los enlaces que simplemente se transcluyen desde las plantillas al artículo, lo que tiende a ser problemático para algunos casos de uso.

El código fuente luce así en este momento:

solicitudes de importacióndesde límites de importación de ratelimit, RateLimitException, sleep_and_retryimportar jsonarchivoslisto = """"""mimatriz = listoffiles.split("\n")mimatriz procesada = listoffiles.replace(" ", "_").split("\n")resultado = {}caché = {}caché2 = {}caché = open('cacheparatodoslosbacklinksdewikipedia', 'r').read().split("\n")cache2 = open('cacheparatodoslosenlacesderetroenlacesdewikipedia2', 'r').read().split("\n")contador = 0@dormir_y_volver_a_intentar@limits(llamadas=1, periodo=3)def accesswikipedia(mimatriz,mimatriz2,micaché,micaché2,contador): para id, i en enumerate(myarray): si (myarrayprocessed[id] en mycache): print("¡Se encontró " + i + " en caché!") imprimir("") resultado[i] = int(mycache2[mycache.index(myarrayprocessed[id])]) contador = contador+1 demás: api_url='https://en.wikipedia.org/w/api.php?action=query&format=json&srlimit=1&list=search&utf8=1&format=json&maxlag=10&srsearch=linksto:'+myarrayprocessed[id]+' insource:"[['+i+']]"&srinfo=totalhits&srprop=' headers = {'Accept-Encoding':'gzip','User-Agent':'Final Qué enlaces a Tool/0.0 (https://en.wikipedia.org/wiki/User:Apolo234/User:Apolo234) Uso de solicitudes (Python)'} apiresult = solicitudes.get(api_url, headers=encabezados).json() print("Resultado obtenido "+str(counter+1)+"/"+str(len(myarray))+": " + str(apiresult)) imprimir("") resultado[i] = apiresult["consulta"]["información de búsqueda"]["total de resultados"] open('cacheparatodoslosbacklinksdewikipedia','a').write(str(mimatrizprocesada[id])+"\n") open('cacheforallwikipediabacklinks2','a').write(str(apiresult["consulta"]["información de búsqueda"]["total de visitas"])+"\n") contador = contador + 1accesswikipedia(mimatriz,mimatrizprocesada,cache,cache2,contador)resultado = dict(ordenado(resultado.items(), clave=lambda elemento: elemento[1], reverso=Verdadero))para i en result.keys(): imprimir(str(i) + ": " + str(resultado[i]))

Instrucciones

1. Necesitará instalar los módulos ratelimit y Requests, preferiblemente en Python 3.10.x (probado en Python 3.10.4).

2. Copie el código fuente y péguelo en un nuevo archivo Python, luego cree dos archivos en la misma carpeta que el archivo Python llamados 'cacheforallwikipediabacklinks' y 'cacheforallwikipediabacklinks2' (sin extensiones ni comillas).

3. Para ingresar varios títulos de artículos, debes modificar la variable 'listoffiles' de la siguiente manera:

archivoslisto = """PikachuRaichúCharmander"""

4. Inicia el script de Python. Debería empezar a mostrar el artículo actual que está solicitando a un ritmo relajado (no debería ejecutar múltiples instrucciones en un lote, ya que está limitado a propósito, excepto en los casos en los que encuentre el título en la memoria caché, para no sobrecargar los servidores de Wikipedia). Comenzará a agregar la información que obtenga al archivo 'cacheforallwikipediabacklinks' que creaste y también al archivo 'cacheforallwikipediabacklinks2'.

5. Cuando finalice, devolverá una lista ordenada inversamente con todos los títulos y la cantidad de enlaces a él desde otros artículos que encontró, no cuenta los enlaces que provienen únicamente de una plantilla.

¡Disfruta de cualquier uso que puedas darle!

Parches

Si desea que los títulos resultantes de este script parezcan legibles por máquina, reemplace

imprimir(str(i) + ": " + str(resultado[i]))

con

imprimir(str(i.replace(" ","_")) + ": " + str(resultado[i]))

Wikilink extrae scripts excluyendo plantillas

Es sencillo de utilizar, copia el Wikitexto de un artículo, ponlo en un archivo de texto y utiliza el siguiente comando:

grep -oP '\[\K[^]]*' <nombre del archivo de texto aquí> | cut -c 2- | sed 's/^\(.\)/\U\1/'| sed -e 's/|.*//'| sed -e 's/#.*//' | sed -e 's/Categoría:.*//' | sed -e 's/Ttp.*//'| sed -e 's/Archivo:*//'

Debería devolver el título de cada Wikilink en el artículo (no incluye enlaces de plantillas, que es la razón principal por la que usaría esto en lugar de alguna otra herramienta más establecida, también tiene problemas con algunos caracteres especiales, como devolver 'C' en lugar de 'C++').

Cómo generar una lista de enlaces de Wikipedia que están enlazados por otros elementos en la misma lista

Primero, obtenga la lista de enlaces que desea analizar.

En segundo lugar, vaya a la herramienta Special:Export de Wikipedia y pegue los enlaces allí. Se generará un archivo XML que podrá guardar en su computadora. Utilice el script de extracción de Wikilinks excluyendo las plantillas en el archivo XML y guarde su resultado en otro archivo de texto; lo utilizaremos para nuestro último paso.

En tercer lugar, guarde los títulos en un archivo de texto y utilice el siguiente script para transformarlos en algo que se ingresará en el siguiente comando:

sed -e :a -e '$!N; s/\n/\$|\^/; ta' <nombre del archivo de texto aquí> | sed 's/^/\^/' | sed 's/$/\$/' | sed -re 's/[(]/[\\(]/g' | sed -re 's/\[//g' | sed -re 's/\]//g' | sed -re 's/[)]/[\\)]/g' | sed -re 's/\[//g' | sed -re 's/\]//g' | sed 's/"/\\"/g' | sed 's/!/\\!/g' | sed 's/+/\\+/g' | sed 's/*/\\*/g'

(en caso de que también desee obtener los enlaces de las plantillas de uso principal, artículo principal, más amplio y adicional (no completamente probadas):

grep -oP '\[\K[^]]*' <nombre del archivo de texto aquí> | cut -c 2- | sed 's/^\(.\)/\U\1/'| sed -e 's/|.*//'| sed -e 's/#.*//' | sed -e 's/Categoría:.*//' | sed -e 's/Ttp.*//'| sed -e 's/Archivo:*//' && grep -oP '\{\{[Mm]principal artículo\|[^\}]*' <nombre del archivo de texto aquí> | sed 's/{{[Mm]principal artículo|//g' | sed 's/#.*//g' | sed -e 's/|.*//' | sed -e 's/^ //g' | sed -e 's/.*\= *//g' | sed 's/^\(.\)/\U\1/' && grep -oP '\{\{[Ss]ee también\|[^\}]*' <nombre del archivo de texto aquí> | sed 's/{{[Ss]ee también|//g' | sed 's/#.*//g' | sed -e 's/|/\n/g' | sed -e 's/^ //g' | sed -e 's/.*\= *//g' | sed 's/^\(.\)/\U\1/' && grep -oP '\{\{[Mm]ain\|[^\}]*' <nombre del archivo de texto aquí> | sed 's/{{[Mm]ain|//g' | sed 's/#.*//g' | sed -e 's/|/\n/g' | sed -e 's/^ //g' | sed -e 's/.*\= *//g' | sed 's/^\(.\)/\U\1/' && grep -oP '\{\{[Ff]urther\|[^\}]*' <nombre del archivo de texto aquí> | sed 's/{{[Ff]urther|//g' | sed 's/#.*//g' | sed -e 's/|/\n/g' | sed -e 's/^ //g' | sed -e 's/.*\= *//g' | sed 's/^\(.\)/\U\1/' && grep -oP '\{\{[Bb]roader\|[^\}]*' <nombre del archivo de texto aquí> | sed 's/{{[Bb]roader|//g' | sed 's/#.*//g' | sed -e 's/|/\n/g' | sed -e 's/^ //g' | sed -e 's/.*\= *//g' | sed 's/^\(.\)/\U\1/' && grep -oP '\{\{VT\|[^\}]*' <nombre del archivo de texto aquí> | sed 's/{{VT|//g' | sed 's/#.*//g' | sed -e 's/|/\n/g' | sed -e 's/^ //g' | sed -e 's/.*\= *//g' | sed 's/^\(.\)/\U\1/' && grep -oP '\{\{AP\|[^\}]*' <nombre del archivo de texto aquí> | sed 's/{{AP|//g' | sed 's/#.*//g' | sed -e 's/|/\n/g' | sed -e 's/^ //g' | sed -e 's/.*\= *//g' | sed 's/^\(.\)/\U\1/'

Copia la salida que da.

En cuarto lugar, utilice el siguiente comando para obtener la lista de Wikilinks enlazados por otros elementos de la lista junto con el número de veces que se encontraron enlazados en el archivo que generamos en el segundo paso:

grep -EIho "<lista de títulos generados en el segundo paso>" <archivo de texto obtenido en el segundo paso> | sort | uniq -c | sort -n -r

En quinto lugar, debería generar una lista similar a ésta:

 104 Aarón 84 Pedro 72 Roberto 72 Pablo 58 Tomás 48 Steve

¡Ya estás listo!

Ahora, estos scripts tienen un problema, no dan enlaces que enlazan 0 veces a ninguno de los enlaces, si necesita esta información, use lo siguiente:

Primero, toma los archivos de texto que usaste en el segundo paso, ordénalos usando el comando a continuación y pega los resultados en algún archivo de texto.

sort <archivo de texto obtenido en el segundo paso> > <nombre del archivo de texto donde se genera la clasificación>

Luego, ejecute este comando

grep -EIho <patrón> <archivo de texto obtenido en el segundo paso> | sort | uniq | diff - <nombre del archivo de texto donde se genera la ordenación> | grep -EIho "> .*" | sed 's/>/0/g' | sed 's/^/ /g' | sort -n -r

Ahora deberías obtener todos los enlaces que enlazan exactamente 0 veces a cada enlace de la lista.

En caso de que haya dado un error en el último paso, generalmente se debe a un carácter especial (como '!' o '?'); en ese caso, vuelva a la lista de títulos que tenía antes de transformarlos y escape cualquier carácter especial no alfanumérico con '\', como este '¿Es esto real\?', repita el paso 3 y ahora debería funcionar sin problemas.