吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1905|回复: 20
收起左侧

[其他原创] Golang EPIC每周免费游戏推送

  [复制链接]
52loli 发表于 2023-7-21 16:53
本帖最后由 52loli 于 2023-7-27 01:21 编辑

使用教程

  1. 首先wxPuhser如何创建应用和主题可以看一下这篇帖子Golang 爬取每日早报并推送到微信
  2. 然后需要先运行一次软件,软件会在运行目录生成一个config.json,再将参数填入config.json中,如下图所示

1.png

GitHub

https://github.com/smloli/EPICFreeGamesPush

PS

要是嫌麻烦的,可以直接复制下面的链接在微信中打开,然后订阅一下主题,这样每周就能收到EPIC免费游戏的推送了

https://wxpusher.zjiecode.com/wxuser/?type=2&id=10793#/follow

预览图

2.png

package main

import (
    "encoding/json"
    "fmt"
    "io"
    "log"
    "loli/wxPusher"
    "net/http"
    "os"
    "path/filepath"
    "time"
)

type AppliedRulesInfo struct {
    EndDate string
}

type LineOffersInfo struct {
    AppliedRules []AppliedRulesInfo
}

type KeyImagesInfo struct {
    Type string
    Url  string
}

type GamesInfo struct {
    Title       string
    Description string
    ProductSlug string
    Price       struct {
        TotalPrice struct {
            FmtPrice struct {
                DiscountPrice string
            }
        }
        LineOffers []LineOffersInfo
    }
    KeyImages []KeyImagesInfo
}

type Games struct {
    Data struct {
        Catalog struct {
            SearchStore struct {
                Elements []GamesInfo
            }
        }
    }
}

type Config struct {
    AppToken string   `json:"appToken"`
    TopicIds []int    `json:"topicIds"`
    Uids     []string `json:"uids"`
}

func get(url string) ([]byte, error) {
    c := http.Client{}
    req, _ := http.NewRequest("GET", url, nil)
    req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36")
    req.Header.Set("Referer", "https://store.epicgames.com/zh-CN/")
    resp, err := c.Do(req)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()
    data, _ := io.ReadAll(resp.Body)
    return data, nil
}

func (c *Config) read() error {
    path := filepath.Join(filepath.Dir(os.Args[0]), "config.json")
    if _, openErr := os.Stat(path); openErr != nil {
        c.TopicIds = make([]int, 1)
        c.Uids = make([]string, 1)
        data, _ := json.MarshalIndent(c, "", "    ")
        f, createErr := os.Create(path)
        if createErr != nil {
            log.Println(createErr)
            return createErr
        }
        defer f.Close()
        f.Write(data)
        log.Println("请在config.json中填写配置参数")
        return openErr
    }
    f, err := os.Open(path)
    if err != nil {
        log.Println(err)
        return err
    }
    defer f.Close()
    data, _ := io.ReadAll(f)
    json.Unmarshal(data, c)
    return nil
}

func main() {
    var g Games
    var c Config
    var text string
    if err := c.read(); err != nil {
        return
    }
    url := "https://store-site-backend-static-ipv4.ak.epicgames.com/freeGamesPromotions?locale=zh-CN&country=CN&allowCountries=CN"
    data, err := get(url)
    if err != nil {
        panic(err)
    }
    json.Unmarshal(data, &g)
    for _, v := range g.Data.Catalog.SearchStore.Elements {
        if len(v.Price.LineOffers[0].AppliedRules) == 0 || v.Price.TotalPrice.FmtPrice.DiscountPrice != "0" {
            continue
        }
        var imageUrl string
        for _, k := range v.KeyImages {
            if k.Type == "Thumbnail" {
                imageUrl = k.Url
                break
            }
        }
        t, _ := time.Parse(time.RFC3339, v.Price.LineOffers[0].AppliedRules[0].EndDate)
        shanghai := t.Add(8 * time.Hour)
        text += fmt.Sprintf("![](%s)\n**<center>%s</center>**\n简介:%s\n\n结束时间:%s\n\n领取地址:https://store.epicgames.com/zh-CN/p/%s\n\n", imageUrl, v.Title, v.Description, shanghai.Format(time.DateTime), v.ProductSlug)
    }
    resp, err := wxPusher.Send(c.AppToken, text, "EPIC本周免费游戏推送", 3, c.TopicIds, c.Uids)
    if err != nil {
        return
    }
    fmt.Println(string(resp))
}

免费评分

参与人数 8吾爱币 +11 热心值 +8 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
开心熊猫741 + 1 + 1 热心回复!
cheeger + 1 用心讨论,共获提升!
17343441893 + 1 + 1 1
wqdni521 + 1 用心讨论,共获提升!
Miv + 1 + 1 用心讨论,共获提升!
indobe + 1 谢谢@Thanks!
囧小九 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

howyouxiu 发表于 2023-7-21 22:19
本帖最后由 howyouxiu 于 2023-7-21 22:32 编辑

Python代码实现
  • 未经测试
  • 未实现推送功能,需自实现接口
  • 需安装requests模块

[Python] 纯文本查看 复制代码
import abc
import requests


class EpicPusher(metaclass=abc.ABCMeta):
    def __int__(self):
        self.content = ""

    def _get_game(self):
        url = "https://store-site-backend-static-ipv4.ak.epicgames.com/freeGamesPromotions?locale=zh-CN&country=CN&allowCountries=CN"
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
            "Referer": "https://store.epicgames.com/zh-CN/"
        }
        resp = requests.get(url,headers=headers)
        res = resp.json()
        content = ""
        for v in res["data"]["Catalog"]["searchStore"]["elements"]:
            if len(v["price"]["lineOffers"][0]["appliedRules"])==0 or v["price"]["totalPrice"]["fmtPrice"]["discountPrice"] != str(0):
                continue
            for im in v["keyImages"]:
                if im["type"] == "Thumbnail":
                    img_url = im["url"]
                    break
            end_date = v["price"]["lineOffers"][0]["appliedRules"][0]["endDate"]
            content += "![](%s)\n**<center>%s</center>**\n>##### 游戏简介\n> %s\n>##### 结束时间\n> %s\n>##### 领取地址\n> https://store.epicgames.com/zh-CN/p/%s\n\n" % (img_url, v["title"], v["description"], end_date, v["productSlug"])
        self.content = content

    @abc.abstractmethod
    def _sender(self):
        pass

    def start(self):
        self._get_game()
        self._sender()


使用方法

[Python] 纯文本查看 复制代码
class EPIC(EpicPusher):

    def _sender(self):
        """自实现消息推送或调用第三方实现"""
        msg = self.content
        # send(msg)
        print(msg)

epic = EPIC()
epic.start()
Pojawa 发表于 2023-7-21 21:26
微信推送这个属实有点大材小用。
浏览器插件可以写个代码直接自动领取,都用golang了或者用python直接写个自动监测的逻辑自动领取,挂到任意机器上就行。
推送微信信息这种大事,还是把名额留给服务器信息吧。
毕竟,你不想微信叮咚一声以为服务器爆流量了,结果打开只是提醒你领游戏,对吧………………
囧小九 发表于 2023-7-21 16:58
HansChan 发表于 2023-7-21 18:00
王师傅看了半天,决定还是订阅吧
jiekem 发表于 2023-7-21 18:16
厉害这个可以有
punkzhang 发表于 2023-7-21 18:38
很早有个docker版本的,后来作者不更新了。
stu2162583 发表于 2023-7-21 19:52
感谢大佬分享
吴浪 发表于 2023-7-21 20:34
我也表示订阅吧
kaisen868 发表于 2023-7-21 20:38
感谢分享思路。
dychjyfgfda 发表于 2023-7-21 20:47
这个可以有,感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表