Java 如何检查twitch.tv中的流是否打开?
下面是我的Java 如何检查twitch.tv中的流是否打开?,java,twitch,Java,Twitch,下面是我的getStream方法的代码: public static Twitch_Stream getStream(String channelname) { try { String json = API.readJsonFromUrl("https://api.twitch.tv/kraken/streams?channel=" + channelname); Twitch_Stream stream = new Twitc
getStream
方法的代码:
public static Twitch_Stream getStream(String channelname) {
try {
String json = API.readJsonFromUrl("https://api.twitch.tv/kraken/streams?channel=" + channelname);
Twitch_Stream stream = new Twitch_Stream();
if (json.equalsIgnoreCase("[]")) {
stream.setOnline(false);
return stream;
}
JsonArray jb = gson.fromJson(json, JsonArray.class);
if (jb.size() != 0) {
JsonObject jo = (JsonObject) jb.get(0);
stream.setOnline(true);
stream.load(jo);
}
return stream;
} catch (Exception error) {
error.printStackTrace();
}
return null;
}
这是Twitch_流类的代码
当我做这种东西的时候
Twitch_Stream streamer = Twitch_API.getStream("Jankos");
Bukkit.broadcastMessage("getName " + streamer.getName());
Bukkit.broadcastMessage(streamer.isOnline() + "");
streamer.getName()
returnnull
和streamer.isOnline()
返回false
,即使流已打开
我在哪里犯了错误?我不知道您的代码中有什么问题,但简单的解决方法是阅读
中的内容。”https://api.twitch.tv/kraken/streams/“+频道
格式为JSON:
{
"_links" : {
//links to stream and channel
},
"stream" : {
//details about current stream
}
}
现在,如果stream
键的值为null
则流离线。如果不为空,则为联机
所以你的代码看起来像
public static void main(String[] argv) throws IOException {
System.out.println(checkIfOnline("Jankos"));
System.out.println(checkIfOnline("nightblue3"));
}
public static boolean checkIfOnline(String channel) throws IOException {
String channerUrl = "https://api.twitch.tv/kraken/streams/" + channel;
String jsonText = readFromUrl(channerUrl);// reads text from URL
JSONObject json = new JSONObject(jsonText);
return !json.isNull("stream");
}
private static String readFromUrl(String url) throws IOException {
URL page = new URL(url);
try (Stream<String> stream = new BufferedReader(new InputStreamReader(
page.openStream(), StandardCharsets.UTF_8)).lines()) {
return stream.collect(Collectors.joining(System.lineSeparator()));
}
}
如果您没有Java8,您可以将从URL读取文本的代码重写为
private static String readFromUrl(String url) throws IOException {
URL page = new URL(url);
StringBuilder sb = new StringBuilder();
Scanner scanner = null;
try{
scanner = new Scanner(page.openStream(), StandardCharsets.UTF_8.name());
while (scanner.hasNextLine()){
sb.append(scanner.nextLine());
}
}finally{
if (scanner!=null)
scanner.close();
}
return sb.toString();
}
或者从我看到的情况来看,您可以使用
API.readJsonFromUrl
而不是readFromUrl
发布有问题的代码。如果在此处发布的时间过长,则表示您没有将示例简化为此问题所需的部分。无法打开此链接并检查;/?堆栈溢出的目的不仅是帮助您,而且是帮助其他有类似问题的人。如果你的链接断开了,那么你的问题对其他人来说毫无用处。这是Java8中添加的功能。你可以在这里找到更多信息。简言之,这是你想对某些元素进行的操作管道。我不知道。您正在使用Java 8吗?@dekros如果您正在使用Eclipse或任何其他IDE,它应该能够为您添加此导入。无论如何,这些类属于java.util.stream
包,所以使用import java.util.stream.collector
和导入java.util.stream.stream代码>我有这个错误,我使用NetBeans,我有java版本8更新45(build 1.8.0_45-b15),我无法重现这个问题。您的项目是否配置为使用Java8编译器和库?您能否在属性->源代码->源代码/二进制格式
和属性->库->java平台
中检查项目的值?
private static String readFromUrl(String url) throws IOException {
URL page = new URL(url);
StringBuilder sb = new StringBuilder();
Scanner scanner = null;
try{
scanner = new Scanner(page.openStream(), StandardCharsets.UTF_8.name());
while (scanner.hasNextLine()){
sb.append(scanner.nextLine());
}
}finally{
if (scanner!=null)
scanner.close();
}
return sb.toString();
}