This website https://asciinema.org/ is record and share your terminal session website, it defines a set of Ascii Cast format files to store screen content, this library is used to parse Ascii Cast files,support v1 and v2 two versions.
go get -u github.com/golang-infrastructure/go-asciinema-parser
package main
import (
"context"
"fmt"
asciinema_parser "github.com/golang-infrastructure/go-asciinema-parser"
)
func main() {
asciiCastV2String := `{"version": 2, "width": 80, "height": 24, "timestamp": 1504467315, "title": "Demo", "env": {"TERM": "xterm-256color", "SHELL": "/bin/zsh"}}
[0.248848, "o", "\u001b[1;31mHello \u001b[32mWorld!\u001b[0m\n"]
[1.001376, "o", "That was ok\rThis is better."]
[2.143733, "o", " "]
[6.541828, "o", "Bye!"]`
version, err := asciinema_parser.DetectVersion(context.Background(), asciiCastV2String)
if err != nil {
panic(err)
}
fmt.Println(version) // Output: 2
}
package main
import (
"context"
"fmt"
asciinema_parser "github.com/golang-infrastructure/go-asciinema-parser"
)
func main() {
asciiCastV1String := `{
"version": 1,
"width": 80,
"height": 24,
"duration": 1.515658,
"command": "/bin/zsh",
"title": "",
"env": {
"TERM": "xterm-256color",
"SHELL": "/bin/zsh"
},
"stdout": [
[
0.248848,
"\u001b[1;31mHello \u001b[32mWorld!\u001b[0m\n"
],
[
1.001376,
"I am \rThis is on the next line."
]
]
}`
v1, err := asciinema_parser.ParseV1(context.Background(), []byte(asciiCastV1String))
if err != nil {
panic(err)
}
fmt.Println(fmt.Sprintf("%v", v1))
}
package main
import (
"context"
"fmt"
asciinema_parser "github.com/golang-infrastructure/go-asciinema-parser"
)
func main() {
asciiCastV2String := `{"version": 2, "width": 80, "height": 24, "timestamp": 1504467315, "title": "Demo", "env": {"TERM": "xterm-256color", "SHELL": "/bin/zsh"}}
[0.248848, "o", "\u001b[1;31mHello \u001b[32mWorld!\u001b[0m\n"]
[1.001376, "o", "That was ok\rThis is better."]
[2.143733, "o", " "]
[6.541828, "o", "Bye!"]`
v2, err := asciinema_parser.ParseV2(context.Background(), []byte(asciiCastV2String))
if err != nil {
panic(err)
}
fmt.Println(fmt.Sprintf("%v", v2))
}