@@ -31,45 +31,57 @@ public ParsingService(@Value("${static-image.url}") final String basicThumbnail)
3131 this .BASIC_THUMBNAIL = basicThumbnail ;
3232 }
3333
34- public OgResponse getOg (String linkUrl ) throws IOException {
35- try {
36- String title = getTitle (linkUrl );
37- log .info (title );
38- String image = getImage (linkUrl );
39- log .info (image );
40- return OgResponse .of (
41- title == null || title .isBlank () ? "๊ธฐ๋ณธ ํ ์คํธ ์ ๋ชฉ" : title ,
42- image == null || image .isBlank () ? BASIC_THUMBNAIL : image
43- );
44- }catch (HttpStatusException | SSLHandshakeException e ){
45- return OgResponse .of ("15์ ๋ด๋ก ์ ๋ชฉ์ ์ง์ด์ฃผ์ธ์." , BASIC_THUMBNAIL );
46- }catch (ConnectException e ){
47- throw new BadRequestException (Error .BAD_REQUEST_URL , Error .BAD_REQUEST_URL .getMessage ());
48- }
34+ public OgResponse getOg (String linkUrl ) {
35+ String title = getTitle (linkUrl );
36+ log .info (title );
37+ String image = getImage (linkUrl );
38+ log .info (image );
39+ return OgResponse .of (
40+ title == null || title .isBlank () ? "๊ธฐ๋ณธ ํ ์คํธ ์ ๋ชฉ" : title ,
41+ image == null || image .isBlank () ? BASIC_THUMBNAIL : image
42+ );
4943 }
5044 // public String getOg(String linkUrl) throws IOException {
5145 // String image = getImage(linkUrl);
5246 // return image == null || image.isBlank() ? BASIC_THUMBNAIL : image;
5347 // }
5448
55- private String getTitle (String linkUrl ) throws IOException {
49+ private String getTitle (String linkUrl ) {
5650 try {
57- Document doc = Jsoup .connect (linkUrl ).get ();
51+ Document doc = Jsoup .connect (linkUrl )
52+ .followRedirects (true ) // ๋ฆฌ๋ค์ด๋ ์
์๋ ๋ฐ๋ผ๊ฐ๊ธฐ
53+ .maxBodySize (1024 *1024 ) // ํ์ด์ง ํฌ๊ธฐ ์ ํ ์์
54+ .timeout (10000 )
55+ .userAgent ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" )
56+ .get ();
5857 Elements ogTitleElements = doc .select ("meta[property=og:title]" );
5958 Elements titleElements = doc .select ("head" ).select ("title" );
6059 if (ogTitleElements .isEmpty () && titleElements .isEmpty ()) {
61- return null ;
60+ log .info ("[NOT FOUND] og ๋ฐ์ดํฐ, html header ๋ฏ์๋๋ฐ ๊ฒฐ๊ณผ ์์." );
61+ return "15์ ๋ด๋ก ์ ๋ชฉ์ ์ง์ด์ฃผ์ธ์." ;
6262 }
6363 return ogTitleElements .isEmpty ()?titleElements .get (0 ).text (): ogTitleElements .get (0 ).attr ("content" );
6464 }catch (org .jsoup .HttpStatusException e ){
65- return null ;
65+ log .info ("[ERROR] title ํ์ฑ ์ค http status ์๋ฌ ๋ฐ์" );
66+ return "15์ ๋ด๋ก ์ ๋ชฉ์ ์ง์ด์ฃผ์ธ์." ;
67+ } catch (SSLHandshakeException e ){
68+ log .info ("[ERROR] ๋๋ฌด ์ค๋๋ ์ฌ์ดํธ๋ผ handshake ๊ท์น์ด ๋ง์ง ์์ต๋๋ค." );
69+ return "15์ ๋ด๋ก ์ ๋ชฉ์ ์ง์ด์ฃผ์ธ์." ;
70+ } catch (IOException e ){
71+ log .info ("[ERROR] title ํ์ฑ ์ค ์๋ฌ ๋ฐ์" );
72+ return "15์ ๋ด๋ก ์ ๋ชฉ์ ์ง์ด์ฃผ์ธ์." ;
6673 }
67-
6874 }
6975
7076 private String getImage (String linkUrl ){
7177 try {
72- Document doc = Jsoup .connect (linkUrl ).get ();
78+ Document doc = Jsoup .connect (linkUrl )
79+ .followRedirects (true ) // ๋ฆฌ๋ค์ด๋ ์
์๋ ๋ฐ๋ผ๊ฐ๊ธฐ
80+ .maxBodySize (1024 *1024 ) // ํ์ด์ง ํฌ๊ธฐ ์ ํ ์์
81+ .timeout (10000 )
82+ .userAgent ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" )
83+ .get ();
84+
7385 Elements iframes = doc .select ("iframe" );
7486 Elements ogBlogImage = new Elements ();
7587 if (!iframes .isEmpty ()){
@@ -82,7 +94,10 @@ private String getImage(String linkUrl){
8294 return findImageAnywhere (ogImageElements , ogImage , ogBlogImage );
8395 }catch (MalformedURLException e ){
8496 throw new CustomException (Error .MALFORMED_URL_EXEPTION ,Error .MALFORMED_URL_EXEPTION .getMessage ());
85- }catch (org .jsoup .HttpStatusException e ){
97+ }catch (org .jsoup .HttpStatusException e ) {
98+ return null ;
99+ }catch (SSLHandshakeException e ){
100+ log .info ("[ERROR] ๋๋ฌด ์ค๋๋ ์ฌ์ดํธ๋ผ handshake ๊ท์น์ด ๋ง์ง ์์ต๋๋ค." );
86101 return null ;
87102 }catch (IOException e ){
88103 throw new CustomException (Error .NOT_FOUND_IMAGE_EXCEPTION , Error .NOT_FOUND_IMAGE_EXCEPTION .getMessage ());
0 commit comments