🔍
1. 定时推送主页更新(百度搜索) 2. 主动推送文章更新(百度搜索) 3. 对象名修正
This commit is contained in:
parent
60346e8f96
commit
164e0376ed
@ -7,6 +7,7 @@ import com.rymcu.vertical.dto.ArticleTagDTO;
|
|||||||
import com.rymcu.vertical.dto.Author;
|
import com.rymcu.vertical.dto.Author;
|
||||||
import com.rymcu.vertical.entity.Article;
|
import com.rymcu.vertical.entity.Article;
|
||||||
import com.rymcu.vertical.entity.ArticleContent;
|
import com.rymcu.vertical.entity.ArticleContent;
|
||||||
|
import com.rymcu.vertical.entity.Tag;
|
||||||
import com.rymcu.vertical.entity.User;
|
import com.rymcu.vertical.entity.User;
|
||||||
import com.rymcu.vertical.mapper.ArticleMapper;
|
import com.rymcu.vertical.mapper.ArticleMapper;
|
||||||
import com.rymcu.vertical.service.ArticleService;
|
import com.rymcu.vertical.service.ArticleService;
|
||||||
@ -19,6 +20,7 @@ import org.apache.commons.text.StringEscapeUtils;
|
|||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import tk.mybatis.mapper.entity.Condition;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
@ -40,10 +42,9 @@ public class ArticleServiceImpl extends AbstractService<Article> implements Arti
|
|||||||
private TagService tagService;
|
private TagService tagService;
|
||||||
@Resource
|
@Resource
|
||||||
private UserService userService;
|
private UserService userService;
|
||||||
@Value("${reserved-words}")
|
|
||||||
private String reservedWords;
|
|
||||||
|
|
||||||
private static final String DOMAIN = "https://rymcu.com";
|
@Value("${resource.domain}")
|
||||||
|
private static String domain;
|
||||||
|
|
||||||
private static final int MAX_PREVIEW = 200;
|
private static final int MAX_PREVIEW = 200;
|
||||||
|
|
||||||
@ -101,82 +102,92 @@ public class ArticleServiceImpl extends AbstractService<Article> implements Arti
|
|||||||
String articleContent = article.getArticleContent();
|
String articleContent = article.getArticleContent();
|
||||||
String articleContentHtml = article.getArticleContentHtml();
|
String articleContentHtml = article.getArticleContentHtml();
|
||||||
User user = UserUtils.getWxCurrentUser();
|
User user = UserUtils.getWxCurrentUser();
|
||||||
boolean checkTags = checkTags(articleTags);
|
String reservedTag = checkTags(articleTags);
|
||||||
boolean notification = false;
|
boolean notification = false;
|
||||||
if (checkTags) {
|
if (StringUtils.isNotBlank(reservedTag)) {
|
||||||
Integer roleWeights = userService.findRoleWeightsByUser(user.getIdUser());
|
Integer roleWeights = userService.findRoleWeightsByUser(user.getIdUser());
|
||||||
if (roleWeights > 2) {
|
if (roleWeights > 2) {
|
||||||
map.put("message", StringEscapeUtils.unescapeJava(reservedWords) + "标签为系统保留标签!");
|
map.put("message", StringEscapeUtils.unescapeJava(reservedTag) + "标签为系统保留标签!");
|
||||||
return map;
|
return map;
|
||||||
} else {
|
} else {
|
||||||
notification = true;
|
notification = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Article article1;
|
Article newArticle;
|
||||||
if(article.getIdArticle() == null || article.getIdArticle() == 0){
|
if(article.getIdArticle() == null || article.getIdArticle() == 0){
|
||||||
article1 = new Article();
|
newArticle = new Article();
|
||||||
article1.setArticleTitle(articleTitle);
|
newArticle.setArticleTitle(articleTitle);
|
||||||
article1.setArticleAuthorId(user.getIdUser());
|
newArticle.setArticleAuthorId(user.getIdUser());
|
||||||
article1.setArticleTags(articleTags);
|
newArticle.setArticleTags(articleTags);
|
||||||
article1.setCreatedTime(new Date());
|
newArticle.setCreatedTime(new Date());
|
||||||
article1.setUpdatedTime(article1.getCreatedTime());
|
newArticle.setUpdatedTime(newArticle.getCreatedTime());
|
||||||
articleMapper.insertSelective(article1);
|
articleMapper.insertSelective(newArticle);
|
||||||
article1.setArticlePermalink(DOMAIN + "/article/"+article1.getIdArticle());
|
newArticle.setArticlePermalink(domain + "/article/"+newArticle.getIdArticle());
|
||||||
article1.setArticleLink("/article/"+article1.getIdArticle());
|
newArticle.setArticleLink("/article/"+newArticle.getIdArticle());
|
||||||
articleMapper.insertArticleContent(article1.getIdArticle(),articleContent,articleContentHtml);
|
articleMapper.insertArticleContent(newArticle.getIdArticle(),articleContent,articleContentHtml);
|
||||||
BaiDuUtils.sendSEOData(article1.getArticlePermalink());
|
BaiDuUtils.sendSEOData(newArticle.getArticlePermalink());
|
||||||
} else {
|
} else {
|
||||||
article1 = articleMapper.selectByPrimaryKey(article.getIdArticle());
|
newArticle = articleMapper.selectByPrimaryKey(article.getIdArticle());
|
||||||
if(!user.getIdUser().equals(article1.getArticleAuthorId())){
|
if(!user.getIdUser().equals(newArticle.getArticleAuthorId())){
|
||||||
map.put("message","非法访问!");
|
map.put("message","非法访问!");
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
article1.setArticleTitle(articleTitle);
|
newArticle.setArticleTitle(articleTitle);
|
||||||
article1.setArticleTags(articleTags);
|
newArticle.setArticleTags(articleTags);
|
||||||
if(StringUtils.isNotBlank(articleContentHtml)){
|
if(StringUtils.isNotBlank(articleContentHtml)){
|
||||||
Integer length = articleContentHtml.length();
|
Integer length = articleContentHtml.length();
|
||||||
if(length > MAX_PREVIEW){
|
if(length > MAX_PREVIEW){
|
||||||
length = 200;
|
length = 200;
|
||||||
}
|
}
|
||||||
String articlePreviewContent = articleContentHtml.substring(0,length);
|
String articlePreviewContent = articleContentHtml.substring(0,length);
|
||||||
article1.setArticlePreviewContent(Html2TextUtil.getContent(articlePreviewContent));
|
newArticle.setArticlePreviewContent(Html2TextUtil.getContent(articlePreviewContent));
|
||||||
}
|
}
|
||||||
article1.setUpdatedTime(new Date());
|
newArticle.setUpdatedTime(new Date());
|
||||||
articleMapper.updateArticleContent(article1.getIdArticle(),articleContent,articleContentHtml);
|
articleMapper.updateArticleContent(newArticle.getIdArticle(),articleContent,articleContentHtml);
|
||||||
|
BaiDuUtils.updateSEOData(newArticle.getArticlePermalink());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (notification) {
|
if (notification) {
|
||||||
NotificationUtils.sendAnnouncement(article1.getIdArticle(), NotificationConstant.Article, article1.getArticleTitle());
|
NotificationUtils.sendAnnouncement(newArticle.getIdArticle(), NotificationConstant.Article, newArticle.getArticleTitle());
|
||||||
}
|
}
|
||||||
|
|
||||||
tagService.saveTagArticle(article1);
|
tagService.saveTagArticle(newArticle);
|
||||||
articleMapper.updateByPrimaryKeySelective(article1);
|
articleMapper.updateByPrimaryKeySelective(newArticle);
|
||||||
|
|
||||||
map.put("id", article1.getIdArticle());
|
map.put("id", newArticle.getIdArticle());
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean checkTags(String articleTags) {
|
private String checkTags(String articleTags) {
|
||||||
if (StringUtils.isNotBlank(reservedWords) && StringUtils.isNotBlank(articleTags)) {
|
// 判断文章是否有标签
|
||||||
String[] words = StringEscapeUtils.unescapeJava(reservedWords).split(",");
|
if(StringUtils.isBlank(articleTags)){
|
||||||
String[] tags = articleTags.split(",");
|
return "";
|
||||||
for(String word: words) {
|
}
|
||||||
if (StringUtils.isBlank(word)) {
|
// 判断是否存在系统配置的保留标签词
|
||||||
|
Condition condition = new Condition(Tag.class);
|
||||||
|
condition.createCriteria().andEqualTo("tagReservation", "1");
|
||||||
|
List<Tag> tags = tagService.findByCondition(condition);
|
||||||
|
if (tags.isEmpty()) {
|
||||||
|
return "";
|
||||||
|
} else {
|
||||||
|
String[] articleTagArr = articleTags.split(",");
|
||||||
|
for (Tag tag : tags) {
|
||||||
|
if (StringUtils.isBlank(tag.getTagTitle())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (String tag: tags) {
|
|
||||||
if (StringUtils.isBlank(tag)) {
|
for (String articleTag: articleTagArr) {
|
||||||
|
if (StringUtils.isBlank(articleTag)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (tag.equals(word)) {
|
if (articleTag.equals(tag.getTagTitle())) {
|
||||||
return true;
|
return tag.getTagTitle();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
24
src/main/java/com/rymcu/vertical/task/BaiduCronTask.java
Normal file
24
src/main/java/com/rymcu/vertical/task/BaiduCronTask.java
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package com.rymcu.vertical.task;
|
||||||
|
|
||||||
|
import com.rymcu.vertical.util.BaiDuUtils;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class BaiduCronTask {
|
||||||
|
|
||||||
|
@Value("${resource.domain}")
|
||||||
|
private String domain;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 定时推送首页更新
|
||||||
|
* */
|
||||||
|
@Scheduled(cron = "0 0 10,14,18 * * ?")
|
||||||
|
public void pushHome() {
|
||||||
|
BaiDuUtils.updateSEOData(domain);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -35,6 +35,48 @@ public class BaiDuUtils {
|
|||||||
},executor);
|
},executor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void updateSEOData(String permalink) {
|
||||||
|
if (StringUtils.isBlank(permalink) || StringUtils.isBlank(token)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ExecutorService executor= new ThreadPoolExecutor(1,1,0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
|
||||||
|
CompletableFuture.supplyAsync(()-> {
|
||||||
|
try {
|
||||||
|
HttpResponse response = HttpRequest.post("http://data.zz.baidu.com/update?site=" + site + "&token=" + token).
|
||||||
|
header("User-Agent", "curl/7.12.1").
|
||||||
|
header("Host", "data.zz.baidu.com").
|
||||||
|
header("Content-Type", "text/plain").
|
||||||
|
header("Connection", "close").body(permalink.getBytes(), "text/plain").timeout(30000).send();
|
||||||
|
response.charset("UTF-8");
|
||||||
|
System.out.println(response.bodyText());
|
||||||
|
} catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
},executor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void deleteSEOData(String permalink) {
|
||||||
|
if (StringUtils.isBlank(permalink) || StringUtils.isBlank(token)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ExecutorService executor= new ThreadPoolExecutor(1,1,0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
|
||||||
|
CompletableFuture.supplyAsync(()-> {
|
||||||
|
try {
|
||||||
|
HttpResponse response = HttpRequest.post("http://data.zz.baidu.com/del?site=" + site + "&token=" + token).
|
||||||
|
header("User-Agent", "curl/7.12.1").
|
||||||
|
header("Host", "data.zz.baidu.com").
|
||||||
|
header("Content-Type", "text/plain").
|
||||||
|
header("Connection", "close").body(permalink.getBytes(), "text/plain").timeout(30000).send();
|
||||||
|
response.charset("UTF-8");
|
||||||
|
System.out.println(response.bodyText());
|
||||||
|
} catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
},executor);
|
||||||
|
}
|
||||||
|
|
||||||
public static void main(String agrs[]){
|
public static void main(String agrs[]){
|
||||||
sendSEOData("https://rymcu.com/article/31");
|
sendSEOData("https://rymcu.com/article/31");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user