Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Знатнин Ярослав #16

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr

### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/

### Mac OS ###
.DS_Store
8 changes: 8 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions .idea/encodings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

124 changes: 124 additions & 0 deletions .idea/uiDesigner.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,19 @@
1. Реализация должна содержать, как минимум, одну процедуру (функцию/метод), отвечающую за поиск уникальных ресурсов, и должна быть описана в readme.md в соответствии с чек-листом;
2. В качестве входных данных программа использует реальный html-файл (page.html) , считав который, начинает выполнять поиск;
3. Процедура (функция/метод) поиска должна возвращать строку в формате json следующего формата:
- {«sites»: [«mail.ru», «rbc.ru», «ria.ru»]}
- {«sites»: [«mail.ru», «rbc.ru», «ria.ru»]}
4. Найденные в соответствии с условием задачи домены должны выводиться в нижнем регистре без указания протокола и «www» в алфавитном порядке.

## Автор решения
Знатнин Ярослав Игоревич

## Описание реализации
По get-запросу localhost:8080/api/v1/get_domains с указанной ссылкой на конкретную страницу (параметр запроса - "url") приложение возвращает строку json, содержащую все внешние ссылки

### Пример:
Запрос: localhost:8080/api/v1/get_domains?url=https://www.youtube.com/

Ответ: {"sites":["google.com","microsoft.com","mozilla.org","opera.com","support.google.com","youtube.com"]}

## Инструкция по сборке и запуску решения
В файле application.yaml по умолчанию установлен порт 8080, сменить по необходимости
46 changes: 46 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<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.znyar</groupId>
<artifactId>croc-test</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.17.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.2.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20240303</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.32</version>
<scope>provided</scope>
</dependency>

</dependencies>

</project>
13 changes: 13 additions & 0 deletions src/main/java/com/znyar/HtmlParserApplication.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.znyar;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HtmlParserApplication {

public static void main(String[] args) {
SpringApplication.run(HtmlParserApplication.class, args);
}

}
20 changes: 20 additions & 0 deletions src/main/java/com/znyar/connection/Connection.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.znyar.connection;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;

public class Connection
{
public static Document getURLSource(String url) {
try {
return Jsoup.connect(url)
.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0")
.get();
} catch (IOException e) {
throw new RuntimeException(e);
}
}

}
22 changes: 22 additions & 0 deletions src/main/java/com/znyar/controller/PageUrlController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.znyar.controller;

import com.znyar.service.HtmlPageService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/v1")
@RequiredArgsConstructor
public class PageUrlController {

private final HtmlPageService htmlPageService;

@GetMapping("/get_domains")
public String getDomains(@RequestParam(value = "url") String url) {
return htmlPageService.getDomainsJson(url);
}

}
36 changes: 36 additions & 0 deletions src/main/java/com/znyar/exception/CustomErrorController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.znyar.exception;

import lombok.RequiredArgsConstructor;
import org.springframework.boot.web.error.ErrorAttributeOptions;
import org.springframework.boot.web.servlet.error.ErrorAttributes;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.context.request.WebRequest;

import java.util.Map;

@Controller
@RequiredArgsConstructor
public class CustomErrorController implements ErrorController {
private static final String PATH = "/error";

private final ErrorAttributes errorAttributes;

@RequestMapping(PATH)
public ResponseEntity<ErrorDto> error(WebRequest webRequest) {
Map<String, Object> attributes = errorAttributes.getErrorAttributes(
webRequest,
ErrorAttributeOptions.of(ErrorAttributeOptions.Include.EXCEPTION, ErrorAttributeOptions.Include.MESSAGE)
);
return ResponseEntity
.status((Integer) attributes.get("status"))
.body(ErrorDto
.builder()
.error((String) attributes.get("error"))
.errorDescription((String) attributes.get("message"))
.build()
);
}
}
20 changes: 20 additions & 0 deletions src/main/java/com/znyar/exception/CustomExceptionHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.znyar.exception;

import lombok.extern.log4j.Log4j2;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

@Log4j2
@ControllerAdvice
public class CustomExceptionHandler extends ResponseEntityExceptionHandler {

@ExceptionHandler(Exception.class)
public ResponseEntity<Object> exception(Exception ex, WebRequest request) throws Exception {
log.error("Exception during execution of application", ex);
return handleException(ex, request);
}

}
Loading