Skip to content

Commit

Permalink
Merge pull request #6 from dutwrapper/draft - v1.9.0
Browse files Browse the repository at this point in the history
Bumped to v1.9.0
  • Loading branch information
ZoeMeow1027 committed Apr 3, 2024
2 parents e64086f + 07e4296 commit 4b82634
Show file tree
Hide file tree
Showing 12 changed files with 507 additions and 443 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

This file will list all version log for modified, add or remove function of dutwrapper.

## 1.9.0
- Move all HttpClientWrapper to project root (customrequest2 to HttpClientWrapper).
- Fixed issues causes Account class not working.
- Updated all dependencies to latest.

## 1.8.4
- Update dependencies to latest.
- `NewsGroupByDate` is now interface. Use `NewsGlobalGroupByDate` and `NewsSubjectGroupByDate` for initializing group.
Expand Down
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ plugins {
}

group 'io.dutwrapper.dutwrapper'
version '1.8.4'
version '1.9.0'

repositories {
mavenCentral()
Expand All @@ -22,7 +22,7 @@ dependencies {

// This dependency is used internally, and not exposed to consumers on their own compile classpath.
// Guava - https://mvnrepository.com/artifact/com.google.guava/guava
implementation 'com.google.guava:guava:33.0.0-jre'
implementation 'com.google.guava:guava:33.1.0-jre'

// JSoup - https://mvnrepository.com/artifact/org.jsoup/jsoup
implementation 'org.jsoup:jsoup:1.17.2'
Expand Down
310 changes: 208 additions & 102 deletions src/main/java/io/dutwrapper/dutwrapper/Account.java

Large diffs are not rendered by default.

237 changes: 237 additions & 0 deletions src/main/java/io/dutwrapper/dutwrapper/HttpClientWrapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,237 @@
package io.dutwrapper.dutwrapper;

import java.util.List;
import java.util.concurrent.TimeUnit;

import javax.annotation.Nullable;

import okhttp3.Headers;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;

public class HttpClientWrapper {
public static class Header {
private String name;
private String value;

public Header(String name, String value) {
this.name = name;
this.value = value;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

}

public static class Response {
private Integer statusCode;
private @Nullable String content;
private @Nullable Exception exception;
private @Nullable String message;
private @Nullable String sessionId;

public Response() {
}

public Response(@Nullable Integer statusCode, @Nullable String content, @Nullable Exception exception,
@Nullable String message, @Nullable String sessionId) {
this.content = content;
this.exception = exception;
this.message = message;
this.sessionId = sessionId;
if (statusCode == null) {
this.statusCode = 0;
} else {
this.statusCode = statusCode;
}
}

public Integer getStatusCode() {
return statusCode;
}

public void setStatusCode(Integer statusCode) {
this.statusCode = statusCode;
}

public @Nullable String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public @Nullable Exception getException() {
return exception;
}

public void setException(Exception exception) {
this.exception = exception;
}

public @Nullable String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

public @Nullable String getSessionId() {
return sessionId;
}

public void setSessionId(String sessionId) {
this.sessionId = sessionId;
}

}

private static @Nullable String getSessionIdFromHeader(Headers header) {
try {
// Get cookie
@Nullable
String cookie = null;
String[] cookieKey = { "Set-Cookie", "set-cookie", "Cookie", "cookie" };
for (String key : cookieKey) {
@Nullable
String temp = header.get(key);
if (temp != null) {
cookie = temp;
break;
}
}
if (cookie == null) {
throw new Exception("No cookie in header!");
}

// Get ASP.NET_SessionId from cookie
String splitChar = cookie.contains("; ") ? "; " : ";";
String[] cookieHeaderSplit = cookie.split(splitChar);
for (String item : cookieHeaderSplit) {
if (item.contains("ASP.NET_SessionId")) {
String[] sessionIdSplit = item.split("=");
return sessionIdSplit[1];
}
}
throw new Exception("Not found session id in cookie!");
} catch (Exception ex) {
return null;
}
}

public static Response get(
String url,
@Nullable List<Header> headers,
@Nullable Integer timeout) {
try {
if (timeout == null)
timeout = 60;
if (url == null)
throw new NullPointerException("url cannot be null.");

OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(timeout, TimeUnit.SECONDS)
.readTimeout(timeout, TimeUnit.SECONDS)
.writeTimeout(timeout, TimeUnit.SECONDS)
.build();

Request.Builder requestBuilder = new Request.Builder().url(url)
.addHeader("origin", "http://sv.dut.udn.vn")
.addHeader("referer", "http://sv.dut.udn.vn/PageDangNhap.aspx")
.addHeader("content-type", "text/html; charset=utf-8")
.addHeader("user-agent", Variables.USER_AGENT);
if (headers != null) {
for (Header headerItem : headers) {
requestBuilder.addHeader(headerItem.getName(), headerItem.getValue());
}
}
Request request = requestBuilder.get().build();
okhttp3.Response response = client.newCall(request).execute();

Response result = new Response(
response.code(),
response.body().string(),
null,
response.message(),
getSessionIdFromHeader(response.headers()));

response.close();
return result;
} catch (NullPointerException nullEx) {
return new Response(
null, null, nullEx, nullEx.getMessage(), null);
} catch (Exception ex) {
return new Response(
null, null, ex, ex.getMessage(), null);
}
}

public static Response post(
String url,
byte[] requestBody,
@Nullable List<Header> headers,
@Nullable Integer timeout) {
try {
if (timeout == null)
timeout = 60;
if (url == null)
throw new NullPointerException("url cannot be null.");
if (requestBody == null)
throw new NullPointerException("requestBody cannot be null.");

OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(timeout, TimeUnit.SECONDS)
.readTimeout(timeout, TimeUnit.SECONDS)
.writeTimeout(timeout, TimeUnit.SECONDS)
.build();

RequestBody body = RequestBody.create(requestBody);

Request.Builder requestBuilder = new Request.Builder().url(url)
.addHeader("origin", "http://sv.dut.udn.vn")
.addHeader("referer", "http://sv.dut.udn.vn/PageDangNhap.aspx")
.addHeader("content-type", "application/x-www-form-urlencoded")
.addHeader("user-agent", Variables.USER_AGENT);
if (headers != null) {
for (Header headerItem : headers) {
requestBuilder.addHeader(headerItem.getName(), headerItem.getValue());
}
}
Request request = requestBuilder.post(body).build();
okhttp3.Response response = client.newCall(request).execute();

Response result = new Response(
response.code(),
response.body().string(),
null,
response.message(),
getSessionIdFromHeader(response.headers()));

response.close();
return result;
} catch (NullPointerException nullEx) {
return new Response(
null, null, nullEx, nullEx.getMessage(), null);
} catch (Exception ex) {
return new Response(
null, null, ex, ex.getMessage(), null);
}
}
}
19 changes: 12 additions & 7 deletions src/main/java/io/dutwrapper/dutwrapper/News.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import io.dutwrapper.dutwrapper.customrequest.CustomRequest;
import io.dutwrapper.dutwrapper.customrequest.CustomResponse;
import io.dutwrapper.dutwrapper.model.accounts.LessonItem;
import io.dutwrapper.dutwrapper.model.accounts.SubjectCodeItem;
import io.dutwrapper.dutwrapper.model.enums.LessonStatus;
Expand Down Expand Up @@ -35,6 +33,7 @@

@SuppressWarnings("SpellCheckingInspection")
public class News {
@SuppressWarnings("null")
public static ArrayList<NewsGlobalItem> getNews(
@Nullable NewsType newsType,
@Nullable Integer page,
Expand All @@ -47,15 +46,21 @@ public static ArrayList<NewsGlobalItem> getNews(
searchType == null ? NewsSearchType.ByTitle.toString() : searchType.toString(),
URLEncoder.encode(searchQuery == null ? "" : searchQuery, StandardCharsets.UTF_8.toString()));

// System.out.println(url);
HttpClientWrapper.Response response = HttpClientWrapper.get(url, null, 60);
if (response.getException() != null) {
throw response.getException();
}

CustomResponse response = CustomRequest.get(null, url, 60);
if (response.getReturnCode() < 200 || response.getReturnCode() >= 300) {
throw new Exception("Server was returned with code " + response.getReturnCode() + ".");
if (response.getStatusCode() < 200 || response.getStatusCode() >= 300) {
throw new Exception("Server was returned with code " + response.getStatusCode() + ".");
}

// https://www.baeldung.com/java-with-jsoup
Document webData = Jsoup.parse(response.getContentHtmlString());
if (response.getContent() == null) {
return new ArrayList<>();
}

Document webData = Jsoup.parse(response.getContent());
webData.outputSettings().charset(StandardCharsets.UTF_8);
for (Element el : webData.getElementsByTag("br")) {
el.remove();
Expand Down
Loading

0 comments on commit 4b82634

Please sign in to comment.