找回密码
 加入
搜索
查看: 615|回复: 6

[AU3基础] [已解決] go/python改写请教

[复制链接]
发表于 2022-6-17 06:03:30 | 显示全部楼层 |阅读模式
本帖最后由 w60711 于 2022-6-18 05:15 编辑

不好意思

小弟我实在不懂这个该如何改写成au3...
想请教大神能否帮忙一下
十分感谢~

看了半天只搞懂
用 SRandom(时间戳)
然后 Random(0, 12)
chars到底怎么用就搞不懂了...

原始出处:
https://github.com/miyouzi/aniGamerPlus/blob/master/Anime.py

go语言,num = 12
func randomString(num int) string {
    rand.Seed(time.Now().UTC().UnixNano())
    const chars = "abcdefghijklmnopqrstuvwxyz0123456789"
    result := make([]byte, num)
    for i := 0; i < num; i++ {
        result[i] = chars[rand.Intn(len(chars))]
    }
    return string(result)
}

python
        def random_string(num):
            chars = 'abcdefghijklmnopqrstuvwxyz0123456789'
            random.seed(int(round(time.time() * 1000)))
            result = []
            for i in range(num):
                result.append(chars[random.randint(0, len(chars) - 1)])
            return ''.join(result)


=-=-=-=-=-=-已解決-=-=-=-=-=-=

5F 有包含此問題的相關代碼



#include <Date.au3>

MsgBox(0, '', _random_string(12))

Func _random_string($num) ;; hash,伪随机数,网址需要
        SRandom(_DateDiff('s', "1970/01/01 00:00:00", _NowCalc()))
                ;; ConsoleWrite(_DateDiff('s', "1970/01/01 00:00:00", _NowCalc()) & @CRLF)
                Local $sChars = 'abcdefghijklmnopqrstuvwxyz0123456789'
        Local $aChars = StringSplit($sChars, '', 2)
        Local $sRt = ''
        For $i = 1 To Int($num)
                $sRt &= $aChars[Random(0, StringLen($sChars) - 1, 1)]
        Next
        Return $sRt
EndFunc   ;==>_random_string


发表于 2022-6-17 08:56:26 | 显示全部楼层
就是获取指定长度的随机字符串吧
发表于 2022-6-17 10:05:47 | 显示全部楼层
应该是的
MsgBox(0, '', _random_string(12))

Func _random_string($num)
        Local $sChars = 'abcdefghijklmnopqrstuvwxyz0123456789'
        Local $aChars = StringSplit($sChars, '', 2)
        Local $sRt = ''
        For $i = 1 To Int($num)
                $sRt &= $aChars[Random(0, 35, 1)]
        Next
        Return $sRt
EndFunc   ;==>_random_string
 楼主| 发表于 2022-6-18 00:23:55 | 显示全部楼层

感谢afan大的指点
想请教有没有加入 SRandom的差异是为何?
因为有没有该行,都还是能照常执行 (汗


Func _random_string($num) ;; hash,伪随机数,网址需要
        SRandom(_DateDiff('s', "1970/01/01 00:00:00", _NowCalc()))
                ;; ConsoleWrite(_DateDiff('s', "1970/01/01 00:00:00", _NowCalc()) & @CRLF)
                Local $sChars = 'abcdefghijklmnopqrstuvwxyz0123456789'
        Local $aChars = StringSplit($sChars, '', 2)
        Local $sRt = ''
        For $i = 1 To Int($num)
                $sRt &= $aChars[Random(0, StringLen($sChars) - 1, 1)]
        Next
        Return $sRt
EndFunc   ;==>_random_string

 楼主| 发表于 2022-6-18 05:11:04 | 显示全部楼层
本帖最后由 w60711 于 2022-6-18 05:13 编辑

巴哈姆特动画疯,使ˋ用 mpv player 进行播放

此为简易代码,仅能提供 有VIP(无广告)之会员使用
(因为没有各式的判断,例如广告)
本代码尚未完善,应该还有奇怪的bug存在
例如:cookie的使用和刷新(继承)...对这不熟不会搞 = =
如果有大神愿意帮忙完善cookie部分就先感谢了QQ




;; 无系统匣图标
#NoTrayIcon
;; 请求管理员身分执行
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=icon.ico
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Comment=ani-gamer-player
#AutoIt3Wrapper_Res_Description=ani-gamer-player
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=Copyright © 2022 MicroDuo/Sally
#AutoIt3Wrapper_Res_Language=1028
#AutoIt3Wrapper_Res_requestedExecutionLevel=highestAvailable
#AutoIt3Wrapper_Res_HiDpi=y
#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 6 -w 7
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****


#cs ____________________________________

        Au3版本:3.3.14.5
        SciTE版本:4.4.6
        脚本作者:Sally

        脚本功能:使用 MPV Player 播放动画疯影片
        建置日期:2022.06.17
        参考代码:
                        https://github.com/c0re100/Baham ... blob/master/main.go
                        https://github.com/miyouzi/aniGamerPlus/blob/master/Anime.py
                        https://greasyfork.org/zh-TW/scr ... 85%B7%E7%AE%B1/code

#ce _______________脚本开始_________________


;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;;|                              载入Fuction                              |
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;; 防止重复执行
#include <Misc.au3>
;; 时间戳
#include <Date.au3>


;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;;|                                基本设定                                |
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
FileChangeDir(@ScriptDir) ;; 切换起始目录工作目录到指定路径
_Singleton(@ScriptName) ;; 防止重复执行

;; 判断是否以管理员身份执行
Local $ADMIN
If IsAdmin() Then
        $ADMIN = "当前管理员权限执行"
Else
        $ADMIN = "当前非管理员权限执行"
        MsgBox(262144+48, '', $ADMIN)
EndIf


;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;;|                                宣告变量                                |
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;; mpv路径,请填入自己的路径
Global $mpv = 'C:\_App\Audiovisual\mpv\mpv.exe'

;; 巴哈姆特-动画疯 相关变量
Global Const $Origin = "https://ani.gamer.com.tw"
;; 请填入自身的 浏览器UA
        ;; https://developers.whatismybrows ... e-my-user-agent=yes
        ;; https://www.whatsmyua.info/
        ;; http://service.spiritsoft.cn/ua.html
Global $UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"
;; 请使用 "无痕模式" 登入动画疯(仅供本程序使用,以免冲突)
        ;; cookie在 F12开发者工具,"Network" 标签的 "ani.gamer.com.tw" 里
        ;; 可以从 "https://home.gamer.com.tw/login_devices.php" 失效cookie
        ;; 目前有Bug...,无法刷新cookie,也无法直接使用,请随便点一部影片观看并重整页面后再获取cookie
Global $Cookie = ''
;; 取得设备ID
Global $_device_id = _get_device_id()


;; 设定影片分辨率,可选分辨率:360,540,720,1080,默认最高:Highest
Global $set_video_resolution = 'Highest'
;; 范例网址,改对应SN码即可观看
Local $ani_Url = 'https://ani.gamer.com.tw/animeVideo.php?sn=28792' ;; 28224、16983
;; 取得动画SN
Local $ani_Sn = StringRegExp($ani_Url, '(?m)\?sn=(.*?)$', 3) ;;取得纯SN
If @error <> 0 Then
        MsgBox(48, '错误', '无法取得动画SN!')
        Exit
EndIf
$ani_Sn = $ani_Sn[0]
;; 宣告 最终使用的分辨率变量
Global $use_resolution
;; 取得动画标题
Local $_vidoe_title = _get_page($ani_Url, $Origin, True, $UA, $Cookie)
$_vidoe_title = StringRegExp($_vidoe_title, '(?m)<h1>(.*?)<\/h1>', 3)
If @error <> 0 Then
        $_vidoe_title = '巴哈姆特 - 动画疯'
Else
        $_vidoe_title = $_vidoe_title[0]
EndIf


;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;;|                                程序开始                                |
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
If _check_cookie() = False Then Exit ;; 确认cookie是否有效
_refresh_cookie() ;; 刷新cookie,有BUG,似乎无效

Local $_get_m3u8_url = _get_m3u8() ;; 取得m3u8

;; 解析列表内容,可选分辨率:360,540,720,1080,默认最高画质
Local $url_for_mpv = _parse_Master_List($_get_m3u8_url, $set_video_resolution)

;; 以mpv开始播放影片,_RunMpv('网址', '标题', '音量')
_RunMpv($url_for_mpv, $_vidoe_title & $use_resolution, '150')
$use_resolution = '' ;; 释放最终使用的分辨率变量

;; m3u8网址
;; ConsoleWrite($url_for_mpv & @CRLF)

;; 完成,结束程序
Exit


;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;;|                                主要Func                                |
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Func _get_m3u8() ;; 取得m3u8
        Local $_unlock_url = 'https://ani.gamer.com.tw/ajax/unlock.php?sn=' & $ani_Sn & '&ttl=0'
        Local $_checklock_url = 'https://ani.gamer.com.tw/ajax/checklock.php?device=' & $_device_id & '&sn=' & $ani_Sn
        Local $_videoStart_url = "https://ani.gamer.com.tw/ajax/videoStart.php?sn=" & $ani_Sn
        Local $_m3u8_url = 'https://ani.gamer.com.tw/ajax/m3u8.php?sn=' & $ani_Sn & '&device=' & $_device_id

        _get_page($_unlock_url,     $Origin, True, $UA, $Cookie) ;; unlock
        _get_page($_checklock_url,  $Origin, True, $UA, $Cookie) ;; checklock
        _get_page($_unlock_url,     $Origin, True, $UA, $Cookie) ;; unlock
        _get_page($_unlock_url,     $Origin, True, $UA, $Cookie) ;; unlock
        _get_page($_videoStart_url, $Origin, True, $UA, $Cookie) ;; videoStart

        Return _get_page($_m3u8_url, $Origin, True, $UA, $Cookie) ;; getM3U8
EndFunc   ;==>_get_m3u8


Func _parse_Master_List($sUrl, $sResolution = 'Highest') ;; 解析清单内容
        Local $_m3u8_val = StringRegExpReplace($sUrl, '\\/', '/')
        $_m3u8_val = StringRegExp($_m3u8_val, '(?m)":"(.*?)"}', 3)
        If @error <> 0 Then
                MsgBox(48, '错误0', '解析m3u8时出错!' & @CRLF & _Encode2Unicode($sUrl))
                _debug_msg($sUrl)
                Exit
        EndIf
        $_m3u8_val = $_m3u8_val[0]
        ;; 取得4种分辨率的内容
        Local $_m3u8_url = _get_page($_m3u8_val, $Origin, True, $UA, $Cookie)
        ;;确认内容正确,并将4种分辨率数组化,[0]360p、[1]540p、[2]720p、[3]1080p
        $_m3u8_url = StringRegExp($_m3u8_url, '(?m)^(.*?).m3u8', 3)
        If @error <> 0 Then $_m3u8_url = False
        If $_m3u8_url = False Then
                MsgBox(48, '错误1', '解析m3u8时出错!')
                Exit
        EndIf

        ;; 取得m3u8网址开头
        Local $_header_url = StringRegExp($_m3u8_val, '(?m)^(.*?)\/playlist', 3)
        $_header_url = $_header_url[0]

        If $sResolution = '360' Then
                If UBound($_m3u8_url) - 1 = 0 Then
                        $_m3u8_url = $_m3u8_url[0]
                Else
                        $_m3u8_url = $_m3u8_url[UBound($_m3u8_url) - 1]
                EndIf
        ElseIf $sResolution = '540' Then
                If UBound($_m3u8_url) - 1 = 1 Then
                        $_m3u8_url = $_m3u8_url[1]
                Else
                        $_m3u8_url = $_m3u8_url[UBound($_m3u8_url) - 1]
                EndIf
        ElseIf $sResolution = '720' Then
                If UBound($_m3u8_url) - 1 = 2 Then
                        $_m3u8_url = $_m3u8_url[2]
                Else
                        $_m3u8_url = $_m3u8_url[UBound($_m3u8_url) - 1]
                EndIf
        ElseIf $sResolution = '1080' Then
                If UBound($_m3u8_url) - 1 = 3 Then
                        $_m3u8_url = $_m3u8_url[3]
                Else
                        $_m3u8_url = $_m3u8_url[UBound($_m3u8_url) - 1]
                EndIf
        ElseIf $sResolution = 'Highest' Then
                $_m3u8_url = $_m3u8_url[UBound($_m3u8_url) - 1]
        Else
                $_m3u8_url = $_m3u8_url[UBound($_m3u8_url) - 1]
        EndIf

        ;; 获得最终使用的分辨率
        $use_resolution = StringRegExp($_m3u8_url, '(?m)^(.*?)p\/', 3)
        If @error = 0 Then
                $use_resolution = ' - ' & $use_resolution[0] & 'p'
        Else
                $use_resolution = ''
        EndIf
        ;; 完整网址
        Return $_header_url & '/' & $_m3u8_url & '.m3u8'
EndFunc   ;==>_parse_Master_List


Func _get_device_id() ;; 取得设备ID
        Local $url = 'https://ani.gamer.com.tw/ajax/getdeviceid.php'

        Local $oHtmlStr = _get_page($url, $Origin, False, $UA, $Cookie) ;; 取得网页原始码
        Local $sId = StringRegExp($ohtmlStr, '(?m)":"(.*?)"}', 3) ;;取得纯ID
        $sId = $sId[0]

        Return $sId
EndFunc   ;==>_get_device_id


;; 读取网页
Func _get_page($sUrl, $sOrigin = False, $sReferrer = False, $sUser_Agent = False, $sCookie = False)
        Local $Referrer
        ;; HttpSetUserAgent($sUser_Agent)
        Local $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
                $oHTTP.Open("GET", $sUrl, False)

                If $sUser_Agent <> False Then $oHTTP.SetRequestHeader("User-Agent", $sUser_Agent)
                If $sReferrer   <> False Then
                        $Referrer = "https://ani.gamer.com.tw/animeVideo.php?sn=" & $ani_Sn
                        $oHTTP.SetRequestHeader("Referer", $Referrer)
                EndIf
                If $sOrigin     <> False Then $oHTTP.SetRequestHeader("Origin",     $sOrigin)
                If $sCookie     <> False Then $oHTTP.setRequestHeader('Cookie',     $sCookie)

                $oHTTP.Send()

        Return $oHTTP.ResponseText
EndFunc   ;==>_get_page


Func _random_string($num) ;; hash,伪随机数,网址需要
        SRandom(_DateDiff('s', "1970/01/01 00:00:00", _NowCalc()))
                ;; ConsoleWrite(_DateDiff('s', "1970/01/01 00:00:00", _NowCalc()) & @CRLF)
                Local $sChars = 'abcdefghijklmnopqrstuvwxyz0123456789'
        Local $aChars = StringSplit($sChars, '', 2)
        Local $sRt = ''
        For $i = 1 To Int($num)
                $sRt &= $aChars[Random(0, StringLen($sChars) - 1, 1)]
        Next
        Return $sRt
EndFunc   ;==>_random_string


Func _check_cookie()
                Local $url = 'https://user.gamer.com.tw/login.php'
        Local $_login_page = _get_page($url, $Origin, False, $UA, $Cookie)
                Local $title = StringRegExp($_login_page, '(?m)title>(.*?)<\/title', 3)
                If $title[0] = '会员登入页 - 巴哈姆特' Then
                        MsgBox(48, '错误', 'Cookie失效!请重新设定。')
                        Return False
                Else
                        Return 'Cookie 有效!'
                EndIf
EndFunc   ;==>_check_cookie

Func _refresh_cookie() ;; 刷新cookie
                Local $url = 'https://ani.gamer.com.tw/'
        _get_page($url, $Origin, False, $UA, $Cookie)
EndFunc   ;==>_refresh_Cookie


Func _Encode2Unicode($str) ;; 文字译码
        Local $i, $Te, $unEncode
                Local $Temp = StringRegExp($str, '(\\u\w{4})', 3)
        If @error Then Return $str
        For $i = 0 To UBound($Temp) - 1
                $Te = ChrW(Dec(StringReplace($Temp[$i], '\u', '')))
                $unEncode = StringReplace($str, $Temp[$i], $Te, 1)
                $str = $unEncode
        Next
        Return $unEncode
EndFunc   ;==>_Encode2Unicode


Func _RunMpv($sUrl, $sTitle = '巴哈姆特 - 动画疯', $sVol = '100') ;; 以mpv播放影片
                If StringIsDigit($sVol) = 0 Or $sVol = '' Then $sVol = '100'
                Local $command = $mpv & ' "' & $sUrl & '"' & _
                                                ' --http-header-fields="Origin: https://ani.gamer.com.tw"' & _
                                                ' --title="' & $sTitle & '" --force-window --volume=' & $sVol
                Run(@ComSpec & " /c " & $command, "", @SW_HIDE)
EndFunc   ;==>_RunMpv


Func _debug_msg($sUrl) ;; 除错讯息
        Local $_debug_msg = ''
                        $_debug_msg &= 'ani_Sn'          & ':' & $ani_Sn                & @CRLF
                        $_debug_msg &= '_device_id'      & ':' & $_device_id            & @CRLF
                        $_debug_msg &= '_random_string'  & ':' & _random_string(12)     & @CRLF
                        $_debug_msg &= '_check_cookie'   & ':' & _check_cookie()        & @CRLF
                        $_debug_msg &= 'sUrl'           & ':' & _Encode2Unicode($sUrl) & @CRLF
                        ;; $_debug_msg &= @CRLF
                        ;; $_debug_msg &= 'Origin'          & ':' & $Origin                & @CRLF
                        ;; $_debug_msg &= 'UA'              & ':' & $UA                    & @CRLF
                        ;; $_debug_msg &= 'Cookie'          & ':' & $Cookie                & @CRLF
        MsgBox(64, '', $_debug_msg)
        Return
EndFunc   ;==>_debug_msg


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2022-6-18 10:23:15 | 显示全部楼层
w60711 发表于 2022-6-18 00:23
感谢afan大的指点
想请教有没有加入 SRandom的差异是为何?
因为有没有该行,都还是能照常执行 (汗

SRandom 一个永不会重复的种子,可让随机更“真”一些。然而,一般并不需要,因为重复的概率极低,就算重复了也是随机,因为随机本身就可能重复。

点评

原来如此,了解了,十分感谢您~  发表于 2022-6-18 18:01
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-25 22:45 , Processed in 0.084403 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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