Skip to content

Commit

Permalink
youtube info updated
Browse files Browse the repository at this point in the history
  • Loading branch information
apo2073 committed Dec 8, 2024
1 parent 1214277 commit d9a6d5c
Show file tree
Hide file tree
Showing 10 changed files with 157 additions and 88 deletions.
25 changes: 13 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,17 @@
---

## Dependency
**gradle.kts**
```gradle
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.github.apo2073:YouTubeLiv:Tag'
}
repositories {
mavenCentral()
maven("https://jitpack.io") {
name = "jitpack"
}
}
dependencies {
implementation("com.github.apo2073:YouTubeLiv:Tag")
}
```

---
Expand All @@ -24,15 +26,15 @@ public class Main {
public static void main(String[] args) {
Youtube youtube = new YouTubeBuilder()
.setApiKey("API-KEY")
.setVIDEO_ID("Live-Video-Id") //https://www.youtube.com/watch?v=(here)
.setVideoId("Live-Video-Id") //https://www.youtube.com/watch?v=(here)
.addListener(new YouTubeEventListener() {
@Override
public void onChat(Chatting chat) {
System.out.println(chat.author().getDisplayName()+": "+chat.getMessage());
}
}).build();

Youtube.YouTubeInfo info = youtube.channelInfo();
YouTubeInfo info = youtube.channelInfo();
System.out.println(info.getChannelName()); // Get Channel Name
System.out.println(info.getSubscriptionCount()); // Get Channel Subscription Count
try {
Expand All @@ -41,8 +43,7 @@ public class Main {
throw new RuntimeException(e);
}

youtube.stop();
System.out.println("Stopped");
youtube.stop(); // Stop
}
}
```
Expand Down
4 changes: 2 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ plugins {
}

group = "com.github.apo2073"
version = "1.0.2"
version = "1.1"

repositories {
mavenCentral()
Expand Down Expand Up @@ -41,7 +41,7 @@ publishing {
create<MavenPublication>("maven") {
groupId = "com.github.apo2073"
artifactId = "YoutubeLiv"
version = "1.0.2"
version = "1.1"

from(components["java"])

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/kr/apo2073/ytliv/YouTubeBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class YouTubeBuilder {
boolean isDebug=false;

public YouTubeBuilder setApiKey(String key) {this.API_KEY=key;return this;}
public YouTubeBuilder setVIDEO_ID(String id) {this.VIDEO_ID =id; return this;}
public YouTubeBuilder setVideoId(String id) {this.VIDEO_ID =id; return this;}
public YouTubeBuilder setDebug(boolean debug) {this.isDebug=debug; return this;}
public YouTubeBuilder setPollingInterval(long interval) {this.pollingInterval=interval;return this;}
public YouTubeBuilder addListener(YouTubeEventListener listener) {
Expand Down
86 changes: 86 additions & 0 deletions src/main/java/kr/apo2073/ytliv/YouTubeInfo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package kr.apo2073.ytliv;

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.youtube.YouTube;
import com.google.api.services.youtube.model.Channel;

import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.List;

public class YouTubeInfo {
private final String channelName;
private final String channelSubscriptionCount;
private final Channel channel;
private static String API_KEY;

public static YouTubeInfo from(String videoId, String api) {
try {
YouTube youtube = new YouTube.Builder(
GoogleNetHttpTransport.newTrustedTransport(),
JacksonFactory.getDefaultInstance(),
null
).setApplicationName("YouTubeLiv").build();
API_KEY=api;

return new YouTubeInfo(youtube, videoId);
} catch (GeneralSecurityException | IOException e) {
e.printStackTrace();
return null;
}
}

private YouTubeInfo(YouTube youtube, String videoId) {
Channel tempChannel = null;
String tempName = null;
String tempCount = null;

try {
tempChannel = getChannel(youtube, videoId);
if (tempChannel != null) {
tempName = tempChannel.getSnippet().getTitle();
tempCount = tempChannel.getStatistics().getSubscriberCount().toString();
}
} catch (IOException e) {
e.printStackTrace();
}

this.channel = tempChannel;
this.channelName = tempName;
this.channelSubscriptionCount = tempCount;
}

private Channel getChannel(YouTube youtube, String videoId) throws IOException {
YouTube.Videos.List videoRequest = youtube.videos()
.list(List.of("snippet"))
.setKey(API_KEY)
.setId(List.of(videoId));

var videoResponse = videoRequest.execute();
if (videoResponse.getItems() == null || videoResponse.getItems().isEmpty()) return null;
String channelId = videoResponse.getItems().get(0).getSnippet().getChannelId();

YouTube.Channels.List channelRequest = youtube.channels()
.list(List.of("snippet", "statistics"))
.setKey(API_KEY)
.setId(List.of(channelId));

var channelResponse = channelRequest.execute();
if (channelResponse.getItems() == null || channelResponse.getItems().isEmpty()) return null;

return channelResponse.getItems().get(0);
}

public String getChannelName() {
return channelName;
}

public String getSubscriptionCount() {
return channelSubscriptionCount;
}

public Channel getChannel() {
return channel;
}
}
65 changes: 9 additions & 56 deletions src/main/java/kr/apo2073/ytliv/Youtube.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public Youtube(YouTubeBuilder builder) throws GeneralSecurityException, IOExcept
GoogleNetHttpTransport.newTrustedTransport(),
JacksonFactory.getDefaultInstance(),
null
).build();
).setApplicationName("YouTubeLiv") .build();

validateApiKey();

Expand Down Expand Up @@ -119,10 +119,14 @@ private String getListChatID() throws IOException {
}

private void processMessage(LiveChatMessage message) {
if (!isRunning) return;

if (message.getSnippet().getType().equals(MessageType.SUPER_CHAT_MESSAGE.getType())) {
SuperChat superChat = new SuperChat(
message.getAuthorDetails().getDisplayName(),
message.getSnippet().getSuperChatDetails().getAmountDisplayString(),
message.getSnippet().getSuperChatDetails().getUserComment(),
videoID,
message.getSnippet().getPublishedAt().toString(),
message
);
Expand All @@ -131,8 +135,10 @@ private void processMessage(LiveChatMessage message) {
}
} else if (message.getSnippet().getType().equals(MessageType.SUPER_STICKER_MESSAGE.getType())) {
SuperSticker superSticker = new SuperSticker(
message.getAuthorDetails().getDisplayName(),
message.getSnippet().getSuperStickerDetails().getAmountDisplayString(),
message.getSnippet().getSuperStickerDetails().getSuperStickerMetadata().getStickerId(),
videoID,
message.getSnippet().getPublishedAt().toString(),
message
);
Expand All @@ -142,7 +148,7 @@ private void processMessage(LiveChatMessage message) {
} else if (message.getSnippet().getType().equals(MessageType.TEXT_MESSAGE.getType())) {
String contents = message.getSnippet().getDisplayMessage();
for (YouTubeEventListener listener : listeners) {
listener.onChat(new Chatting(contents, message));
listener.onChat(new Chatting(message.getAuthorDetails().getDisplayName(), contents, videoID, message));
}
}
}
Expand All @@ -154,59 +160,6 @@ private void processError(Exception e) {
}

public YouTubeInfo channelInfo() {
return new YouTubeInfo(youtube);
}

public class YouTubeInfo {
private String channelName;
private String channelSubscriptionCount;
private final YouTube youTube;
private final Channel channel;

public YouTubeInfo(YouTube youTube) {
this.youTube = youTube;
Channel tempChannel = null;
String tempName = null;
String tempCount = null;

try {
tempChannel = getChannel();
if (tempChannel != null) {
tempName = tempChannel.getSnippet().getTitle();
tempCount = tempChannel.getStatistics().getSubscriberCount().toString();
}
} catch (IOException e) {
processError(e);
}

this.channel = tempChannel;
this.channelName = tempName;
this.channelSubscriptionCount = tempCount;
}

public Channel getChannel() throws IOException {
YouTube.Videos.List videoRequest = youTube.videos()
.list(List.of("snippet")).setKey(api).setId(List.of(videoID));

var videoResponse = videoRequest.execute();
if (videoResponse.getItems() == null || videoResponse.getItems().isEmpty()) return null;
String channelId = videoResponse.getItems().get(0).getSnippet().getChannelId();

YouTube.Channels.List channelRequest = youTube.channels()
.list(List.of("snippet", "statistics")).setKey(api).setId(List.of(channelId));

var channelResponse = channelRequest.execute();
if (channelResponse.getItems() == null || channelResponse.getItems().isEmpty()) return null;

return channelResponse.getItems().get(0);
}

public String getChannelName() {
return channelName;
}

public String getSubscriptionCount() {
return channelSubscriptionCount;
}
return YouTubeInfo.from(videoID, api);
}
}
5 changes: 5 additions & 0 deletions src/main/java/kr/apo2073/ytliv/data/Author.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package kr.apo2073.ytliv.data;

import com.google.api.services.youtube.model.LiveChatMessage;

public record Author(String name, LiveChatMessage message) {}
16 changes: 12 additions & 4 deletions src/main/java/kr/apo2073/ytliv/data/Chatting.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,29 @@
package kr.apo2073.ytliv.data;

import com.google.api.services.youtube.model.LiveChatMessage;
import com.google.api.services.youtube.model.LiveChatMessageAuthorDetails;

public class Chatting {
private final String author;
private final String message;
private final LiveChatMessage liveChatMessage;
private final String videoId;

public Chatting(String message, LiveChatMessage liveChatMessage) {
public Chatting(String author, String message, String videoId, LiveChatMessage liveChatMessage) {
this.author = author;
this.message = message;
this.liveChatMessage = liveChatMessage;
this.videoId=videoId;
}

public String getMessage() {
return message;
}
public LiveChatMessageAuthorDetails author() {
return liveChatMessage.getAuthorDetails();

public String getVideoId() {
return videoId;
}

public Author author() {
return new Author(author, liveChatMessage);
}
}
15 changes: 11 additions & 4 deletions src/main/java/kr/apo2073/ytliv/data/SuperChat.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
package kr.apo2073.ytliv.data;

import com.google.api.services.youtube.model.LiveChatMessage;
import com.google.api.services.youtube.model.LiveChatMessageAuthorDetails;

public class SuperChat {
private final String author;
private final String amount;
private final String message;
private final String timestamp;
private final LiveChatMessage liveChatMessage;
private final String videoId;

public SuperChat(String amount, String message, String timestamp, LiveChatMessage liveChatMessage) {
public SuperChat(String author, String amount, String message, String videoId, String timestamp, LiveChatMessage liveChatMessage) {
this.amount = amount;
this.message = message;
this.timestamp = timestamp;
this.liveChatMessage = liveChatMessage;
this.videoId=videoId;
this.author=author;
}
public String getAmount() {
return amount;
Expand All @@ -27,7 +30,11 @@ public String getTimestamp() {
return timestamp;
}

public LiveChatMessageAuthorDetails author() {
return liveChatMessage.getAuthorDetails();
public String getVideoId() {
return videoId;
}

public Author author() {
return new Author(author, liveChatMessage);
}
}
15 changes: 12 additions & 3 deletions src/main/java/kr/apo2073/ytliv/data/SuperSticker.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
package kr.apo2073.ytliv.data;

import com.google.api.services.youtube.model.LiveChatMessage;
import com.google.api.services.youtube.model.LiveChatMessageAuthorDetails;

public class SuperSticker {
private final String author;
private final String amount;
private final String stickerID;
private final String timestamp;
private final LiveChatMessage liveChatMessage;
private final String videoId;

public SuperSticker(String amount, String content, String timestamp, LiveChatMessage liveChatMessage) {
public SuperSticker(String author, String amount, String content, String videoId, String timestamp, LiveChatMessage liveChatMessage) {
this.amount = amount;
this.stickerID = content;
this.timestamp = timestamp;
this.liveChatMessage = liveChatMessage;
this.videoId=videoId;
this.author=author;
}

public String getAmount() {
Expand All @@ -28,5 +31,11 @@ public String getTimestamp() {
return timestamp;
}

public LiveChatMessageAuthorDetails author() {return liveChatMessage.getAuthorDetails();}
public String getVideoId() {
return videoId;
}

public Author author() {
return new Author(author, liveChatMessage);
}
}
Loading

0 comments on commit d9a6d5c

Please sign in to comment.