开启辅助访问      

站内搜索

搜索
热搜: 下载 1.19 1.20

Minecraft(我的世界)苦力怕论坛

[其他] 如何通过MC新闻API获取最新的新闻

发表于 2023-12-26 17:11:41 | 显示全部楼层 |阅读模式 IP:湖北省
本帖最后由 剩哲伪旺 于 2023-12-28 09:33 编辑

大家好,这里是剩哲伪旺。众所周知,游戏资讯是个很神奇的板块,在里面云集了许多的英文高手与翻译专家。
那么,在里面的人到底是怎么在第一时间获取到最新的新闻资讯的呢?其中有一个途径是“Twitter”,还有一个途径就是minecraft.net官网了。然后还有最后一个途径,那就是小可机器人。但是想必也有挺多人没听说过小可机器人的。
在Twitter里,我们倒是没有任何一点的API供我们调用,因此我们只能获取到最新的官网放送的API了!

那么这些API的地址是什么呢?

我们来看看这一副图:
image.png
这个是官网的图片,截取自【2023.12.26-17:10】
那么官网是怎么获取到新闻的呢?当然是有API的!我们直接来看API吧:
官网获取新闻API

这个API是官网的新闻API。点击后会传到一个网络JSON文件。

我们会发现,在里面似乎缺失了某些个版本更新新闻,比如说Pre2。

但是我们会发现,在官方启动器里面的新闻是完整的,为什么会这样呢?
image.png

通过某些Debug与我找人宣传的技术,我们可以得到启动器获取某些新闻的API是这样的:
Java版新闻资讯

基岩版新闻资讯

地下城新闻资讯

传奇新闻资讯

进入几个新闻资讯,可以被传到一个JSON文件,里面存放的就是每个新闻的具体API,甚至连网站的HTML代码都给你了。

然后嘛,还有一个地方,就是启动器最左边有一个【新闻】按钮。就是这里:

image.png

这个官网的API是这样的:
启动器新闻资讯


我们可以注意到这个官网API中有一个launchercontent作为网站的头,我们可以看到这个是专属于启动器能够获取到的。而上面的官网API与它的JSON结构则完全不一样。

既然如此,我们应该如何获取到这些新闻资讯呢?
我们可以通过代码实现。用代码的方式,每隔一段时间获取一次官网新闻,随后就可以获取到最新版的新闻了!

下面我将用Delphi的代码为各位实现一次API功能:
在这段代码中,我将会每一句话都为各位写好注释,以便各位能够理解每一行代码的内容。在bbs中的code代码块可能不会自动换行,各位可以自行复制到记事本里进行查看。

  1. begin  //Delphi代码起始语句,在Delphi中,大括号是注释,而begin end充当大括号的功能。
  2.   try //设置一个try-except
  3.     var ju := ''; //先设置一个全局变量。
  4.     if ParamStr(1) = '' then //获取该软件的第一个参数。如果第一个参数为空,则默认获取的是【Java版官方资讯】。
  5.       ju := Concat('https://launchercontent.mojang.com/javaPatchNotes.json') //这里是Java官方版本资讯的网址获取。Concat的意思是字符串拼接。
  6.     else if Paramstr(1) = 'official' then //这里获取到的是第一个参数是否为official,如果是official,则默认获取的是MC官网的资讯。
  7.       ju := 'https://www.minecraft.net/content/minecraft-net/_jcr_content.articles.grid?tileselection=auto&pageSize=1&tagsPath=minecraft:stockholm/minecraft' //MC官网的资讯。
  8.     else if ParamStr(1) = 'news' then //如果是news,则默认获取的是启动器新闻资讯。
  9.       ju := Concat('https://launchercontent.mojang.com/', paramstr(1), '.json') //这里拼接启动器新闻资讯。
  10.     else
  11.       ju := Concat('https://launchercontent.mojang.com/', paramstr(1), 'PatchNotes.json'); //如果以上都不是,则默认填入的是java、bedrock、legends、dungeons四个代码块。我们可以根据这几个来填入java、bedrock、legends、dungeons。
  12.     writeln(Concat('GET ', ju)); //我们可以输出一段话,这段话将输出我们需要Get的网址。
  13.     while true do begin  //随后,我们来一个无限循环。
  14.       var patch := GetWeb(ju);  //我们通过一个获取网络文本的代码,这个代码在你们使用的编程语言一定会有!
  15.       var json := TJSONObject.ParseJSONValue(patch) as TJSONObject; //随后,我们使用JSON解析这个官网,并将其解析成JSON对象。
  16.       if ju.Contains('launchercontent') then begin  //如果你获取的网站中有launchercontent,那就直接
  17.         var entries := json.GetValue('entries') as TJSONArray;  //这里获取到里面的entires代码块,并将其转成JSON列表。
  18.         var title := (entries[0] as TJSONObject).GetValue('title').Value;  我们这里获取到JSON列表中的第0号元素,然后再将其转成JSON对象,随后再获取里面的title代码的值。
  19.         writeln(title);  //随后输出title即可!
  20.       end else begin  //然后我们来个else代码块,这个是专门用来获取官网新闻资讯的API的。
  21.         var artical := json.GetValue('article_grid') as TJSONArray;  //我们获取里面的article_grid。并将其转换成JSON列表。
  22.         var title := ((artical[0] as TJSONObject).GetValue('default_tile') as TJSONObject).GetValue('title').Value;  //随后,我们一直往下解析,随后解析到里面的title代码块。
  23.         writeln(title);  //我们直接输出title即可。
  24.       end;
  25.       try  //这个是获取它的第2个参数的地方。我们在此处将其变成int类型,随后乘以1000,获取秒数。也就是隔多久获取一次官网API。
  26.         TThread.Sleep(strtoint(ParamStr(2)) * 1000);
  27.       except  //如果无法解析成数字,则默认间隔1个小时获取一次新闻。
  28.         TThread.Sleep(3600000);
  29.       end;
  30.     end;
  31.   except
  32.     on E: Exception do  //这里是,如果总的代码块出现错误,则默认输入它的错误信息。
  33.       Writeln(E.ClassName, ': ', E.Message);
  34.   end;
  35. end.
复制代码

我们很容易看见,官网上获取到的API里面其实是有一个pageSize这么一个参数的。那么这个参数具体有什么用处呢?我们通过这个参数,可以很轻松的达到【换页】效果。这个pageSize其实是该json的新闻列表里能容纳最大的新闻数量,我们需要搭配另外一个参数offset偏移来达到换页效果。具体如何偏移其实在curseforge、modrinth等的API文档里有介绍。比如我offset设置为3,pageSize设置为50,那么官网新闻就是第【2~52】的新闻。如果offset设为50,pageSize设为50,那么官网新闻就是第【50~100】个新闻。

在上述信息,我们仅仅只是获取了官网的title,也就是说这只能作为一个提醒专用。如果我们需要直接获取java、bedrock、legends、dungeons的新闻资讯,我们只需要解析它的body方法即可。如果我们需要获取启动器新闻资讯,我们可以选择获取它的readMoreLink代码块。

如果我们需要直接获取官网的新闻的话,我们可以获取它的article_url,随后在前面加个www.minecraft.net即可直接进入官网新闻了。

部分Java版、基岩版、地下城、传奇新闻资讯可能不在官网里面,需要进入feedback官网,因此如果各位获取到了最新的新闻之后,可以立刻进入feedback官网获取更新日志。当然也可以直接获取body来进行翻译。
当然啦,各位既然已经有了每个新闻API,自然可以自己手动敲代码获取最新的新闻了。其实完全没必要来看我的代码的,各位可以自行尝试噢!

评分

参与人数 1铁粒 +100 收起 理由
我是redstone + 100 版推

查看全部评分

苦力怕论坛,感谢有您~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

粤公网安备 44200002445329号 | 由 木韩网络 提供云服务 | GMT+8, 2024-5-1 22:53

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4 粤ICP备2023071842号