前几章,我介绍了Midjourney以及Midjourney Bot的基本玩法, 本章我将站在一个开发的视角,运用编程的方法来调用Midjourney Bot

原理

因为Midjourney Bot是由Discord开发出来的Application,咱们能够先经过阅览Discord Developer Platform Docs文档来了解下Discord敞开的一些API才能。

/imagine发生了什么

首要,咱们翻开浏览器开发者东西, 经过抓包看下客户端服务端之间的调用恳求。

Google Chrome为例:

翻开开发者东西:

玩转Midjourney系列三:  使用golang调用Midjourney Bot

当咱们给Midjourney Bot发送一个/imagine指令时, 能够看到抓到的恳求是:

发送/imagine指令:

玩转Midjourney系列三:  使用golang调用Midjourney Bot

抓包检查恳求:

玩转Midjourney系列三:  使用golang调用Midjourney Bot

经过阅览interactions api文档, 咱们能够发现这个接口就是与Discord Bot交互用的, 那么,咱们完全能够经过curl, postman等一系列东西来模仿同样的恳求与完成/imagine, 有兴趣的小伙伴能够手动实践试试。

经过测试,咱们只需要改动prompt,其它的参数都能够坚持不变,便能够完成给Midjourney Bot发送/imagine指令。

需要留意的是, 因为Discord API接口有鉴权, 咱们需要在HTTP恳求时带上Authorization头部, 内容能够从这里拿到:

获取Authorization头部内容:

玩转Midjourney系列三:  使用golang调用Midjourney Bot

那么经过curl测试的恳求为:

curl -d '{payload_json}' -H 'Authorization: {your token}' -H 'Content-Type: application/json' https://discord.com/api/v9/interactions -v

那么经过同样的方法,咱们能够完成大部分给Midjourney Bot发送的指令。

midjourney-go介绍

midjourney-go主要是便利调用Midjourney Bot, 进行以下指令的操作:

  • /imagine

  • /upscale

  • /variation

  • /describe

  • /blend

  • /reroll

它被规划为不包括任何事务逻辑,且十分轻量级,所以能够很便利的被集成到运用Golang开发的项目中,比如咱们在Discord中开发了自己的Bot, 便能够很轻松的集成Midjourney Bot的才能。

环境预备

  • 科学上网
  • 装置golang环境
  • 预备discord token
  • 预备guild_idchannel_id

运用方法

运用方法十分简单, 新建一个Golang的项目, 然后修改main.go, 只需几行代码就能够完成/imagine:

package main
import (
	"context"
	"log"
	"github.com/hongliang5316/midjourney-go/midjourney"
)
func main() {
	client := midjourney.NewClient(&midjourney.Config{
		UserToken: "",
	})
	// imagine
	err := client.Imagine(context.Background(), &midjourney.ImagineRequest{
		GuildID:   "",
		ChannelID: "",
		Prompt:    "",
	})
	if err != nil {
		log.Fatalf("Call client.Imagine failed, err: %+v", err)
	}
}

然后运转:

go mod tidy
go run main.go

然后观察discord频道里的Midjourney Bot的消息即可。

总结

本章介绍了怎么运用Golang调用Midjourney Bot, 咱们有了midjourney-go, 能够在咱们的使用中调用Midjourney Bot了, 但是因为Midjourney Bot的输出的图片是在Discord中的, 咱们仍是无法完全将Midjourney输出图片的才能集成到咱们的使用中, 好在Discord十分敞开, 支撑经过编程的方法获取Midjourney Bot的消息, 下一章我将介绍一下怎么脱离Discord, 自建Midjourney APIServer