Yo estoy igual Dan :lol:
(https://pbs.twimg.com/media/DdNY1BHXUAAOpvZ.jpg:large)
¡¡¡Saludos!!!
¿La que he puesto yo?, sí. Y el código de la página de Steam, igual, salvo que para obtener el resultado con ese hace falta ejecutarlo en consola y es más engorro así que yo hago que salga una alerta con un bookmarklet (esto es un enlace a la wikipedia) (http://es.wikipedia.org/wiki/Bookmarklet).
De todas formas, lo modifico para que sea una función anónima para evitar que interactúe con la web, aunque no lo hacía, pero por si acaso. No lo he hecho antes porque los bookmarks/favoritos están limitados en caracteres y porque, bueno, tampoco hacía falta.
Y ahora la desgrano para que se vea qué hace (oculto en spoiler que es muy largo y no a todo el mundo le interesará):
var webGames = document.querySelectorAll('.gameListRowItemName');
Se buscan los elementos en la web con la clase de estilo CSS gameListRowItemName porque son los elementos que contienen los títulos de los juegos y los DLCs (he estado mirando pero no hay nada que los diferencie).
var numGames = String(webGames.length).length;
Esta es una churrería mía para hacerlo más cuqui y que en el listado de la alerta aparezcan los mismos dígitos en la forma "x.- nombre de juego".
Dice cuántos nombres de juegos ha encontrado y luego dice cuántos dígitos/caracteres tiene ese número.
O sea, si tenemos menos de 9 juegos, pues no tendrá más que un dígito: "1.- nombre de juego"
Si tenemos entre 10 y 99: "01.- nombre de juego"
Si tenemos entre 100 y 999: "001.- nombre de juego"
Y así sucesivamente.
Yo tengo pocos juegos y no sé cuántos juegos salen en el listado, pero, bueno, siempre saldrá bien siguiendo esa pauta.
var ceros = String(Math.pow(10,numGames));
Para añadir el numerando de cada juego se eleva 10 al número de dígitos del total de juegos (numGames) y se convierte a texto.
Se usa luego en la iteración para poner los ceros a la izquierda.
var listGames = '';
La variable que guarda el texto con todos los títulos de los juegos y que luego muestra la alerta.
for(var x = 0; x < webGames.length; x++){listGames += String(ceros+(x+1)).slice(numGames*-1)+'.- '+webGames[x].textContent+(x == webGames.length-1 ? '': '\n') ;}
La iteración que pasa por cada elemento de título de juego, extrae el texto que contiene, que es el nombre del juego, y lo añade a la variable anterior, listGames. Si no es el último de la lista, pues mete un salto de línea, entre nombre de juego y nombre de juego.
Se añaden el número de ceros de antes y a su derecha el número de juego de la iteración (más uno porque las matemáticas empiezan en 0, si no el primero sería un cero). Luego se extrae de ese texto compuesto tantos caracteres, empezando por la derecha, como juegos totales máximos tenemos (si tenemos entre 10 y 99, pues 2 caracteres y sería 01).
alert(listGames);
Finalmente, se muestra por pantalla, al usuario, como una alerta.
De todas formas, si la preocupación es si te voy a robar los juegos con esto, no, tranquilo :P
P.S.: también he modificado lo de calcular el número de ceros y lo he sacado fuera de la iteración para "aumentar el rendimiento" aunque vamos, a la CPU le cuesta cero coma.
Bueno, pues resulta que como ayer no iba la página me fui a ver si se contaba algo por el grupo y ya de paso probé el script con alguno de vosotros y vi que las alertas, al menos en este navegador, sólo dan para ~10KBytes, que vienen a ser ~375 juegos (según el tamaño del nombre de los juegos que se tengan), lo que no es suficiente para el listado que tenéis algunos.
Y la consola también tiene una limitación, al menos en este navegador, de ~200KBytes (y hay usuarios con bastantes juegos que ni eso basta :lol:).
Así que, al final lo he complicado más para crear un enlace de descarga.
A pesar de ser ahora tan largo el script, aún cabe como bookmarklet, al menos en este navegador (digo todo el rato esto pero es que es Palemoon y viejo). De todas formas, si es necesario, siempre queda la consola.
Y, además, en última instancia, si no funciona el bookmarklet porque hay un script de Steam, no este, que se ha colgado al crear listas enormes de juegos y ha habido que detener la ejecución de scripts, no quedará otra que usar la consola, donde sí funcionará.
Es que algunos tenéis una listas enormes. A mí se me colgaba el navegador :lol: Ahora, que Steam, también, tiene un script un tanto rebuscado para poner cuatro cosas en pantalla... y se pega la tira para ello.
javascript:(function(){var webGames = window.rgGames != null ? window.rgGames.slice(): null; var queryProp = 'name'; if(webGames == null){webGames = document.querySelectorAll('.gameListRowItemName'); queryProp = 'textContent';} var numGames = String(webGames.length).length; var ceros = String(Math.pow(10,numGames)); var listGames = ''; for(var x = 0; x < webGames.length; x++){listGames += String(ceros+(x+1)).slice(numGames*-1)+'.- '+webGames[x][queryProp]+(x == webGames.length-1 ? '': '\r\n') ;} if(window.abandonScriptDownloadData != null){window.URL.revokeObjectURL(window.abandonScriptDownloadData);} var descargaListaGames = new Blob([listGames], {type: 'text/plain'}); window.abandonScriptDownloadData = window.URL.createObjectURL(descargaListaGames); var profileHeader = document.querySelector('.profile_small_header_text'); var linkDescarga = document.getElementById('descargaListadoJuegos'); if(linkDescarga == null) {linkDescarga = document.createElement('a'); linkDescarga.id = 'descargaListadoJuegos'; linkDescarga.textContent = '(Descarga Lista de Juegos)'; linkDescarga.setAttribute('download', 'Lista de Juegos de '+profileHeader.querySelector('.persona_name_text_content').textContent.replace(/[\n\t]/g,'')+'.txt'); profileHeader.appendChild(linkDescarga);} linkDescarga.href = window.abandonScriptDownloadData; })();
Y ahora desgranado en spoiler:
var webGames = window.rgGames != null ? window.rgGames.slice(): null;
Sabía que esto debía estar en algún sitio del código fuente pero no lo vi con mi lista tan corta de juegos.
Esto simplifica todo y sencillamente hace una copia de la variable que pone Steam en la web con todo el listado completo de juegos del usuario, que es un Array de objetos con los detalles de los juegos.
Si no existe esa variable (porque Steam la cambie o lo que sea), su valor será null.
var queryProp = 'name';
Esto establece qué valor se extrae de los detalles de los juegos (name, el nombre).
if(webGames == null){webGames = document.querySelectorAll('.gameListRowItemName'); queryProp = 'textContent';}
Si, por cualquier causa, la variable no existe, pues se pasa al método de hacer un scrapping de la web y se busca los elementos con los nombres de los juegos.
Como ahora ya no es el mismo método, pues el valor a extraer cambia, que es el contenido de esos elementos (textContent).
var numGames = String(webGames.length).length; var ceros = String(Math.pow(10,numGames)); var listGames = '';
Esto ya estaba explicado antes y es para poner los ceros a la izquierda de los numerandos.
for(var x = 0; x < webGames.length; x++){listGames += String(ceros+(x+1)).slice(numGames*-1)+'.- '+webGames[x][queryProp]+(x == webGames.length-1 ? '': '\r\n') ;}
La iteración que extrae el título y lo va "apilando" en la variable listGames.
A partir de aquí es lo nuevo y es para el link de decarga creando blobs (convertir datos en una posible descarga).
He optado por un resultado compatible con Windows (retorno de carro más salto de línea), en vez de Unix (sólo el salto de línea), aunque Windows ya ha arreglado un poco eso. Así, al generar la descarga, no hay problemas en Windows.
No he puesto opción para que la gente elija uno u otro formato porque eso ya habría sido demasiado y la mayoría usa Windows.
if(window.abandonScriptDownloadData != null){window.URL.revokeObjectURL(window.abandonScriptDownloadData);}
Las URLs de datos consumen RAM así que, si por alguna razón le damos más de una vez al bookmarlet, esto borra los anteriores datos de descarga.
var descargaListaGames = new Blob([listGames], {type: 'text/plain'});
Se asignan los datos de listado de juegos a un blob y este a una variable para manejarlo.
window.abandonScriptDownloadData = window.URL.createObjectURL(descargaListaGames);
El objeto de URL de descarga al que se le asigna la lista preparada.
Tiene un nombre peculiar asociado a esta web y para que no interactúe con la web.
var profileHeader = document.querySelector('.profile_small_header_text');
Esto busca la cabecera de la página de juegos.
var linkDescarga = document.getElementById('descargaListadoJuegos');
Aquí se busca el enlace cliqueable para la descarga si ya se ha puesto antes o no.
if(linkDescarga == null) {linkDescarga = document.createElement('a'); linkDescarga.id = 'descargaListadoJuegos'; linkDescarga.textContent = '(Descarga Lista de Juegos)'; linkDescarga.setAttribute('download', 'Lista de Juegos de '+profileHeader.querySelector('.persona_name_text_content').textContent.replace(/[\n\t]/g,'')+'.txt'); profileHeader.appendChild(linkDescarga);}
Si no se había puesto un enlace de descarga antes (porque no se ha usado todavía el bookmarlet), se crea.
Se le da un nombre de archivo para descargar que sería "Lista de Juegos de [nombre de usuario de Steam].txt"
Y se mete en la página en la cabecera mencionada antes como "(Descarga Lista de Juegos)".
linkDescarga.href = window.abandonScriptDownloadData;
Se le añade a la descarga el enlace al objeto de la descarga.
voy con el mismo nombre de usuario de por aqui :huh: y me sale de golpe
"Tu solicitud de ingreso ha sido denegada "
(https://media.tenor.com/5eyCQsKKDEQAAAAd/sideshow-bob-rakes.gif)
bueno, que me han pegado el portazo en la cara y todo... :lol:
dejo link
https://steamcommunity.com/id/Khan93j/ (https://steamcommunity.com/id/Khan93j/)