Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
GTVolk committed Sep 24, 2021
1 parent 0bd0d78 commit 1fed687
Show file tree
Hide file tree
Showing 8 changed files with 174 additions and 126 deletions.
131 changes: 14 additions & 117 deletions src/main/java/ru/devvault/client/vk/poster/PosterApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,144 +8,41 @@
import com.vk.api.sdk.objects.wall.GetFilter;
import com.vk.api.sdk.objects.wall.WallpostFull;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import ru.devvault.client.vk.poster.configuration.ClientProperties;
import ru.devvault.client.vk.poster.service.PosterService;
import ru.devvault.client.vk.poster.service.VkService;

import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

import static java.util.Objects.deepEquals;
import static java.util.Objects.isNull;

@SpringBootApplication
@AllArgsConstructor
@Slf4j
@RequiredArgsConstructor
public class PosterApplication implements CommandLineRunner {

private final ClientProperties clientProperties;
private final VkService vkService;

private static final Logger log = LoggerFactory.getLogger(PosterApplication.class);
private final PosterService posterService;

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

private void sendTopicComments(GroupFull group) throws InterruptedException {
if (Boolean.FALSE.equals(clientProperties.getPostToGroupsTopics())) return;

Set<Integer> excludedTopics = clientProperties.getExcludedGroupsTopics().get(group.getId());
for (Topic topic : vkService.getGroupTopics(group)) {
if (isNull(excludedTopics) || !excludedTopics.contains(topic.getId())) {

log.info("Selected topic: {}", topic);

TopicComment comment = vkService.getTopicComments(group, topic).stream()
.filter(i -> i.getText().contains(clientProperties.getPostMessageQuery()))
.findAny()
.orElse(null);
if (isNull(comment)) {
if (vkService.createTopicComment(group, topic, clientProperties.getPostMessage()) > 0) {
log.info("Topic comment posted! Group: {}, topic: {}", group, topic);
}
} else {
log.info("Topic comment already exists! Group: {}, topic: {}, comment: {}", group, topic, comment);
}

Thread.sleep(clientProperties.getQueryInterval() * 3);
} else {
log.info("Processing topic excluded! Group: {}, topic: {}", group, topic);
}

Thread.sleep(clientProperties.getQueryInterval());
}
}

private void sendGroupMessage(GroupFull group) throws InterruptedException {
if (Boolean.FALSE.equals(clientProperties.getPostToGroups())) return;

if (!clientProperties.getExcludedGroups().contains(group.getId())) {
WallpostFull post = vkService.getGroupWallPosts(group, GetFilter.SUGGESTS).stream()
.filter(i -> i.getText().contains(clientProperties.getPostMessageQuery()))
.findAny()
.orElse(null);
if (isNull(post)) {
post = vkService.getGroupWallPosts(group, GetFilter.ALL).stream()
.filter(i -> i.getText().contains(clientProperties.getPostMessageQuery()))
.findAny()
.orElse(null);
}
if (isNull(post)) {
if (vkService.createWallPost(group, clientProperties.getPostMessage()).getPostId() > 0) {
log.info("Group message posted! Group: {}", group);
}
} else {
log.info("Post already exists! Group: {}, post: {}", group, post);
}

Thread.sleep(clientProperties.getQueryInterval() * 3);
} else {
log.info("Processing group excluded! Group: {}", group);
}

Thread.sleep(clientProperties.getQueryInterval());
}

@Override
public void run(String ...args) throws Exception {
Boolean authResult = Boolean.FALSE;
switch (clientProperties.getAuthType()) {
case CODE_FLOW:
log.info("Trying to authorize by code flow");
authResult = vkService.authorize(
clientProperties.getAppId(),
clientProperties.getSecretKey(),
clientProperties.getRedirectUri(),
clientProperties.getAuthorizationCode()
);
break;
case TOKEN:
log.info("Trying to authorize by access token");
authResult = vkService.authorize(
clientProperties.getAppId(),
clientProperties.getRedirectUri(),
clientProperties.getUserId(),
clientProperties.getAccessToken()
);
break;
default:
log.error("Unknown auth type");
}

if (Boolean.FALSE.equals(authResult)) {
log.error("Failed to authorize API requests. Check your settings!");

System.exit(1);
}

vkService.setTagPagesQuerySize(clientProperties.getTagPagesQuerySize());
vkService.setTopicCommentsQuerySize(clientProperties.getGroupTopicQuerySize());
vkService.setGroupWallPostsQuerySize(clientProperties.getGroupPostQuerySize());

List<Tag> tags = vkService.getTags().stream()
.filter(tag -> clientProperties.getTags().contains(tag.getName()))
.collect(Collectors.toList());

for (Tag tag : tags) {

log.info("Selected tag: {}", tag);

for (Page page : vkService.getTagPages(tag)) {
GroupFull group = page.getGroup();

log.info("Selected group: {}", group);

sendTopicComments(group);
sendGroupMessage(group);
}
public void run(String ...args) {
try {
System.exit(posterService.process());
} catch (Exception e) {
log.error("Unhandled error exception: {}", e.getMessage());
System.exit(2);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.devvault.client.vk.poster;
package ru.devvault.client.vk.poster.configuration;


import lombok.Getter;
Expand All @@ -7,6 +7,7 @@
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.annotation.Validated;
import ru.devvault.client.vk.poster.enums.AuthType;

import javax.validation.constraints.*;
import java.util.Collections;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.devvault.client.vk.poster;
package ru.devvault.client.vk.poster.configuration;

import com.vk.api.sdk.client.TransportClient;
import com.vk.api.sdk.client.VkApiClient;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.devvault.client.vk.poster;
package ru.devvault.client.vk.poster.enums;

import lombok.AllArgsConstructor;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.devvault.client.vk.poster;
package ru.devvault.client.vk.poster.error;

import com.vk.api.sdk.exceptions.ApiException;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.devvault.client.vk.poster;
package ru.devvault.client.vk.poster.error;

import com.google.gson.annotations.SerializedName;
import com.vk.api.sdk.objects.base.Error;
Expand Down
151 changes: 151 additions & 0 deletions src/main/java/ru/devvault/client/vk/poster/service/PosterService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
package ru.devvault.client.vk.poster.service;

import com.vk.api.sdk.objects.board.Topic;
import com.vk.api.sdk.objects.board.TopicComment;
import com.vk.api.sdk.objects.fave.Page;
import com.vk.api.sdk.objects.fave.Tag;
import com.vk.api.sdk.objects.groups.GroupFull;
import com.vk.api.sdk.objects.wall.GetFilter;
import com.vk.api.sdk.objects.wall.WallpostFull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import ru.devvault.client.vk.poster.configuration.ClientProperties;

import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

import static java.util.Objects.isNull;

@Slf4j
@Service
@RequiredArgsConstructor
public class PosterService {

private final ClientProperties clientProperties;
private final VkService vkService;

public Boolean authorizeClient() {
Boolean authResult = Boolean.FALSE;
switch (clientProperties.getAuthType()) {
case CODE_FLOW:
log.info("Trying to authorize by code flow");
authResult = vkService.authorize(
clientProperties.getAppId(),
clientProperties.getSecretKey(),
clientProperties.getRedirectUri(),
clientProperties.getAuthorizationCode()
);
break;
case TOKEN:
log.info("Trying to authorize by access token");
authResult = vkService.authorize(
clientProperties.getAppId(),
clientProperties.getRedirectUri(),
clientProperties.getUserId(),
clientProperties.getAccessToken()
);
break;
default:
log.error("Unknown auth type");
}

return authResult;
}

private void sendTopicComments(GroupFull group) throws InterruptedException {
if (Boolean.FALSE.equals(clientProperties.getPostToGroupsTopics())) return;

Set<Integer> excludedTopics = clientProperties.getExcludedGroupsTopics().get(group.getId());
for (Topic topic : vkService.getGroupTopics(group)) {
if (isNull(excludedTopics) || !excludedTopics.contains(topic.getId())) {

log.info("Selected topic: {}", topic);

TopicComment comment = vkService.getTopicComments(group, topic).stream()
.filter(i -> i.getText().contains(clientProperties.getPostMessageQuery()))
.findAny()
.orElse(null);
if (isNull(comment)) {
if (vkService.createTopicComment(group, topic, clientProperties.getPostMessage()) > 0) {
log.info("Topic comment posted! Group: {}, topic: {}", group, topic);
} else {
log.error("Topic comment is not created! Group: {}, topic: {}", group, topic);
}
} else {
log.info("Topic comment already exists! Group: {}, topic: {}, comment: {}", group, topic, comment);
}

Thread.sleep(clientProperties.getQueryInterval() * 3);
} else {
log.info("Processing topic excluded! Group: {}, topic: {}", group, topic);
}

Thread.sleep(clientProperties.getQueryInterval());
}
}

private void sendGroupMessage(GroupFull group) throws InterruptedException {
if (Boolean.FALSE.equals(clientProperties.getPostToGroups())) return;

if (!clientProperties.getExcludedGroups().contains(group.getId())) {
WallpostFull post = vkService.getGroupWallPosts(group, GetFilter.SUGGESTS).stream()
.filter(i -> i.getText().contains(clientProperties.getPostMessageQuery()))
.findAny()
.orElse(null);
if (isNull(post)) {
post = vkService.getGroupWallPosts(group, GetFilter.ALL).stream()
.filter(i -> i.getText().contains(clientProperties.getPostMessageQuery()))
.findAny()
.orElse(null);
}
if (isNull(post)) {
if (vkService.createWallPost(group, clientProperties.getPostMessage()).getPostId() > 0) {
log.info("Group message posted! Group: {}", group);
} else {
log.error("Post is not created! Group: {}", group);
}
} else {
log.info("Post already exists! Group: {}, post: {}", group, post);
}

Thread.sleep(clientProperties.getQueryInterval() * 3);
} else {
log.info("Processing group excluded! Group: {}", group);
}

Thread.sleep(clientProperties.getQueryInterval());
}

public Integer process() throws InterruptedException {
if (Boolean.FALSE.equals(authorizeClient())) {
log.error("Failed to authorize API requests. Check your settings!");
return 1;
}

vkService.setTagPagesQuerySize(clientProperties.getTagPagesQuerySize());
vkService.setTopicCommentsQuerySize(clientProperties.getGroupTopicQuerySize());
vkService.setGroupWallPostsQuerySize(clientProperties.getGroupPostQuerySize());

List<Tag> tags = vkService.getTags().stream()
.filter(tag -> clientProperties.getTags().contains(tag.getName()))
.collect(Collectors.toList());

for (Tag tag : tags) {

log.info("Selected tag: {}", tag);

for (Page page : vkService.getTagPages(tag)) {
GroupFull group = page.getGroup();

log.info("Selected group: {}", group);

sendTopicComments(group);
sendGroupMessage(group);
}
}

return 0;
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package ru.devvault.client.vk.poster;
package ru.devvault.client.vk.poster.service;

import com.google.gson.*;
import com.google.gson.stream.JsonReader;
import com.vk.api.sdk.client.AbstractQueryBuilder;
import com.vk.api.sdk.client.TransportClient;
import com.vk.api.sdk.client.VkApiClient;
import com.vk.api.sdk.client.actors.UserActor;
import com.vk.api.sdk.exceptions.*;
import com.vk.api.sdk.httpclient.HttpTransportClient;
import com.vk.api.sdk.objects.UserAuthResponse;
import com.vk.api.sdk.objects.Validable;
import com.vk.api.sdk.objects.base.UserGroupFields;
Expand All @@ -28,6 +26,8 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import ru.devvault.client.vk.poster.error.MyApiException;
import ru.devvault.client.vk.poster.error.MyError;

import java.io.StringReader;
import java.lang.reflect.Type;
Expand All @@ -36,7 +36,6 @@
import java.util.Scanner;

import static java.util.Objects.isNull;
import static java.util.Objects.nonNull;

@Slf4j
@Service
Expand Down

0 comments on commit 1fed687

Please sign in to comment.