让我们阅读Hoppii的API吧(包含使用Golang调用API的额外内容)
这是法政大学信息科学部 2022 年圣诞倒数日历的第 20 篇文章。
你好,我是信息科学部的磯貝。
我非常感激去年开始的”法政大学信息科学部2022年圣诞日历”的聊天与同学们的合作。之前只有同班同学投稿,但今年不仅有其他年级的同学,还有其他系的同学们一起投稿,感觉非常开阔。非常感谢为今年的日历制作的@HirokiLucky以及去年和今年的合作帮助的@AbeTetsuya20。
好的,这次我们来说一下「让我们来读一读 Hoppii API」,顺便说一下,这是一种在法政大学使用的学习辅助系统 Hoppii 的API。
关于Hoppii
Hoppii是一個由法政大學提供的學習支援系統。
因為它為法大生每天提供幫助,所以應該沒有不認識的人…
Hoppii是基于Sakai Project的Sakai这个开源Java(tomcat)软件制作的。(源代码在这里,似乎还有一个Confluence的规范文件。)
Sakai提供了REST API作为其功能,并且使用Sakai的Hoppii也存在这个机制。
这次我们来阅读Hoppii的API参考文档,然后随便试试做点什么吧!
让我们阅读Hoppii的API参考文档。
您可以在这里阅读有关Hoppii API的说明。
据说API 是由包括公告、作业、内容等74个称为实体的功能组成的。
我打算让我们来看看上面提到的三个实体。
*注意:由于这个服务只限Hoppii用户使用,请谅解…请Hoppii用户先进行一次统一认证登录,然后再体验下面的实体。
公告实体
我們來看看Hoppii公司的發布實體的說明。根據官方說明,該實體的說明如下。
指定されたサイトに対するお知らせ (マージされたお知らせを含む) またはユーザに対するすべてのお知らせを表します.今日のメッセージおよび公開のお知らせも含みます.
简单地说,这是一个用于显示Portal主页上的“课程相关公告”栏目中的公告的实体。
我会尝试使用公告实体的自定义操作中的用户操作。
这个操作是用来获取已发送给用户的公告通知的。
让我们尝试访问 https://hoppii.hosei.ac.jp/direct/announcement/user.json。
应该会显示在门户网站首页的“课程相关公告”栏中的公告。
任务实体
接下来,让我们看一下作业实体。
引用Hoppii的解释,其中写着以下内容。
課題:
这很容易理解啊,哈哈。
这似乎是关于任务的实体。
我将尝试自定义动作中的”my”动作。
这个动作可以获取所有网站的所有任务。
让我们尝试访问 https://hoppii.hosei.ac.jp/direct/assignment/my.json。
您应该能够看到以前完成的任务以及当前分配的任务的显示。
内容实体
让我们来看一下内容实体。
引用Hoppii中的说明会得到以下内容:
コンテンツ/リソースツールを表示
我认为有一个类似教室页面上“教材”的页面,可以列出内容。这样的页面文件的属性(例如直接链接)可以获取,作为一个能够列举资源的实体。
那么,让我们试试 Content Entity 中的自定义动作中的 site 动作。这个动作可以获取指定网站的内容项。
首先,让我们访问任意课程的页面。
URL 的格式应该是 https://hoppii.hosei.ac.jp/portal/site/XXXXX。
这个 XXXXX 在 Hoppii API 中被称为 SITEID。
让我们来实际尝试一下 API。
请访问 https://hoppii.hosei.ac.jp/direct/content/site/SITEID.json。
您应该能够获取到”教材”栏中教材的属性。
特别是URL非常有趣,可以直接访问教材的链接。通过编写程序,并使用for循环等方法,即使不使用WebDav客户端,也可以批量下载文件等,似乎有着有趣的用法!
我试着使用Golang实现了一个库。
法政大学情報科学部是日本唯一一個以學習Golang聞名的大學。
我实现了一个可以调用 Announcement Entity 的 user 动作和 Assignment Entity 的 my 动作的开源库。
此外,API的源代码在这里!(虽然只是简单地写了一下,但在撰写这篇文章时,其中95%甚至相当长的时间都花在这里。)
因为是 Golang,所以我认为实现很容易理解,但只是访问每个操作的 URL 而已(笑)
功能还有很大的改进空间,所以希望以后有空的时候能够增加更多功能!
对于 Issue 的请求和贡献也非常欢迎!
请多多关照。
让我们尝试操作Hoppii API库
让我们来使用Golang来尝试使用我创建的Hoppii API库。
另外,我们假设您使用的是 Golang 1.19 版本。
如果您尚未安装过 Golang,请参考这里的指南来安装 Golang 1.19。(这是由大学中的 tenntenn 先生提供的 Golang 教学视频)
从这里开始操作终端。
# advent-hosei-2022 フォルダの作成
mkdir advent-hosei-2022
# go get で hoppii-api を取得
go get github.com/isso-719/hoppii-api@v0.0.1
使用编辑器等在 advent-hosei-2022 文件夹下创建以下的 main.go 文件。(请自行更改学籍号和密码部分)
package main
import (
"fmt"
"github.com/isso-719/hoppii-api"
"github.com/isso-719/hoppii-api/pkg/announcement"
"github.com/isso-719/hoppii-api/pkg/assignment"
"github.com/isso-719/hoppii-api/pkg/user"
)
func main() {
// ここに学籍番号を入力
studentId := "99z9999"
// ここにパスワードを入力
password := "password"
hoppiiApi := hoppii_api.NewHoppiiApi()
// ユーザクライアントの作成 (これを使用して Hoppii にアクセスする)
user, err := hoppiiApi.User.CreateUser(&user.UserInput{
StudentId: studentId,
Password: password,
})
if err != nil {
panic(err)
}
// Announcement Entity の User Action を取得
auo, err := hoppiiApi.Announcement.User(&announcement.AnnouncementUserInput{
UserCookie: user.Cookie,
})
if err != nil {
panic(err)
}
// 結果を出力
fmt.Println(auo.AnnouncementUserResult.AnnouncementCollection[0].Title)
// Assignment Entity の My Action を取得
ao, err := hoppiiApi.Assignment.My(&assignment.AssignmentMyInput{
UserCookie: user.Cookie,
})
if err != nil {
panic(err)
}
// 結果を出力
fmt.Println(ao.AssignmentMyResult.AssignmentCollection[0].Title)
}
然后在终端上解决依赖关系…
# モジュールの依存関係の解決と整理を行う
go mod tidy
准备好了!
让我们在终端上运行程序吧(由于需要通过互联网访问,所以在不同环境下可能运行较慢)。
% go run main.go
Today's Class Canceled
Quiz for week 2
我遇到了和上述一样的情况!!!这是最近的通知和我最先做的任务呢(笑)
我在Golang中成功地调用了Hoppii的API!!!
最后
这次我们介绍了Hoppii API,并且还成功地在Golang中实际调用了它。
Hoppii仍然非常复杂…从这篇文章中,我希望能让Hoppii变得更加易于使用。
这次在实施库时,由于登录方面遇到了一些问题,所以我打算在明年的圣诞日历中介绍如何在不使用WebDriver的情况下,只通过代码来实现Hoppii的统一认证登录。笑
感謝您閱讀到最後。
这篇文章是关于“2022年法政大学信息科学部圣诞日历”的第20篇。