mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-03-19 20:21:14 +00:00
[AB-xxx] adding wikipedia and dictionary features
This commit is contained in:
@@ -4,4 +4,6 @@ public class WebServicesSlashCommandNames {
|
||||
public static final String YOUTUBE = "youtube";
|
||||
public static final String URBAN = "urban";
|
||||
public static final String WEATHER = "weather";
|
||||
public static final String WIKIPEDIA = "wikipedia";
|
||||
public static final String DICTIONARY = "dictionary";
|
||||
}
|
||||
|
||||
@@ -8,7 +8,9 @@ public enum WebserviceFeatureDefinition implements FeatureDefinition {
|
||||
YOUTUBE("youtube"),
|
||||
URBAN_DICTIONARY("urban"),
|
||||
THREAD_READER("threadReader"),
|
||||
OPEN_WEATHER_MAP("openWeatherMap");
|
||||
OPEN_WEATHER_MAP("openWeatherMap"),
|
||||
WIKIPEDIA("wikipedia"),
|
||||
DICTIONARY("dictionary");
|
||||
|
||||
private String key;
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package dev.sheldan.abstracto.webservices.dictionaryapi.config;
|
||||
|
||||
import dev.sheldan.abstracto.core.config.FeatureConfig;
|
||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||
import dev.sheldan.abstracto.webservices.config.WebserviceFeatureDefinition;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class DictionaryApiFeatureConfig implements FeatureConfig {
|
||||
|
||||
@Override
|
||||
public FeatureDefinition getFeature() {
|
||||
return WebserviceFeatureDefinition.DICTIONARY;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package dev.sheldan.abstracto.webservices.dictionaryapi.exception;
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||
import dev.sheldan.abstracto.core.templating.Templatable;
|
||||
|
||||
public class DictionaryApiRequestException extends AbstractoRunTimeException implements Templatable {
|
||||
|
||||
public DictionaryApiRequestException(Integer responseCode) {
|
||||
super(String.format("Request failure towards dictionary api %s.", responseCode));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTemplateName() {
|
||||
return "dictionary_api_request_exception";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getTemplateModel() {
|
||||
return new Object();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package dev.sheldan.abstracto.webservices.dictionaryapi.exception;
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||
import dev.sheldan.abstracto.core.templating.Templatable;
|
||||
|
||||
public class NoDictionaryApiDefinitionFoundException extends AbstractoRunTimeException implements Templatable {
|
||||
public NoDictionaryApiDefinitionFoundException() {
|
||||
super("No dictionary api definition found.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTemplateName() {
|
||||
return "no_dictionary_api_definition_found_exception";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getTemplateModel() {
|
||||
return new Object();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package dev.sheldan.abstracto.webservices.dictionaryapi.model;
|
||||
|
||||
import dev.sheldan.abstracto.webservices.dictionaryapi.model.api.DictionaryApiWordDefinition;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
@Setter
|
||||
public class WordDefinition {
|
||||
private String definition;
|
||||
private String example;
|
||||
|
||||
public static WordDefinition fromResponseDefinition(DictionaryApiWordDefinition responseItem) {
|
||||
return WordDefinition
|
||||
.builder()
|
||||
.example(responseItem.getExample())
|
||||
.definition(responseItem.getDefinition())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package dev.sheldan.abstracto.webservices.dictionaryapi.model;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
@Setter
|
||||
public class WordMeaning {
|
||||
private String word;
|
||||
private List<WordDefinition> definitions;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package dev.sheldan.abstracto.webservices.dictionaryapi.model.api;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
@Setter
|
||||
public class DictionaryApiResponseItem {
|
||||
private String word;
|
||||
private String origin;
|
||||
private List<DictionaryApiWordMeaning> meanings;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package dev.sheldan.abstracto.webservices.dictionaryapi.model.api;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class DictionaryApiWordDefinition {
|
||||
private String definition;
|
||||
private String example;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package dev.sheldan.abstracto.webservices.dictionaryapi.model.api;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class DictionaryApiWordMeaning {
|
||||
private String partOfSpeech;
|
||||
private List<DictionaryApiWordDefinition> definitions;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package dev.sheldan.abstracto.webservices.dictionaryapi.model.template;
|
||||
|
||||
import dev.sheldan.abstracto.webservices.dictionaryapi.model.WordDefinition;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
public class DictionaryDefinition {
|
||||
private String definition;
|
||||
private String example;
|
||||
|
||||
public static DictionaryDefinition fromWordDefinition(WordDefinition definition) {
|
||||
return DictionaryDefinition
|
||||
.builder()
|
||||
.example(definition.getExample())
|
||||
.definition(definition.getDefinition())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package dev.sheldan.abstracto.webservices.dictionaryapi.model.template;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
public class DictionaryMeaning {
|
||||
private String word;
|
||||
private List<DictionaryDefinition> definitions;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package dev.sheldan.abstracto.webservices.dictionaryapi.service;
|
||||
|
||||
import dev.sheldan.abstracto.webservices.dictionaryapi.model.WordMeaning;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public interface DictionaryApiService {
|
||||
WordMeaning getDefinitions(String query) throws IOException;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package dev.sheldan.abstracto.webservices.wikipedia.config;
|
||||
|
||||
import dev.sheldan.abstracto.core.config.FeatureConfig;
|
||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||
import dev.sheldan.abstracto.webservices.config.WebserviceFeatureDefinition;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class WikipediaFeatureConfig implements FeatureConfig {
|
||||
|
||||
public static final String WIKIPEDIA_LANGUAGE_KEY_SYSTEM_CONFIG_KEY = "wikipediaLanguageKey";
|
||||
@Override
|
||||
public FeatureDefinition getFeature() {
|
||||
return WebserviceFeatureDefinition.WIKIPEDIA;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getRequiredSystemConfigKeys() {
|
||||
return Arrays.asList(WIKIPEDIA_LANGUAGE_KEY_SYSTEM_CONFIG_KEY);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package dev.sheldan.abstracto.webservices.wikipedia.exception;
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||
import dev.sheldan.abstracto.core.templating.Templatable;
|
||||
|
||||
public class NoWikipediaArticleFoundException extends AbstractoRunTimeException implements Templatable {
|
||||
public NoWikipediaArticleFoundException() {
|
||||
super("No wikipedia article found.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTemplateName() {
|
||||
return "no_wikipedia_article_found_exception";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getTemplateModel() {
|
||||
return new Object();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package dev.sheldan.abstracto.webservices.wikipedia.exception;
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||
import dev.sheldan.abstracto.core.templating.Templatable;
|
||||
|
||||
public class WikipediaRequestException extends AbstractoRunTimeException implements Templatable {
|
||||
|
||||
public WikipediaRequestException(Integer responseCode) {
|
||||
super(String.format("Request failure towards wikipedia %s.", responseCode));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTemplateName() {
|
||||
return "wikipedia_request_exception";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getTemplateModel() {
|
||||
return new Object();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package dev.sheldan.abstracto.webservices.wikipedia.model;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class WikipediaArticleSummary {
|
||||
private String title;
|
||||
private String summary;
|
||||
private String fullURL;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package dev.sheldan.abstracto.webservices.wikipedia.model.api;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class WikipediaResponse {
|
||||
private WikipediaResponseQuery query;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package dev.sheldan.abstracto.webservices.wikipedia.model.api;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class WikipediaResponsePage {
|
||||
@SerializedName("pageid")
|
||||
private Long pageId;
|
||||
private String title;
|
||||
private String extract;
|
||||
@SerializedName("fullurl")
|
||||
private String fullUrl;
|
||||
private Map<String, String> pageprops;
|
||||
|
||||
public boolean isDisambiguation() {
|
||||
return pageprops != null && pageprops.containsKey("disambiguation");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package dev.sheldan.abstracto.webservices.wikipedia.model.api;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class WikipediaResponseQuery {
|
||||
private List<WikipediaResponsePage> pages;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package dev.sheldan.abstracto.webservices.wikipedia.model.template;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class WikipediaArticleSummaryModel {
|
||||
private String summary;
|
||||
private String title;
|
||||
private String fullURL;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package dev.sheldan.abstracto.webservices.wikipedia.service;
|
||||
|
||||
import dev.sheldan.abstracto.webservices.wikipedia.model.WikipediaArticleSummary;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public interface WikipediaService {
|
||||
WikipediaArticleSummary getSummary(String query, String language) throws IOException;
|
||||
}
|
||||
Reference in New Issue
Block a user