add getting addition data from the github api
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
a03206a8e1
commit
46382334cb
|
@ -0,0 +1,77 @@
|
||||||
|
package tag.matcherImplementations;
|
||||||
|
|
||||||
|
import datastructures.json.JSONParser;
|
||||||
|
import link.LinkUrl;
|
||||||
|
import tag.OptionalTag;
|
||||||
|
import tag.Tag;
|
||||||
|
import tag.TagMatcher;
|
||||||
|
import tag.TagName;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.ProtocolException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||||
|
|
||||||
|
public class GitHubTagMatcher extends TagMatcher {
|
||||||
|
|
||||||
|
public GitHubTagMatcher() {
|
||||||
|
tagName = new TagName("github");
|
||||||
|
}
|
||||||
|
|
||||||
|
public TagName getName() {
|
||||||
|
return tagName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAdditionInfo(String urlPath) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
URL url = new URL("https://api.github.com/repos" + urlPath);
|
||||||
|
HttpURLConnection con = (HttpURLConnection) url.openConnection();
|
||||||
|
con.setRequestMethod("GET");
|
||||||
|
|
||||||
|
con.setRequestProperty("accept", "application/vnd.github.v3+json");
|
||||||
|
|
||||||
|
// This line makes the request
|
||||||
|
InputStream responseStream = con.getInputStream();
|
||||||
|
|
||||||
|
String text = new String(responseStream.readAllBytes(), UTF_8);
|
||||||
|
|
||||||
|
var parsedJSON = (Map<?, ?>) JSONParser.parseJSON(text);
|
||||||
|
|
||||||
|
return (String) parsedJSON.get("description");
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (JSONParser.JSONParseException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
catch (ProtocolException e) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
catch (MalformedURLException e) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
catch (ClassCastException e) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OptionalTag ifMatches(LinkUrl linkUrl) {
|
||||||
|
if (linkUrl.getUrl().getHost().equals("github.com")) {
|
||||||
|
|
||||||
|
String additionInfo = getAdditionInfo(linkUrl.getUrl().getPath());
|
||||||
|
return OptionalTag.of(new Tag(getName()).addAdditionalData(additionInfo));
|
||||||
|
}
|
||||||
|
return OptionalTag.empty();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package tag.matcherImplementations;
|
||||||
|
|
||||||
|
import link.LinkUrl;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
class GitHubTagMatcherTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void gettingDescriptionWorks() {
|
||||||
|
|
||||||
|
var sut = new GitHubTagMatcher();
|
||||||
|
|
||||||
|
var tag = sut.ifMatches(new LinkUrl("https://github.com/filefighter/Webapp")).getTag().orElseThrow();
|
||||||
|
|
||||||
|
assertEquals("Frontend Service for FileFighter", tag.getAdditionalData().orElseThrow());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,30 +0,0 @@
|
||||||
package tag.matcherImplementations;
|
|
||||||
|
|
||||||
import link.LinkUrl;
|
|
||||||
import tag.OptionalTag;
|
|
||||||
import tag.Tag;
|
|
||||||
import tag.TagMatcher;
|
|
||||||
import tag.TagName;
|
|
||||||
|
|
||||||
public class GitHubTagMatcher extends TagMatcher {
|
|
||||||
|
|
||||||
public GitHubTagMatcher() {
|
|
||||||
tagName = new TagName("github");
|
|
||||||
}
|
|
||||||
|
|
||||||
public TagName getName() {
|
|
||||||
return tagName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAdditionInfo() {
|
|
||||||
return "";//TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OptionalTag ifMatches(LinkUrl linkUrl) {
|
|
||||||
if (linkUrl.getUrl().getHost().equals("github.com")) {
|
|
||||||
return OptionalTag.of(new Tag(getName()).addAdditionalData(getAdditionInfo()));
|
|
||||||
}
|
|
||||||
return OptionalTag.empty();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,128 @@
|
||||||
|
package datastructures.json;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Totally not stolen from https://github.com/KasparNagu/plain-java-json
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class JSONParser {
|
||||||
|
|
||||||
|
public static Object parseJSONFile(String file) throws JSONParseException, IOException {
|
||||||
|
return parseJSON(Paths.get(file));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Object parseJSON(String text) throws JSONParseException {
|
||||||
|
return parseJSON(new Scanner(text));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Object parseJSON(Path file) throws JSONParseException, IOException {
|
||||||
|
return parseJSON(new Scanner(file));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Object parseJSON(Scanner s) throws JSONParseException {
|
||||||
|
Object ret = null;
|
||||||
|
skipWhitespace(s);
|
||||||
|
if (s.findWithinHorizon("\\{", 1) != null) {
|
||||||
|
HashMap<Object, Object> retMap = new HashMap<>();
|
||||||
|
ret = retMap;
|
||||||
|
skipWhitespace(s);
|
||||||
|
if (s.findWithinHorizon("\\}", 1) == null) {
|
||||||
|
while (s.hasNext()) {
|
||||||
|
Object key = parseJSON(s);
|
||||||
|
skipWhitespace(s);
|
||||||
|
if (s.findWithinHorizon(":", 1) == null) {
|
||||||
|
fail(s, ":");
|
||||||
|
}
|
||||||
|
Object value = parseJSON(s);
|
||||||
|
retMap.put(key, value);
|
||||||
|
skipWhitespace(s);
|
||||||
|
if (s.findWithinHorizon(",", 1) == null) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (s.findWithinHorizon("\\}", 1) == null) {
|
||||||
|
fail(s, "}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (s.findWithinHorizon("\"", 1) != null) {
|
||||||
|
ret = s.findWithinHorizon("(\\\\\\\\|\\\\\"|[^\"])*", 0)
|
||||||
|
.replace("\\\\", "\\")
|
||||||
|
.replace("\\\"", "\"");
|
||||||
|
if (s.findWithinHorizon("\"", 1) == null) {
|
||||||
|
fail(s, "quote");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (s.findWithinHorizon("'", 1) != null) {
|
||||||
|
ret = s.findWithinHorizon("(\\\\\\\\|\\\\'|[^'])*", 0);
|
||||||
|
if (s.findWithinHorizon("'", 1) == null) {
|
||||||
|
fail(s, "quote");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (s.findWithinHorizon("\\[", 1) != null) {
|
||||||
|
ArrayList<Object> retList = new ArrayList<>();
|
||||||
|
ret = retList;
|
||||||
|
skipWhitespace(s);
|
||||||
|
if (s.findWithinHorizon("\\]", 1) == null) {
|
||||||
|
while (s.hasNext()) {
|
||||||
|
retList.add(parseJSON(s));
|
||||||
|
skipWhitespace(s);
|
||||||
|
if (s.findWithinHorizon(",", 1) == null) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (s.findWithinHorizon("\\]", 1) == null) {
|
||||||
|
fail(s, ", or ]");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (s.findWithinHorizon("true", 4) != null) {
|
||||||
|
ret = true;
|
||||||
|
}
|
||||||
|
else if (s.findWithinHorizon("false", 5) != null) {
|
||||||
|
ret = false;
|
||||||
|
}
|
||||||
|
else if (s.findWithinHorizon("null", 4) != null) {
|
||||||
|
ret = null;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
String numberStart = s.findWithinHorizon("[-0-9+eE]", 1);
|
||||||
|
if (numberStart != null) {
|
||||||
|
String numStr = numberStart + s.findWithinHorizon("[-0-9+eE.]*", 0);
|
||||||
|
if (numStr.contains(".") | numStr.contains("e")) {
|
||||||
|
ret = Double.valueOf(numStr);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ret = Long.valueOf(numStr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw new JSONParseException("No JSON value found. Found: " + s.findWithinHorizon(".{0,5}", 5));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void fail(Scanner scanner, String expected) throws JSONParseException {
|
||||||
|
throw new JSONParseException("Expected " + expected + " but found:" + scanner.findWithinHorizon(".{0,5}", 5));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void skipWhitespace(Scanner s) {
|
||||||
|
s.findWithinHorizon("\\s*", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class JSONParseException extends Exception {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 7078320816065460L;
|
||||||
|
|
||||||
|
public JSONParseException(String cause) {
|
||||||
|
super(cause);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue