diff --git a/README.md b/README.md index 4374250..9c8e7d6 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,18 @@ [![Actions Status](https://github.com/VictorGotsenko/java-project-72/actions/workflows/hexlet-check.yml/badge.svg)](https://github.com/VictorGotsenko/java-project-72/actions) [![Page Validator](https://github.com/VictorGotsenko/java-project-72/actions/workflows/JavaCI.yml/badge.svg)](https://github.com/VictorGotsenko/java-project-72/actions/workflows/JavaCI.yml) ## Description -Page Validator is enabled on link [https://page-validator.onrender.com](https://pagesanalyzer.onrender.com) +#### Application for analyzing links for SEO suitability, is enable on Link Page Analyzer +Приложение – сайт, который анализирует указанные страницы на SEO пригодность. + +![Main page screen](app/img/page1.png) +![Site page screen](app/img/page2.png) + +### How to use: +```shell +make build-run +``` + ++ Used technologies: + - Frontend: Bootstrap, JTE + - Backend: Java, Javalin, LOMBOK, PostgreSQL, H2database, unirest-java, jsoup + - Tests: JUnit, MockWebServer diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 292e171..1cf819e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -47,6 +47,9 @@ dependencies { // Unirest Java implementation("com.konghq:unirest-java:3.14.5") + // jsoup HTML parser library @ https://jsoup.org/ + implementation("org.jsoup:jsoup:1.21.1") + // Tests testImplementation("org.junit.jupiter:junit-jupiter:6.0.0-M1") testImplementation(platform("org.junit:junit-bom:6.0.0-M1")) diff --git a/app/img/page1.png b/app/img/page1.png new file mode 100644 index 0000000..ad812f0 Binary files /dev/null and b/app/img/page1.png differ diff --git a/app/img/page2.png b/app/img/page2.png new file mode 100644 index 0000000..37b1241 Binary files /dev/null and b/app/img/page2.png differ diff --git a/app/src/main/java/hexlet/code/controller/UrlCheckController.java b/app/src/main/java/hexlet/code/controller/UrlCheckController.java index d7b7fa1..6e2f024 100644 --- a/app/src/main/java/hexlet/code/controller/UrlCheckController.java +++ b/app/src/main/java/hexlet/code/controller/UrlCheckController.java @@ -24,6 +24,8 @@ import kong.unirest.Unirest; import kong.unirest.UnirestException; import lombok.extern.slf4j.Slf4j; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; @Slf4j public final class UrlCheckController { @@ -35,12 +37,18 @@ public static void check(Context ctx) throws SQLException { Long urlId = ctx.pathParamAsClass("id", Long.class).get(); Url url = UrlRepository.find(urlId) .orElseThrow(() -> new NotFoundResponse("Entity with id = " + urlId + " not found")); - log.info("Получен ID: {}", urlId); + log.info("Got URL ID: {}", urlId); try { HttpResponse response = Unirest.get(url.getName()).asString(); + Document document = Jsoup.parse(response.getBody()); + int statusCode = response.getStatus(); + log.info("Response getStatus: {}", statusCode); + String title = document.title(); + String h1 = document.select("h1").text(); + String description = document.select("meta[name=description]").attr("content"); - UrlCheck urlCheck = new UrlCheck(urlId, statusCode, "title", "h1", "descrip"); + UrlCheck urlCheck = new UrlCheck(urlId, statusCode, title, h1, description); UrlCheckRepository.save(urlCheck); log.info("check saved"); diff --git a/app/src/main/java/hexlet/code/repository/UrlCheckRepository.java b/app/src/main/java/hexlet/code/repository/UrlCheckRepository.java index 123d510..b1f1d0f 100644 --- a/app/src/main/java/hexlet/code/repository/UrlCheckRepository.java +++ b/app/src/main/java/hexlet/code/repository/UrlCheckRepository.java @@ -1,6 +1,7 @@ package hexlet.code.repository; import hexlet.code.model.UrlCheck; +import lombok.extern.slf4j.Slf4j; import java.sql.Connection; import java.sql.PreparedStatement; @@ -13,7 +14,7 @@ import java.util.List; import java.util.Map; - +@Slf4j public final class UrlCheckRepository { private UrlCheckRepository() { // for Sonar Warning @@ -41,6 +42,7 @@ public static void save(UrlCheck urlCheck) throws SQLException { } } catch (SQLException e) { e.printStackTrace(); + log.info("Error in UrlCheckRepository.save ", e); } } @@ -67,6 +69,7 @@ public static List findById(Long urlId) throws SQLException { result.add(urlCheck); } } catch (SQLException e) { + log.info("Error in UrlCheckRepository.findById ", e); e.printStackTrace(); } return result; @@ -92,6 +95,7 @@ public static Map getLastestChecks() throws SQLException { result.put(urlId, urlCheck); } } catch (SQLException e) { + log.info("Error in UrlCheckRepository.getLastestChecks ", e); e.printStackTrace(); } return result; diff --git a/app/src/main/resources/schema.sql b/app/src/main/resources/schema.sql index ac89e54..72de22b 100644 --- a/app/src/main/resources/schema.sql +++ b/app/src/main/resources/schema.sql @@ -14,7 +14,7 @@ CREATE TABLE url_checks ( status_code INT, title VARCHAR(100), h1 VARCHAR(100), - description VARCHAR(255), + description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (url_id) REFERENCES urls(id) ON DELETE CASCADE -- foreign key with cascade delete ); \ No newline at end of file diff --git a/app/src/main/resources/templates/index.jte b/app/src/main/resources/templates/index.jte index 34a3151..7483edc 100644 --- a/app/src/main/resources/templates/index.jte +++ b/app/src/main/resources/templates/index.jte @@ -27,4 +27,20 @@ content = @` +
+
+
+
+

SEO, или поисковая оптимизация (от англ. Search Engine Optimization) - это комплекс мер и действий, + направленных на улучшение видимости сайта в поисковых системах, таких как Google и Яндекс, с целью + увеличения + органического (бесплатного) трафика на сайт. Простыми словами, SEO помогает сделать ваш сайт более + привлекательным для поисковых роботов и, как следствие, для пользователей, которые ищут информацию в + интернете. +

+
+

Успехов! Ж;-) С наилучшими, Виктор +

+ +
`) \ No newline at end of file diff --git a/app/src/main/resources/templates/layout/page.jte b/app/src/main/resources/templates/layout/page.jte index a119e29..38f1e89 100644 --- a/app/src/main/resources/templates/layout/page.jte +++ b/app/src/main/resources/templates/layout/page.jte @@ -62,5 +62,13 @@ ${content} +