Mostrando entradas con la etiqueta Web. Mostrar todas las entradas
Mostrando entradas con la etiqueta Web. Mostrar todas las entradas

viernes, 10 de febrero de 2017

Descargar PDF con Asp Clásico

Hace unos días estuve buscando en Internet alguna función en ASP clásico que me permitiera descargar archivos PDFs.

Y encontré éstas funciones que permiten descargar un fichero dada la ruta donde se encuentra y el nombre del archivo:

'*******************************FUNCIÓN 1*****************
Function downloadFile(strPathAndFile, strFileName)
    Dim objFso
    Dim objStream
    If strPathAndFile <> "" Then
        Set objFso = Server.CreateObject("Scripting.FileSystemObject")
       'If objFso.FileExists(strPathAndFile) Then
            Response.AddHeader "Content-disposition", "filename=" & strFileName
            Response.ContentType = "application/octet-stream"
            Response.AddHeader "Pragma", "no-cache"
            Response.AddHeader "Expires", "0"
            Set objStream = Server.CreateObject("ADODB.Stream")
            objStream.Type = 1
            objStream.Open
            objStream.LoadFromFile strPathAndFile
            Response.BinaryWrite(objStream.Read())
            objStream.Close
            Set objStream = Nothing
        Else
            Response.Write "La ruta del fichero no existe."
        End If
        Set objFso = Nothing
    End If

End Function

'*******************************FUNCIÓN 2***************** 
Function downloadFile(strPathAndFile, strFileName)
    Response.Buffer = False
    Dim objStream
    Set objStream = Server.CreateObject("ADODB.Stream")
    objStream.Type = 1 'adTypeBinary
    objStream.Open
    objStream.LoadFromFile(strPathAndFile)
    Response.ContentType = "application/x-pdf"
    Response.Addheader "Content-Disposition", "attachment; filename=" & strFileName
    Response.BinaryWrite objStream.Read
    objStream.Close
    Set objStream = Nothing

End Function

Sin embargo, en ambos casos salió el siguiente error "Es posible que la página web http:// ...  esté temporalmente inactiva  o que se haya trasladado definitivamente a otra dirección" 



Para solucionar este problema tienes que:

1. Incluir el .Mode encima del .Open y con el valor 3 para prevenir errores de bloqueo de acceso si están accediendo al archivo varias personas al mismo tiempo.

objStream.Mode = 3

objStream.Open
objStream.Type = 1


2. Cambiar: Response.ContentType "application/octet-stream"
por: Response.ContentType = "xxx/xxx"

3. Antes de Response.AddHeader Incluir Response.Clear

4. Después de cerrar el FileSystemObject incluir: response.end


Quedando el código como sigue:

Function downloadFile(strFilePath, strFileName)
   
    Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
   
    If objFSO.FileExists(strFilePath) Then
        Set objFile = objFSO.GetFile(strFilePath)
        intFileSize = objFile.Size
        Set objFile = Nothing

        Response.Clear
        Response.AddHeader "Content-Disposition","attachment; filename=" & strFileName
        Response.ContentType = "xxx/xxx"
        Response.AddHeader "Content-Length", intFileSize

        Set objStream = Server.CreateObject("ADODB.Stream")
        objStream.Mode = 3
        objStream.Open
        objStream.Type = 1
       
        objStream.LoadFromFile strFilePath

        Do While Not objStream.EOS And Response.IsClientConnected
            Response.BinaryWrite objStream.Read(1024)
            Response.Flush()
        Loop

        objStream.Close
        Set objStream = Nothing

    End if
   
    Set objFSO = Nothing
    response.end

End Function

 

jueves, 7 de julio de 2016

Peticiones a Clientes Web en ASP Clásico



En esta entrada aprenderás a extraer datos de Sitios Webs haciendo peticiones al servidor utilizando el lenguaje de programación ASP clásico.

1) Inicializar las variables

Response.Buffer = True
Dim xml

2) Decidir cómo crear el objeto

Con:

Set xml = Server.CreateObject("Microsoft.XMLHTTP")

O con:

Set xml = Server.CreateObject("MSXML2.ServerXMLHTTP")

En mi caso utilizaré “MSXML2.ServerXMLHTTP” porque cuando utilicé “Microsoft.XMLHTTP” en una Web dónde había una redirección, me mostraba error y no podía obtener la nueva Web a la que estaba redireccionando.

A continuación veamos algunas diferencias entre XMLHTTP y ServerXMLHTTP

XMLHTTP se utiliza, generalmente, en la comunicación cliente-servidor (por ejemplo, en una petición a un Servicio Web), también en transferencias de datos, por ejemplo utilizando el protocolo FTP. También permite el almacenamiento automático de la url en la memoria caché. XMLHTTP utiliza WinInet (Windows Internet Explorer) para su funcionamiento.

Por su parte ServerXMLHTTP está destinado a la comunicación entre servidores, aplicaciones clientes y procesamiento de peticiones entre clientes. En ServerXMLHTTP el estado se mantiene “activo”, es decir, la información enviada/recibida desde/hacia un destino se retiene en la conexión actual para ser utilizada en futuras transacciones de datos
ServerXMLHTTP crea una pila de cliente http, es decir, una sesión independiente del cliente http, lo que implica que pueden existir varias instancias activas del objeto ServerXMLHTTP en función de la memoria y la disponibilidad de conexiones. El objeto ServerXMLHTTP puede ser utilizado además para hacer peticiones/envío de datos de una aplicación a otra, incluso cuando se requiere que sea en tiempo real.

3) Abrir la conexión, en mi caso utilizaré el método POST aunque puedes utilizar GET u otro en dependencia del caso.

·         - site es el sitio Web al cuál quieres hacerle la petición.
·         - False es un indicador booleano que muestra si la llamada es o no asíncrona.

xml.Open "POST", site, False

4) Hacemos la petición con:

xml.Send

3) Si al hacer la petición te da un error puedes controlarlo con el típico try-catch aunque en ASP clásico se hace de esta manera:

Colocas este código al inicio de tu .asp “On Error Resume Next”

Y luego después del xml.Send capturas el error (como aparece a continuación), en mi caso obligo a que el estado sea “Error 404” aunque lo puedes programar de forma diferente.

dim webStatus: webStatus = vbNullString
If Err.Number <> 0 Then
webStatus = ERROR_404
response.write "Error:" & Err.Number & " " & "Desc:" & Err.Description
else
webStatus = xml.status
end if
On Error GoTo 0

5)  Si el estado es “200”

if (webStatus = 200) then
      'Aquí puedes coger todos los datos que necesites
End if

Datos que puedes extraer de la Web

xml.responseText 'Código Html del sitio Web, mostrándolo por pantalla de esta manera response.write "<xmp>" & xml.responseText & "</xmp>"

xml.getOption(-1) 'Extrae la url de la Web, lo que nos ayudaría en caso de una redirección a comprobar si el “site” ha cambiado

Si quieres tener información de las páginas que enlaza nuestro sitio web en cuestión, aquí te dejo el código

'Declaración de Variables

Dim responseT : responseT = vbNullString
Dim registroExpresion : registroExpresion = vbNullString
Dim matches : matches = vbNullString
Dim http : http = vbNullString
Dim match : match = vbNullString

Set http = Server.CreateObject("WinHttp.WinHttpRequest.5.1")    
'http.SetTimeouts resolveTimeout, connectTimeout, sendTimeout, receiveTimeout
http.SetTimeouts 60000, 60000, 600000, 60000
http.Open "GET", site, False
http.Send

'Esperamos unos segundos a que termine la operación de envío asincrónico.
If http.WaitForResponse(5) Then
responseT = http.ResponseText
End If

Set http = Nothing
Set registroExpresion = New RegExp
registroExpresion.IgnoreCase = True
registroExpresion.Global = True

'Creamos la expression regular para extraer la url
registroExpresion.Pattern = "<a href=""(http|https)://(?!" & site & ")(.*?)"""

Set matches = registroExpresion.Execute(responseT)
If matches.Count > 0 Then
For Each match In matches
response.write "URL= " & match.SubMatches(1) & "<br/>"
Next
Else
response.write “No matches”
End If

*Aquí algunos enlaces que pueden ser de utilidad para el desarrollo de este tema:

Para probar expresiones regulares: http://regexr.com/

Sobre expresiones regulares:

Códigos de estados http



miércoles, 9 de julio de 2014

ALGUNAS WEBS INTERESANTES

Para el Diseño de una Web y su Posicionamiento en buscadores podemos encontrar algunas Webs que nos podrían resultar útiles:

*DISEÑO WEB:

Yahoo Smush it (http://www.smushit.com/ysmush.it/): Permite optimizar  las imágenes de nuestro sitio web.

Web Fundamentals Best practices for modern web development:
https://developers.google.com/web/fundamentals/ Buenas prácticas para el desarrollo de webs.

Diseño de una página para obtener el mayor número de conversiones.

Ejemplo de “plantilla perfecta” para el máximo de conversiones: http://lista.wickedshot.de/blue/

Google page speed para móvil y web: http://developers.google.com/speed/pagespeed/insights/

Quirk Tools es una herramienta que permite hacer varias funciones, entre ellas: construir sitemaps, taxonomías o data en forma de árbol, hacer wireframes y prototipos online, probar cómo se ve la web en distintas resoluciones:  http://quirktools.com/

Generador de Sitemap: http://www.xml-sitemaps.com/

Posicionamiento web y HTML5:

Framework para webs responsivas: http://foundation.zurb.com/

*HERRAMIENTAS SEO:

Análisis Social Media en Tiempo Real: http://socialmention.com/

Analiza el rendimiento de la web: http://gtmetrix.com/

Los 200 factores Seo que Google tiene en cuenta a la hora de posicionar:



miércoles, 28 de noviembre de 2012

Microformatos en la Web


Desde hace algunos años atrás ya que está escuchando el concepto de Web Semántica, sin embargo es un tema que no acaba de arrancar, aunque pequeños pasos sí que se están dando al respecto, uno de ellos es la utilización de microformatos en nuestra web.

Los microformatos son entidades que se utilizan para describir una determinada información, por ejemplo:

·         Persona (http://schema.org/Person)
·         Lugar (http://schema.org/Place)
·         Organización/Empresa (http://schema.org/Organization)
·         Evento (http://schema.org/Event)
·         Oferta (http://schema.org/Offer)
·         Comentario/Opinión (http://schema.org/Review )

Cada una de éstas entidades tienen propiedades, por ejemplo ésta última entidad (Comentario) tiene las siguientes propiedades: título o nombre del comentario, autor, día de la publicación, valoración del objeto (establecimiento, producto, ect.) al que se le está haciendo el comentario, descripción, entre otros.

Los microformatos se utilizan dentro de etiquetas html como <span>, <div>, <meta> y dentro de ellos se especifica la propiedad del elemento, utilizando el itemprop=" " y antes de  utilizarlos se debe especificar en un <div> principal (por ejemplo) el tipo de entidad a la que se está haciendo referencia. Siguiendo el ejemplo de la  entidad Comentario, veamos cómo quedarían sus propiedades:

1.     Especificar la entidad, utilizando el div principal:
<div itemprop="review" itemscope itemtype="http://data-vocabulary.org/Review">
2.     Título o tema del que se está hablando:
<span itemprop="itemreviewed">Comentario acerca de...</span>
3.     Autor del comentario:
Comentario de <span itemprop="reviewer">Irina Argota</span>
4.     Fecha del comentario:
<time itemprop="dtreviewed" datetime="2012-11-28">28/12/2012</time>
5.     Descripción del comentario:
<span itemprop="description">Este es mi comentario...</span>
6.     Valoración/Puntuación del comentario:   
Valoración: <span itemprop="rating">90</span>
7.     Mayor Valoración/Puntuación del comentario:
<span itemprop="best">100</span>
 
</div>
Para nuestro  ejemplo, hemos utilizado un determinado microformato, sin embargo otros también pueden ser utilizados:
<div> itemprop="review" itemscope itemtype="http://schema.org/Review"><meta itemprop="name" content="Comentario de Irina"/><div itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating"><meta itemprop="worstRating" content = "1"/><span itemprop="ratingValue">5</span>/<span itemprop="bestRating">5</span>sonrisas</div><p><time itemprop="datePublished"  datetime="2012-11-28">28/11/2012</time><br/><span itemprop="author" class="usuario">Irina</span></p><p itemprop="description" class="comentario">Este es mi Comentario...</p></div>

Para comprobar si estamos utilizando los microformatos correctamente se recomienda utilizar la herramienta de Google para Webmasters “Rich Snippets Testing Tools” donde se puede incluir un código o directamente una página web. Si comprobamos mi primer código, veremos que cómo resultados obtendremos lo que se muestra en la imagen siguiente:


Por el contrario, si probamos con una página web que tenga comentarios: http://www.turispain.com/casas-rurales/huesca/lacasadelarcoverde podremos observar los resultados. En este caso, la web escogida (Turispain.com) tiene una serie de microformatos incorporados que proporcionan significado semántico a su contenido, lo que ayuda a que los buscadores o cualquier herramienta ratreadora de código sepa distinguir la naturaleza de un contenido.
Google mostrará los resultados de los microformatos en sus resultados de búsqueda de la siguiente forma:


A continuación veremos otro ejemplo de uso de microformatos, que podemos probar utilizando la herramienta de Google para webmasters.
<article itemscope itemtype="http://schema.org/LodgingBusiness">           
<div itemprop="geo" itemscope itemtype="http://schema.org/GeoCoordinates">           
          <meta itemprop="latitude" content=" 41.6568307" />
           <meta itemprop="longitude" content=" -0.8799101" />
</div>
<figure itemscope itemtype="http://schema.org/ImageObject">           
         <img itemprop="image" src="http://" width="280px" height="229px" alt="Foto"  title="Foto"/>       
</figure>
       <h2 itemprop="name">Mi Empresa</h2>        
       <address itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">            
             <span itemprop="addressLocality" >Zaragoza</span>, 
             <span itemprop="addressRegion">Zaragoza</span><br/>            
             <span itemprop="streetAddress" >C/Sin Nombre </span>
             <span itemprop="postalCode" >50015</span>        
       </address>        
       <li itemprop="aggregateRating" itemscope itemtype="http://schema.org      /AggregateRating">                        
               <span>Comentarios (<small itemprop="reviewCount">10</small>)</span>            
               <meta itemprop="ratingValue" content="4">
        </li>        
        <div>Precio<br/>                       
              <span itemprop="priceRange">17</span>&euro;</span>        
        </div>
 </article> 

Finalmente, quisiera hacer un breve comentario sobre éste tema, el hecho que utilicemos muchos microformatos no significa que posicionaremos nuestra web en los primeros resultados de Google, ya que ésto llega un mayor trabajo de SEO y SEM, pero sí garantizará que al realizar búsquedas tu web aparezca como resultado relevante diferenciándose de otras web que no le dan un significado semántico a su contenido. Los microformatos se deben utilizar coherentemente, no se trata de poner por poner, si no que hay que saber cuándo y cómo ponerlos, de ahí la necesidad de su comprensión, sugiero que revicen éstas páginas antes de lanzarse a ponerlos: http://schema.org y http://support.google.com/webmasters/bin/answer.py?hl=es&answer=146897&topic=1088472&ctx=topic y esté siempre pendiente de los cambios que puedan surgir sobre éste tema.