Desarrollo
Para iniciar el desarrollo de nuestro buscador interno. Abrimos nuestro eclipse y creamos un proyecto maven.File->New->MavenProjectSeleccionamos en Create a simple project y presionamos Next
LLenamos los siguientes campos y presionamos Finish:
- Group Id: com.tutosoftware.buscafrase2
- Artifact Id: buscafrase2
- Packaging: war
- Name: Busca Frase2
Ahora vemos que tenemos un problema nos vamos a nuestro proyecto y le damos clic derecho donde dice Maven->Update Project..
Nos marcara un error que no encuentra el archivo web.xml pero lo solucionaremos de la siguiente manera, hacemos clic derecho en el proyecto y selecionamos Properties
Selecionamos Project Facets en el recuadro seleccionamos Dynamic Web Module 3.1 y Java Server Faces 2.2 y presionamos Apply posterriormente OK
Creamos una carpeta en src/main/webapp llamada WEB-INF En el directorio WEB-INF creamos el archivo web.xml y escribimos lo siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="3.1">
<display-name>buscafrase2</display-name>
<absolute-ordering/>
<!-- load spring configuration -->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>saga</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
</web-app>
Creamos el archivo faces-config.xml y escribimos lo siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
version="2.2">
</faces-config>
Ahora creamos todas las dependencias en nuestro archivo pom.xml queda de la siguiente forma:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tutosoftware.buscafrase2</groupId>
<artifactId>buscafrase2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Busca Frase2</name>
<repositories>
<repository>
<id>prime-repo</id>
<name>PrimeFaces Maven Repository</name>
<url>http://repository.primefaces.org/</url>
<layout>default</layout>
</repository>
</repositories>
<properties>
<primefaces.version>13.0.1</primefaces.version>
<jsf2.version>2.2.10</jsf2.version>
<jstl.version>1.2</jstl.version>
<jsp-api.version>2.1</jsp-api.version>
<servlet-api.version>3.1.0</servlet-api.version>
<itext.version>2.1.7</itext.version>
<poi.version>3.17</poi.version>
<elri.version>1.0</elri.version>
<javaeewebapi.version>7.0</javaeewebapi.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>${primefaces.version}</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>${jsf2.version}</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>${jsf2.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet-api.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>com.sun.el</groupId>
<artifactId>el-ri</artifactId>
<version>${elri.version}</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>${javaeewebapi.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>${itext.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.3</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.12</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.11</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Aparece un error damos Maven->Update project y se quita.
En src/main/java creamos el paquete com.tutosoftware.buscafrase2.model
En este paquete creamos la clase Busqueda y escribimos:
package com.tutosoftware.buscafrase2.model;
public class Busqueda {
private String frase;
private String link;
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getFrase() {
return frase;
}
public void setFrase(String frase) {
this.frase = frase;
}
}
Ahora creamos el paquete com.tutosoftware.buscafrase2.view
En este paquete creamos la clase BusquedaView
package com.tutosoftware.buscafrase2.view;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import com.tutosoftware.buscafrase2.model.Busqueda;
@ManagedBean
@ViewScoped
public class BusquedaView implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private List<Busqueda> busquedas = new ArrayList<>();
private String numFrase;
private String palabraBusqueda;
private String baseUrl="";
private int inicio;
private int fin;
public List<Busqueda> getBusquedas() {
return busquedas;
}
public void setBusquedas(List<Busqueda> busquedas) {
this.busquedas = busquedas;
}
public String getNumFrase() {
return numFrase;
}
public void setNumFrase(String numFrase) {
this.numFrase = numFrase;
}
public String getPalabraBusqueda() {
return palabraBusqueda;
}
public void setPalabraBusqueda(String palabraBusqueda) {
this.palabraBusqueda = palabraBusqueda;
}
public void buscar() throws IOException {
busquedas.clear();
if(numFrase.equals("frases")) {
baseUrl="https://tutosoftware.com/tutoriales/frases/";
inicio=0;
fin=58;
}
if(numFrase.equals("frases2")) {
baseUrl="https://tutosoftware.com/tutoriales/frases2/";
inicio=1;
fin=59;
}
if(numFrase.equals("frases3")) {
baseUrl="https://tutosoftware.com/tutoriales/frases3/";
inicio=2;
fin=60;
}
if(numFrase.equals("frases4")) {
baseUrl="https://tutosoftware.com/tutoriales/frases4/";
inicio=3;
fin=61;
}
if(numFrase.equals("frases5")) {
baseUrl="https://tutosoftware.com/tutoriales/frases5/";
inicio=4;
fin=62;
}
if(numFrase.equals("frases6")) {
baseUrl="https://tutosoftware.com/tutoriales/frases6/";
inicio=5;
fin=33;
}
Document doc = Jsoup.connect(baseUrl)
.userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36")
.get();
Elements nextElements = doc.select("li");
while (inicio<=fin) {
Element ne =nextElements.get(inicio);
String relativeUrl =ne.getElementsByTag("a").first().attr("href");
String completeUrl = baseUrl + relativeUrl;
doc = Jsoup
.connect(completeUrl)
.userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36")
.get();
Elements h3s = doc.select("h3");
Elements h1s = doc.select("h1");
for(Element h3:h3s) {
String texto= h3.select("h3").first().text();
if(texto.contains(palabraBusqueda)) {
Busqueda busca=new Busqueda();
busca.setLink(completeUrl);
busca.setFrase(texto);
busquedas.add(busca);
//System.out.println(completeUrl);
//System.out.println(texto);
}
}
for(Element h1:h1s) {
String titulo= h1.select("h1").first().text();
if(titulo.contains(palabraBusqueda)) {
Busqueda busca=new Busqueda();
busca.setLink(completeUrl);
busca.setFrase(titulo);
//System.out.println(completeUrl);
//System.out.println(titulo);
busquedas.add(busca);
}
}
inicio++;
}
}
public void limpiar() {
busquedas.clear();
}
}
En el directorio src/main/webapp creamos el archivo index.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<div style="margin:0 auto;width:70%">
<h1>BuscaFrases</h1>
<h:form>
<p:panel header="Busca tu frase y elige directorio " footer="Tutosoftware">
<h:panelGrid columns="4" cellpadding="5">
<h:outputLabel value="Palabra" for="palabraBusqueda" />
<p:inputText id="palabraBusqueda" value="#{busquedaView.palabraBusqueda}" label="Búsqueda">
</p:inputText>
<p:selectOneMenu id="numFrase" value="#{busquedaView.numFrase}">
<f:selectItem itemLabel="Frases I" itemValue="frases"/>
<f:selectItem itemLabel="Frases II" itemValue="frases2"/>
<f:selectItem itemLabel="Frases III" itemValue="frases3"/>
<f:selectItem itemLabel="Frases IV" itemValue="frases4"/>
<f:selectItem itemLabel="Frases V" itemValue="frases5"/>
<f:selectItem itemLabel="Frases VI" itemValue="frases6"/>
<f:facet name="footer">
<p:divider styleClass="mt-0" />
<h:outputText value="6 opciones" style="font-weight:bold;"/>
</f:facet>
</p:selectOneMenu>
<p:commandButton value="Buscar" action="#{busquedaView.buscar()}" update="busquedas" > </p:commandButton>
<f:facet name="footer">
<p:commandButton value="limpiar" action="#{busquedaView.limpiar()}" update="busquedas" > </p:commandButton>
</f:facet>
</h:panelGrid>
<p:dataView id="busquedas" var="bus" value="#{busquedaView.busquedas}" rows="12" paginator="true"
rowsPerPageTemplate="6,12,16"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
gridIcon="pi pi-th-large" listIcon="pi pi-bars"
>
<p:dataViewListItem >
<a href="#{bus.link}" >#{bus.link}</a>
<h:outputText value="#{bus.frase}" >
</h:outputText>
</p:dataViewListItem>
</p:dataView>
</p:panel>
</h:form>
</div>
</h:body>
</html>