Ir al contenido principal

Presentación y formateo de resultados

Formatos disponibles para guardar resultados

Para formatear los resultados en A-Parser se utiliza el motor de plantillas Template Toolkit, lo que permite guardar fácilmente los resultados de la extracción de datos en diversos formatos:

  • En archivos de texto como lista: un resultado por línea, mediante un separador, en formato arbitrario
  • En archivos CSV con posibilidad de importación posterior en Excel, Google Docs, etc.
  • En XML, JSON y otros formatos de almacenamiento de datos
  • En HTML generando páginas "al vuelo"
  • En formato de volcados SQL para importación directa a una base de datos o escribiendo directamente en la BD SQLite
  • En formato binario para guardar imágenes (jpg, png, gif, ...), documentos (pdf, docx, ...), archivos ejecutables y archivos comprimidos (exe, dmg, zip, ...) y cualquier otro tipo de datos

Edición del formato de resultado

Result format (Formato de resultado) - permite formatear los resultados al aspecto deseado utilizando plantillas, se aplica para cada combinación de consulta-resultados.

Formatos de resultados
  • El formato de resultado general se establece en el campo Result format
  • El formato de resultado para cada extractor por separado se puede establecer en la configuración del extractor en Result format

A-Parser admite el trabajo con varios extractores en una sola tarea; en el formato de resultados general es necesario indicar de qué extractor se debe mostrar el resultado:

  • $p1 - resultados del primer extractor (SE::GoogleSE::Google en la captura de pantalla), $p2 - resultados del segundo extractor (SE::BingSE::Bing en la captura de pantalla)
  • El número de orden del extractor se muestra a la izquierda del campo de selección del extractor
  • $p1.preset y $p2.preset implican que es necesario tomar el valor del formato de resultado de la configuración de los extractores correspondientes
  • En este ejemplo, $p1.preset se puede reemplazar por $p1.serp.format('$link\n'), lo que tendrá el mismo efecto, y en ese caso ya no se utilizará el formato de resultado de la configuración

Result format (El formato de resultado) se puede indicar en un cómodo editor multilínea haciendo clic en el icono correspondiente en el campo de edición:

Campo de edición del formato de resultado

En el formato de resultados general están disponibles las siguientes variables:

  • $query - consulta después del formateo
  • $query.* - todas las variables relacionadas con la consulta, descritas en el artículo Plantillas en consultas
  • $p1, $p2, ... - variables para acceder a los resultados de la extracción de datos para cada extractor por separado (Ver posibles resultados para cada extractor)
  • $p1.query, $p2.query, ... - consultas después del formateo teniendo en cuenta el formato de consulta indicado en la configuración de cada extractor

Texto inicial y final

Para cada archivo de resultados se indica un Texto inicial/final por separado:

  • Para formar el encabezado de un archivo CSV
  • Para las etiquetas iniciales y finales de un archivo XML
  • Para el header, encabezado y footer de archivos HTML
  • Para cualquier otra variante de aplicación

Para activar esta posibilidad es necesario hacer clic en el botón More options (Más opciones) en la parte inferior del Editor de tareas

Campos para el texto inicial y final

En el texto inicial y final se admite el uso del motor de plantillas Template Toolkit, variables disponibles:

  • $query - consulta después del formateo
  • $query.* - todas las variables relacionadas con la consulta, descritas en el artículo Plantillas en consultas
nota

¡Importante! Estas variables solo están disponibles al guardar cada consulta en un archivo separado o al usar estas mismas variables en el Formato del nombre del archivo de resultado.

Formato del nombre del archivo de resultados

A-Parser permite utilizar plantillas también en los nombres de los archivos resultantes, lo que permite crear automáticamente archivos y carpetas basados en la fecha actual, por el número de orden de la consulta, por la propia consulta y en cualquier otro formato.

Campo Nombre de archivo

En el campo File name (Nombre de archivo) se admiten las siguientes variables:

  • Todas las variables disponibles para el Formato de resultado general
  • $queriesfile - ruta y nombre del archivo con las consultas; si las consultas se indican a través del formulario, contendrá queries_from_text.txt
  • $datefile - objeto del complemento date del motor de plantillas Template Toolkit, configurado para el formato de fecha %b-%d_%H-%M-%S; al formatear devuelve la hora y fecha actuales en forma de May-08_20-08-38, el formato se puede cambiar en la Configuración adicional

Por defecto, el nombre del archivo se crea según la fecha y hora en el momento de inicio de la tarea

Ejemplo complejo

reports/$queriesfile/${query}.txt
  • Se creará la carpeta reports
  • Se creará una subcarpeta con el nombre del archivo de consultas
  • En la subcarpeta se crearán tantos archivos como consultas se utilicen en la tarea; como nombre de archivo se utilizará la propia consulta con la extensión .txt
sugerencia

La variable $query se escribe en formato ${query} para evitar la interpolación de la extensión .txt como parte de la variable; más detalles en la documentación sobre el motor de plantillas Template Toolkit

⏩ Video. Nombramiento de archivos de resultados

En este video presentamos varios ejemplos de nombramiento del archivo de resultado:

  1. Numeración del archivo de resultado de acuerdo con las consultas.
  2. Numeración del archivo de resultado + parte del nombre de la consulta.
  3. Nombramiento del archivo de resultado por la consulta, si la consulta es un enlace.

Ver resultados disponibles

Cada extractor tiene su propio conjunto de resultados; se puede ver la lista de resultados disponibles pasando el puntero sobre el extractor; en la sugerencia emergente se mostrará la lista de resultados simples y matrices, con la lista de elementos anidados:

Lista de resultados disponibles en la sugerencia emergente

Marcados en amarillo están los resultados comunes para todos los extractores:

  • $query - consulta pasada al extractor después del formateo
  • $query.orig - consulta original (tal como estaba en el archivo o en el campo de entrada de consultas)
  • $query.first - primera consulta al usar opciones de extracción de datos anidada (Parse all results o Parse to level)
  • $info.success - información sobre el éxito de la extracción de datos de esta consulta
  • $info.retries - cantidad de intentos utilizados para esta consulta
  • $info.stats - estadísticas del trabajo del extractor para esta consulta
  • $pages.$i.data - matriz con las respuestas sin procesar del servidor para la posibilidad de extraer información adicional de forma independiente
En verde se marcan los resultados disponibles solo para el extractor SE::BingSE::Bing:
  • $totalcount - cantidad de resultados de la entrega
  • $ads con los elementos $link, $anchor, $visiblelink, $snippet, $position y $page - matriz con la lista de anuncios
  • $related.$i.key - matriz con la lista de palabras clave relacionadas
  • $serp con los elementos $link, $anchor, $snippet, $cache - matriz con la entrega principal del buscador
nota

Tenga en cuenta que para las matrices se indica explícitamente la variable $i, lo que significa que hay varios elementos y se puede acceder a ellos por índice (número de posición) o recorrer cada elemento en un ciclo.

sugerencia

El resultado $pages.$i.data se cambiará automáticamente a $data para aquellos extractores que no "navegan por páginas" dentro de una sola consulta. Por ejemplo, como DeepL::TranslatorDeepL::Translator.

Representación de resultados

A-Parser fue creado para la extracción de datos de cualquier tipo; para ello se introdujeron 2 tipos de resultados:

  • Resultados simples (Flat)
  • Matrices de resultados (Array)

Consideremos cada tipo usando como ejemplo el extractor SE::GoogleSE::Google, captura de pantalla de los resultados:

Captura de pantalla de la entrega de Google

Resultados simples

Resultados simples - cuando a una consulta le corresponde un solo resultado, ejemplos:

  • Cantidad de resultados por consulta ($totalcount)
  • Si la consulta es un error tipográfico ($misspell, no representado en la captura de pantalla)

Otros ejemplos:

  • El valor del texto traducido ($translated) en el extractor DeepL::TranslatorDeepL::Translator
  • El número de dominios de referencia ($domains), el valor de confianza ($trustflow), enlaces de retroceso ($backlinks), etc., en el extractor Rank::MajesticSEORank::MajesticSEO

Los resultados individuales se guardan en variables comunes (prefijo $ + nombre en caracteres latinos)

Matrices de resultados

Matrices de resultados - cuando a una consulta le corresponde una lista de resultados, cada elemento de la lista a su vez puede contener varios elementos anidados. Analicemos el ejemplo de la entrega de Google: está representada en el extractor por la matriz $serp; para mayor claridad utilizaremos una tabla, anotaremos los primeros 5 resultados de la entrega:

Enlace ($link)Ancla ($anchor)Fragmento ($snippet)
http://www.speedtest.net/Speedtest.net by Ookla - The Global Broadband Speed TestTest your Internet connection bandwidth to locations around the world with this interactive broadband speed test from Ookla.
http://en.wikipedia.org/wiki/Test_cricketTest cricket - Wikipedia, the free encyclopediaTest cricket is the longest form of the sport of cricket. Test matches are played between national representative teams with "Test status", as determined by the ...
http://www.speakeasy.net/speedtest/Speakeasy Speed TestSaturday 03-May 2014, 11:04:29 AM Your IP: The Speakeasy Speed Test requires Flash v7 or higher. Please update your browser. See Pricing Or Call Today
http://www.humanmetrics.com/cgi-win/jtypes2.aspPersonality test based on C. Jung and I. Briggs Myers type theoryHumanmetrics Jung Typology Test™ instrument uses methodology, questionnaire, scoring and software that are proprietary to Humanmetrics, and shall not be ...
http://test-ipv6.com/Test your IPv6.This will test your browser and connection for IPv6 readiness, as well as show you your current IPV4 and IPv6 address. ... Test your IPv6 connectivity. JavaScript ...

Cada posición de la entrega se anota en una matriz con 3 elementos anidados: enlace ($link), ancla ($anchor), fragmento ($snippet)

Otro ejemplo: la lista de palabras clave relacionadas, que se guarda en la matriz $related:

Palabra clave($key)
test wwe
depression test
test my speed
wonderlic test
test personality
act test
jiggle test
bipolar test

Como se puede ver, en esta matriz hay un solo elemento anidado: palabra clave ($key)

La numeración de los elementos de las matrices comienza desde 0, ejemplo de acceso a elementos individuales de la matriz:

  • $serp.0.link - primer enlace de la entrega
  • $serp.3.anchor - cuarta ancla de la entrega
  • $related.0.key - primera palabra clave relacionada

Más adelante se describirá con más detalle el formateo de resultados simples y matrices

Principios de formateo

Una vez que el extractor ha recopilado los datos en resultados simples y matrices, es necesario mostrarlos (guardarlos en un archivo) en el formato requerido. Para mayor comodidad y funcionalidad, A-Parser utiliza el motor de plantillas Template Toolkit. Analicemos las construcciones utilizadas con frecuencia; para ello, utilizaremos la herramienta Prueba de plantillas. Seleccionemos un proyecto para el extractor SE::GoogleSE::Google:

Prueba de plantillas

En la captura de pantalla se presentan 3 campos:

  • JSON - representación interna de los datos en el extractor
  • Template - plantilla según la cual se realiza el formateo del resultado
  • Result - directamente los datos transformados según la plantilla indicada; en esta forma el resultado se escribirá en el archivo

Cambiando la plantilla podemos cambiar el aspecto del resultado, consideremos la siguiente plantilla:

Ejemplo

Texto en el campo Template (Plantilla):

Informe por consulta: $query    
Competencia: $totalcount
Lista de enlaces, anclas y fragmentos:
$serp.format('$link $anchor\n$snippet\n\n')

Destaquemos las reglas principales:

  • El texto normal se muestra en el resultado tal cual, sin cambios
  • Para mostrar resultados simples es necesario mostrar en el lugar deseado la variable que contiene el resultado necesario con el prefijo $
  • Para formatear matrices se utiliza el método .format, sobre el cual hablaremos un poco más abajo
  • \n se encarga del salto de línea

Formateo de matrices

Analicemos la construcción:

$serp.format('$link $anchor\n$snippet\n\n')

Esta anotación significa que para la matriz $serp es necesario llamar al método .format con el parámetro '$link $anchor\n$snippet\n\n'. El método .format une en una cadena todos los elementos de la matriz según la plantilla indicada en el parámetro; la plantilla misma significa: para cada elemento de la matriz $serp mostrar el enlace y el ancla separados por un espacio, luego en una nueva línea mostrar el fragmento, después de lo cual van otros dos saltos de línea, formando en el resultado una línea vacía entre los resultados.

Uso del motor de plantillas

Salida de variables

Para usar el motor de plantillas es necesario insertar las etiquetas [% %], y dentro de las etiquetas introducir la lógica que se debe ejecutar.

Salida de CMS utilizando el motor de plantillasResultado de la salida de CMS utilizando el motor de plantillas

Recorrido de una matriz

Para mostrar los elementos de una matriz se debe usar la construcción FOREACH:

[% FOREACH i IN p1.list;    
i.cms _ "\n";
END %]
sugerencia

Más información y ejemplos sobre el motor de plantillas en Características del trabajo de las plantillas en A-Parser.

Ejemplos

Salida de competencia

Salida de la competencia por consulta (número de resultados por consulta) para todos los extractores de motores de búsqueda (SE::GoogleSE::Google, SE::YandexSE::Yandex...).

Formato de resultado:

$query: $totalcount\n

Ejemplo de resultado:

test: 3910000000
viagra: 278000000
ventanas pvc: 3220000
...

Salida de enlaces de la entrega de los motores de búsqueda.

Formato de resultado:

$serp.format('$link\n')

Ejemplo de resultado:

http://www.speedtest.net/
http://www.speakeasy.net/speedtest/
http://en.wikipedia.org/wiki/Test_cricket
http://www.humanmetrics.com/cgi-win/jtypes2.asp
http://html5test.com/
http://test-ipv6.com/
...

Extracción de sugerencias

Salida de sugerencias de los motores de búsqueda.

Formato de resultado:

$results.format('$suggest\n')

Ejemplo de resultado:

servidor de prueba tanques online
pruebas gia de lengua rusa
receta de masa para panqueques
testículo
masa para pizza con leche

Salida de datos sobre la consulta

En Net::HTTPNet::HTTP y extractores basados en él, está disponible adicionalmente la salida de:

  • $proxy - proxy en el que se ejecutó la consulta

  • $headers - encabezados de la respuesta

  • $code - código de respuesta

  • $reason - estado de la respuesta

Ejemplo

Salida de valores de variables en JSON

Método .json para objetos

Salida de todos los redireccionamientos de la consulta

Para esta tarea está disponible la variable $response, que permite obtener cualquier variable de la consulta, incluyendo todos los redireccionamientos anteriores.

Formato de resultado:

$response.Redirects.format('$URI\n--> ')$response.URI

Resultado del trabajo del extractor:

Ejemplo

Salida en JSON utilizando el motor de plantillas para registrar la fecha

El ejemplo muestra la salida de los resultados del extractor Net::WhoisNet::Whois en formato JSON.

Ejemplo

Como resultado se obtendrá el dominio que se comprobó, la fecha en el momento de la comprobación y el resultado de la comprobación. Como se ve en el Formato de resultado, la fecha se obtiene mediante el motor de plantillas Template Toolkit.

Formato de resultado:

{    
"domain": "$query",
"date": "[% USE d = date(format = '%d.%m.20%y', locale = 'C');d.format() %]",
"expire": "$p1.expire_date",
},

Ejemplo de resultado:

[{
"domain": "a-parser.com",
"date": "05.05.2021",
"expire": "25.02.2022",
},
{}]
Descargar ejemplo

Como importar un ejemplo en A-Parser

eJxtVG1v2jAQ/ivWCUQrZaxM2pdM+0BRkTYx6ErRPgQ0efWFeXXszHYYVZT/3nMS
EtruQyTf23P33EtK8Nw9uluLDr2DOCkhr98QwxJ9HP/4baRj79jNkWe5QjaBCHJu
HdrgnZw5kUFgygvlYbeLgFDo6ebGZjyglVvNGNuCMBmXegsxvQd/C7RPW4hONu6x
sSRDtlnfMME+s6C8SGsYkkZDMR5m4w9Xw6dRxJR54FQUqWejy09i3LhdXLLhrkfF
Yy5tizvIJ+NG/tkkI6eKPugKXvMD3hsqOJUKe/WcpCXPkAyDEBmsXbqxP3py5UJI
L43mqmEdOtR3YqMl0aV4bcg3MJfo5tZkfa66HaeOJW17gCCKOvZ7EwNxypXDCByV
OucUKl5bpEfLvbGrPNRD+hKMniq1wAOq3q3Gvy6kEjTOaUpBX9rA/7us3mBUHb3z
VAe0/yzVALG3BYHUwvXqWx8kzMLsibj4RbSVzKQn2c1MocOuXJHyETHvWrYMLcuM
xS5LA9zmpvXNUQtyTPqJTfNWV1Y7eEXkxWBeKh+MTuV+RRSsFHjyLPQ93clKz0y4
gsBMF0rRYBze9Qsyde0ggtC18E3wrE4R2Lf3EoE3Rrmva9KF+7KSFvBjKDCjXp5n
bSFp69XmbnFugbOlqrMnJ/F9c3Ku3tLAkNZ3b2ixiFq16865+weU50cdlxWN64+7
bZwCdK2MgDrkaBYQT6pnHsF5pA==

Comprobación de un sitio para su presencia en Google Noticias por palabra clave

Ejemplo de comprobación de presencia de un sitio en Google Noticias por palabra clave

Formato de resultado:

[% linksToOneString = p1.serp.format('$link. ');
matches = linksToOneString.match('.+?(' _ p1.query.domain _ ').+?');

IF matches.0;
p1.query.orig _';yes' _ "\n";
ELSE;
p1.query.orig _';no' _ "\n";
END %]

Ejemplo de resultado:

extractor google|a-parser.com;no
extractor google|forbes.ru;yes
Descargar ejemplo

Como importar un ejemplo en A-Parser

eJylVVFv2jAQ/iuR1YpWo1EQ7UuqaaIMpk6stKV9AoRccqQeju3aCQVR/vvOTkjS
ruNlEoq4u+++O9+dz1uSUrM0txoMpIaE4y1R7j8JyagXhj+kjDl4Z173GeZLL5IJ
ZcLDX2EQ8Go8WNNEcSBNoqg2oC3PuOaOhggWNOMpaW5JulGA7HIFWrPIGlmEsqIx
zGUmEENWlGeIae3+DccwqkIS8WrIATRnYmkUumCQGn9wwCXmNfr7x0Psz3Wozg4m
omtQTkU8O4xXWq43GlLNwNQ8W0EQkN102iTYLKyr6UudUNu08fFEuNM+yKGAETqK
2PvqqZZvK+YvHO6kcWQxvtc4vZwIVMyfwSDqo6PvTCcN/8u3k4Y3sywvGeiNX8zB
DAnQ5lg+CTvzJmSCFuLM132viOQHqCi5pGYIbVxuwDTeufQGo95nQCE/4G6+T8Tx
lJTFGNEVPEgsxoK54dvXCKUbmtj6HUU0BWvdF+TUT9d28mgUsZRJQXleUTvKVZUf
BXvJx00i1maFbelrmaAqBUfgUt13Y0yOnEyQInO+d7kPCReUG2gSg6n2KSYSlZZU
Z2hgKWiaSj1UNh1Ub4kUHc4HsAJe+Tv6q4zxCK9dZ4FO14Xj55DhXxy78nT1UDiG
rxpzKFmcdDX8VXlFciBjPHj0hMfmLGEpyqbrrnBIAlQuAVRZshtbskRqKMMUzEV0
XEEKhJ35qmMdVaneHcMtKiMzPbfUeY2b+ztk3PSNFGe2IQZwKeUFIW8WJG1f9i75
IJPprmpyLQYq51IsWDwsruV+HDLxgGtzKLrSLj5bJpFxjk02cF8NW8cUTbVCdd6P
zl0XwlZyvyQxScnNz1F+cqUZ5nxhE0ywMfWoBeWccv54P6hbSDWgKEyy4Ly9cN/A
fs/zb8tpLnKN54S2E9rV//bTGz3L97o/lwneuf/iwvv2hBsAt55NO4VYYh9sN939
CUkvf0vssoO1oiKCKL8SO9ej4oEp36tt/ZkJtzucy9/mNgfZqlsI6rB9BofOPil/
AGn6WSM=

Salida de valor timestamp en formato de fecha

A veces sucede que no hay una fecha normal en los resultados, pero hay un valor de marca de tiempo (timestamp) como en el extractor Social::Instagram::TagSocial::Instagram::Tag. Este valor se puede representar en formato de fecha utilizando el motor de plantillas Template-Toolkit.

Ejemplo de salida de valor timestamp en formato de fecha

Formato de resultado:

[% USE date;

query.orig _ ": total posts - " _ postscount _ "\nPosts:\n";

FOREACH i IN posts;
d = date.format(i.time, format => '%d.%m.20%y');
i.link _ " - " _ d _ ":\n";
i.text _ "\n";
END %]

Ejemplo de resultado:

sport: total posts - 96500663
Posts:
https://www.instagram.com/p/COfJHshAkeD/ - 05.05.2021:
Quelques exemples de notre nouvelle campagne de communication personnalisable avec le nom des clubs 😀

Vous préférez quel visuel : 1, 2, 3, 4, 5 ? 🤔

#clubnormand #tennis #padel #beachtennis #tenniscourt #padelcourt #beachtenniscourt #lnt #LigueNormandieTennis #🎾 #sport #normandie #normandietourisme
https://www.instagram.com/p/COfJG7olavg/ - 05.05.2021:
💥 Sau màn lật đổ “Bà già” thành công, Nửa xanh thành Milan chính thức vượt qua Nửa đỏ về số lần lên đỉnh nước Ý nhiều nhất lịch sử.
-----------------------------
➖ Website: https://webthethao247.com/
➖ https://g.page/webthethao247?share
#wtt247 #webthethao247 #thethao #sport #bongda #SerieA #InterMilan #Juventus #ACMilan
https://www.instagram.com/p/COfJG1Hg7ax/ - 05.05.2021:
Which Skill was better 1 or 2? 🤔👇
Follow @ftb4ll for more 💥
Follow @ftb4ll for more 💥
Follow @ftb4ll for more 💥
________________________________________
Leave a Like 👍🏽
Subscribe for more 🔔
Leave your thoughts in the Comments  💬
________________________________________
❌Ignore the Tags ❌
#football #soccer #fussball #futbol #fifa #championsleague #bundesliga #ucl #footballmemes #goal #transfer #sports #penalty #ultimateteam #pacybits #fut #ultras #laliga #freekick #referee #sport #calcio #messi #ronaldo #skills #premierleague #foul #footballseason
https://www.instagram.com/p/COfIlXqhfAa/ - 05.05.2021:
Be Fuckin’ Ready 🤣🤣🤣

Get ready to fly!!!! 🏐🏐🏐🏐

Follow - @crackonkings

#beachball #nalin&kane #trance #music #90s #onyerhead #festival #party #afterparty #love #summer #uk #happy #sesh #crackon #football #sport #festivaloutfit #festivalfashion #sun #dj #dancing #club #festivalgirl #house #techno #rave
...
Descargar ejemplo

Como importar un ejemplo en A-Parser

eJx1VNtuGjEQ/RXLCkoj0VVSqS9bpRKhoFJRNuXyxKLKxQa58dqO7aVBiH/vjPeW
pM0+7RzPzDlzsU80MP/g753wIniark/Uxn+a0oXZSqbSdKJ9YHvHijRdsj15T5ay
EAAVlgRDOAuCiCewlKB9apnzwmGm9RsJwImLHStVoP0TDUcrgMschHOSYwbJwd4Z
V7AASqIbPTBVotu6R1aLUeT8lOtcP5bCHRPj5J78JDlNQVBgiljjgwehOQU4GltT
6hB98lzfI5LCT05jlnE2Hw2GX4kkk1nljnDg5DYyJZWYdzIJUHifVCa5/Uwuezzp
FcmH697x8gpiCHwyUVI/RKpGAa/ENYSVVxBPraAIj2ZfSG9Dz5tNn1aF+3Fkgrov
7E1Sz6U9XLCDWBrslYydb2LAmrECu3WB6vG0qeAqCU+YgXEugzSaqYoBx9WxrrR8
jN3WBnyxxVL4sTMFQKi6Bo+NujW9iDaFFGWM/VHF0HTHlBd96kHqmIEQ/vpEBuFY
MC6zqAfwEzV6oNRUHITq3GL+u1IqDrs12EHQpA78v0v2T45zW95zKti6Pw40tFmi
dZd976K4mZo9VM5/Qd1KFjKA7Ye4T4BeA/gghG17NsOeFcaJlqbOXLPDTbNC44p3
IxvYDnpRxouxvAS3Ru/kPquvTeNZ6iVc50wPDV5HrEuXSsFYvJh36zHw9RjQ6AS+
Dh5GCiy9ua40GKP8t0Ul1ToJ6/cRBRbQyeesdcotU2o1nz4/wUAfjM30yLlX44uL
Qb01Drm2sLx7A2sFpZ037cvSPlWnt96X9HSGuf3291UAFonugEG3PAyFpjfnvwdy
t1Y=

Otros ejemplos

Ejemplos de plantillas de uso frecuente