w60711 发表于 2022-6-17 06:03:30

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

本帖最后由 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 = 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)
            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
      Next
      Return $sRt
EndFunc   ;==>_random_string


zghwelcome 发表于 2022-6-17 08:56:26

就是获取指定长度的随机字符串吧

afan 发表于 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
        Next
        Return $sRt
EndFunc   ;==>_random_string

w60711 发表于 2022-6-18 00:23:55

afan 发表于 2022-6-17 10:05
应该是的
感谢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
      Next
      Return $sRt
EndFunc   ;==>_random_string

w60711 发表于 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
;; 宣告 最终使用的分辨率变量
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
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
      ;; 取得4种分辨率的内容
      Local $_m3u8_url = _get_page($_m3u8_val, $Origin, True, $UA, $Cookie)
      ;;确认内容正确,并将4种分辨率数组化,360p、540p、720p、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

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

      ;; 获得最终使用的分辨率
      $use_resolution = StringRegExp($_m3u8_url, '(?m)^(.*?)p\/', 3)
      If @error = 0 Then
                $use_resolution = ' - ' & $use_resolution & '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

      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
      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 = '会员登入页 - 巴哈姆特' 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


afan 发表于 2022-6-18 10:23:15

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


SRandom 一个永不会重复的种子,可让随机更“真”一些。然而,一般并不需要,因为重复的概率极低,就算重复了也是随机,因为随机本身就可能重复。
页: [1]
查看完整版本: [已解決] go/python改写请教