Update: use env variables to config instead of YAML

This commit is contained in:
VnPower 2023-06-06 20:09:09 +07:00
parent b3d1b1d976
commit 1634893ba9
Signed by: vnpower
GPG key ID: 881DE3DEB966106C
5 changed files with 44 additions and 44 deletions

View file

@ -1,15 +0,0 @@
# This is required for the API. See https://github.com/Nandaka/PixivUtil2/wiki#pixiv-login-using-cookie
# Please keep this carefully, there is a risk of account theft if somebody got your cookie.
# It is better to use a decoy account, instead of using your main account's cookie.
PHPSESSID: XXXXXXXX_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Port: 8080
UserAgent: Mozilla/5.0
# Number of items in each list page
# This is going to be deprecated
PageItems: 30
# Default image proxy server. Recommended since Pixiv doesn't like you accessing images on their server.
ImageProxyServer: px2.rainchan.win

View file

@ -1,32 +1,44 @@
package configs
import (
"embed"
"gopkg.in/yaml.v3"
"errors"
"os"
)
var Config embed.FS
var Configs Conf
var Token, Port, UserAgent, ProxyServer string
type Conf struct {
PHPSESSID string `yaml:"PHPSESSID"`
Port string `yaml:"Port"`
UserAgent string `yaml:"UserAgent"`
PageItems int `yaml:"PageItems"`
ImageProxyServer string `yaml:"ImageProxyServer"`
func parseEnv(key string) (string, error) {
value, ok := os.LookupEnv(key)
if !ok {
return "", errors.New("Failed to get environment variable" + key)
}
return value, nil
}
func (conf *Conf) ReadConfig() {
f, err := os.Open("config.yml")
if err != nil {
panic(err)
}
defer f.Close()
func parseEnvWithDefault(key string, defaultValue string) string {
value, ok := os.LookupEnv(key)
decoder := yaml.NewDecoder(f)
err = decoder.Decode(conf)
if err != nil {
panic(err)
if !ok {
return defaultValue
}
return value
}
func ParseConfig() error {
var err error
Token, err = parseEnv("PIXIVFE_TOKEN")
if err != nil {
return err
}
Port = parseEnvWithDefault("PIXIVFE_PORT", "8080")
UserAgent = parseEnvWithDefault("PIXIVFE_USERAGENT", "Mozilla/5.0")
ProxyServer = parseEnvWithDefault("PIXIVFE_IMAGEPROXY", "px2.rainchan.win")
return nil
}

View file

@ -7,7 +7,6 @@ import (
"io/ioutil"
"math"
"net/http"
"pixivfe/configs"
"pixivfe/models"
"sort"
"strconv"
@ -258,7 +257,7 @@ func (p *PixivClient) GetUserArtworksID(id string, page int) (*string, error) {
sort.Sort(sort.Reverse(sort.IntSlice(ids)))
worksNumber := float64(len(ids))
worksPerPage := float64(configs.Configs.PageItems)
worksPerPage := 30.0
if page < 1 || float64(page) > math.Ceil(worksNumber/worksPerPage)+1.0 {
return nil, errors.New("Page overflow")
@ -297,7 +296,7 @@ func (p *PixivClient) GetUserArtworksCount(id string) (int, error) {
}
func (p *PixivClient) GetRelatedArtworks(id string) ([]models.IllustShort, error) {
url := fmt.Sprintf(ArtworkRelatedURL, id, configs.Configs.PageItems)
url := fmt.Sprintf(ArtworkRelatedURL, id, 30)
var pr models.PixivResponse

10
main.go
View file

@ -40,7 +40,7 @@ func setupRouter() *gin.Engine {
}
regex := regexp.MustCompile(`.*?pximg\.net`)
proxy := "https://" + configs.Configs.ImageProxyServer
proxy := "https://" + configs.ProxyServer
return regex.ReplaceAllString(url, proxy)
},
@ -167,9 +167,13 @@ func setupRouter() *gin.Engine {
}
func main() {
configs.Configs.ReadConfig()
err := configs.ParseConfig()
if err != nil {
panic(err)
}
r := setupRouter()
r.Run(":" + configs.Configs.Port)
r.Run(":" + configs.Port)
}

View file

@ -54,7 +54,7 @@ func user_page(c *gin.Context) {
user, _ := PC.GetUserInformation(id, pageInt)
worksCount, _ := PC.GetUserArtworksCount(id)
pageLimit := math.Ceil(float64(worksCount)/float64(configs.Configs.PageItems)) + 1.0
pageLimit := math.Ceil(float64(worksCount)/30.0) + 1.0
c.HTML(http.StatusOK, "user.html", gin.H{"User": user, "PageLimit": int(pageLimit), "Page": pageInt})
}
@ -180,8 +180,8 @@ func NewPixivClient(timeout int) *models.PixivClient {
func SetupRoutes(r *gin.Engine) {
PC = NewPixivClient(5000)
PC.SetSessionID(configs.Configs.PHPSESSID)
PC.SetUserAgent(configs.Configs.UserAgent)
PC.SetSessionID(configs.Token)
PC.SetUserAgent(configs.UserAgent)
r.GET("/", index_page)
r.GET("artworks/:id", artwork_page)
r.GET("users/:id", user_page)