2025-05-28 15:16 indexnow 추가

This commit is contained in:
myname 2025-05-28 15:17:04 +09:00
parent 886b550e29
commit f93cf568fe
4 changed files with 130 additions and 0 deletions

View File

@ -66,6 +66,7 @@ import itn.let.sym.site.service.SiteManagerVO;
import itn.let.sym.site.service.TermsVO;
import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.uss.umt.service.UserManageVO;
import itn.let.utl.user.service.IndexNowUtil;
import itn.let.utl.user.service.MjonNoticeSendUtil;
/**
@ -129,6 +130,9 @@ public class EgovSiteManagerController {
@Resource(name = "userManageService")
private EgovUserManageService userManageService;
@Resource(name="indexNowUtil")
private IndexNowUtil indexNowUtil;
/** 알림전송 Util */
@Resource(name = "mjonNoticeSendUtil")
@ -2063,6 +2067,56 @@ public class EgovSiteManagerController {
return "redirect:/sym/site/selectMetaTagList.do";
}
/**
* 메타태그 인택스
*
* @param metaTagVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping("/sym/site/selectMetaTagIndex.do")
public String selectMetaTagIndex(@ModelAttribute("searchVO") MetaTagVO metaTagVO, ModelMap model) throws Exception{
/** paging */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(1);
paginationInfo.setRecordCountPerPage(100000);
paginationInfo.setPageSize(1);
metaTagVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
metaTagVO.setLastIndex(paginationInfo.getLastRecordIndex());
metaTagVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
if("".equals(metaTagVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
metaTagVO.setSearchSortCnd("frstRegistPnttm");
metaTagVO.setSearchSortOrd("desc");
}
metaTagVO.setSearchKeyword("10");
metaTagVO.setSearchCondition("10");
List<MetaTagVO> metaTagList = egovSiteManagerService.selectMetaTagList(metaTagVO);
/*
model.addAttribute("metaTagList", metaTagList);
paginationInfo.setTotalRecordCount( metaTagList.size()> 0 ? metaTagList.get(0).getTotCnt() : 0);
model.addAttribute("paginationInfo", paginationInfo);
*/
for (int i=0;i<metaTagList.size();i++) {
indexNowUtil.submitUrl("https://www.munjaon.co.kr" + metaTagList.get(i).getUrl());
//if (i>2) break;
}
//submitUrl("https://yourdomain.com/new-post.html"); // 🔁 여기에 전송할 실제 URL 입력
//return "/sym/site/metaTagList";
return "redirect:/sym/site/selectMetaTagList.do";
}
/**
* 관리자 알림 여부
*

View File

@ -0,0 +1,56 @@
package itn.let.utl.user.service;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import org.springframework.stereotype.Service;
@Service("indexNowUtil")
public class IndexNowUtil {
private static final String INDEXNOW_API_URL = "https://api.indexnow.org/indexnow";
private static final String INDEXNOW_KEY = "d09a9f949e6e48eeb221d7a13bdb1d14"; // 🔁 여기에 실제 입력
private static final String HOST = "www.munjaon.co.kr"; // 🔁 도메인만 입력 (https:// 없이)
public static void submitUrl(String urlToSubmit) {
try {
URL url = new URL(INDEXNOW_API_URL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json; utf-8");
connection.setDoOutput(true);
// JSON 데이터 구성
String jsonInputString = "{"
+ "\"host\":\"" + HOST + "\","
+ "\"key\":\"" + INDEXNOW_KEY + "\","
+ "\"urlList\":[\"" + urlToSubmit + "\"]"
+ "}";
try (OutputStream os = connection.getOutputStream()) {
byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8);
os.write(input, 0, input.length);
}
int responseCode = connection.getResponseCode();
if (responseCode == 200 || responseCode == 202) {
System.out.println("✅ IndexNow 전송 성공: " + urlToSubmit);
} else {
System.out.println("❌ 전송 실패 - 응답 코드: " + responseCode + " : " + urlToSubmit);
}
} catch (Exception e) {
System.err.println("🚫 오류 발생: " + e.getMessage());
}
}
/*
public static void main(String[] args) {
// 테스트용 URL 전송
submitUrl("https://yourdomain.com/new-post.html"); // 🔁 여기에 전송할 실제 URL 입력
}
*/
}

View File

@ -915,6 +915,9 @@
<isEqual prepend="AND" property="searchCondition" compareValue="2">
MENU_NM LIKE CONCAT('%' , #searchKeyword#, '%')
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="10">
DATE_FORMAT(a.LAST_UPDT_PNTTM,'%Y%m%d') >= DATE_FORMAT(DATE_ADD(NOW(), interval -7 day),'%Y%m%d')
</isEqual>
</isNotEmpty>
ORDER BY 1=1
<isNotEmpty property="searchSortCnd">

View File

@ -40,6 +40,16 @@ function fnInsertView(){
document.listForm.action = "<c:url value='/sym/site/metaTagInsertView.do'/>";
document.listForm.submit();
}
//indexnow
function fnIndexNow(){
if(confirm("index 처리 합니까?")) {
document.listForm.action = "<c:url value='/sym/site/selectMetaTagIndex.do'/>";
document.listForm.submit();
}
}
function fnView(metaTagNo){
document.listForm.metaTagNo.value = metaTagNo ;
document.listForm.action = "<c:url value='/sym/site/metaTagModifyView.do'/>";
@ -103,6 +113,8 @@ function fnDelete(){
<option value='10' <c:if test="${searchVO.pageUnit == '10' or searchVO.pageUnit == ''}">selected</c:if>>10줄</option>
<option value='20' <c:if test="${searchVO.pageUnit == '20'}">selected</c:if>>20줄</option>
<option value='30' <c:if test="${searchVO.pageUnit == '30'}">selected</c:if>>30줄</option>
<option value='100' <c:if test="${searchVO.pageUnit == '100'}">selected</c:if>>100줄</option>
<option value='500' <c:if test="${searchVO.pageUnit == '500'}">selected</c:if>>500줄</option>
</select>
</div>
</div>
@ -181,6 +193,7 @@ function fnDelete(){
<input type="button" class="btnType1" onclick="fnInsertView(); return false;" value="등록">
</div>
<c:if test="${!empty metaTagList}">
<div class="page">
<ul class="inline">
@ -188,6 +201,10 @@ function fnDelete(){
</ul>
</div>
</c:if>
<div class="btnWrap">
<input type="button" class="btnType1" onclick="fnIndexNow(); return false;" value="indexnow">
</div>
</div>
</div>